动态BroadcastReceiver检查在线连接 [英] Dynamic BroadcastReceiver to Check Online Connectivity

查看:146
本文介绍了动态BroadcastReceiver检查在线连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想动态设置一个BroadcastReceiver,以仅在我的应用程序在前台运行时检查我是否在线.在我的主类中,我创建了一个意图过滤器,一个嵌套的BroadcastReceiver类,最后分别在onResume和onPause方法中注册/注销了接收器.

I want to dynamically set up a BroadcastReceiver to check whether or not I am online ONLY when my app is running in the foreground. Within my main class, I created an an Intent Filter, a nested BroadcastReceiver Class and finally register/unregister the receiver within the onResume and onPause methods respectively.

我的问题是,是否可以将意图操作添加到检查在线连接的意图过滤器中?

My question is, is there an an intent ACTION that I can add to my intent filter that checks for online connectivity?

如果没有,我如何创建此动态广播接收器以仅在我的应用程序运行时执行?

If not, how can I create this Dynamic Broadcast Receiver to perform only when my app is running?

这是我班级的样子....

Here is what my Class looks like....

public class MainActivity extends AppCompatActivity {
private IntentFilter onlineIntentFilter;
private CheckOnlineReceiver checkOnlineReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    onlineIntentFilter = new IntentFilter();
    checkOnlineReceiver = new CheckOnlineReceiver();
    //*****WHAT INTENT ACTION CAN I PASS TO CHECK NETWORK CONNECTIVITY******
    onlineIntentFilter.addAction(Intent.ACTION_POWER_DISCONNECTED);

    }

@Override
protected void onResume() {
    super.onResume();
    registerReceiver(checkOnlineReceiver, onlineIntentFilter);
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(checkOnlineReceiver);
}


private class CheckOnlineReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Toast.makeText(getApplicationContext(),"IN METHOD, ACTION = " + action, Toast.LENGTH_LONG).show();
    }
}}

推荐答案

添加连接操作 onlineIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION)

别忘了添加权限

< uses-permission android:name ="android.permission.ACCESS_NETWORK_STATE"/>

连接更改时,将调用广播接收器的 onReceive(),这意味着已连接和已断开.因此,每当您收到广播时,您都需要检查以下连通性

The broadcast receiver's onReceive() will be called on connectivity change which means on both connected and disconnected. so whenever you receive the braodcast you have check for connectivity as below

public boolean isNetworkAvailable() {
  ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
  NetworkInfo networkInfo = cm.getActiveNetworkInfo();
  if (networkInfo != null && networkInfo.isConnected()) {
      return true;
  }
  return false;
}

这篇关于动态BroadcastReceiver检查在线连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆