仅在某些活动上使用广播记录器

时间:2015-01-28 14:16:39

标签: android android-intent broadcastreceiver android-context

我有两个活动是Register(),另一个活动是ReadNews()。我正在使用广播接收器自动检测互联网连接以执行某些代码。

 public void onReceive(Context context, Intent intent) {

    ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
    Context.CONNECTIVITY_SERVICE);
    NetworkInfo wifiNetwork = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    if (wifiNetwork != null && wifiNetwork.isConnected()) {
        if(MyApplication.isActivityVisible() == true) {
            Log.d("WifiReceiver", "Have Wifi Connection");
            Toast.makeText(context, "تم الإتصال بالشبكة", Toast.LENGTH_LONG).show();
            if (context instanceof RegisterActivity){
                Intent i = new Intent(context,
                        ReadNews.class);
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(i);
            }
            else {

            }
        }
    }

如果仅在用户仍在使用ReadNews()的情况下继续互联网连接时,如何启动RegisterActivity()活动?
我尝试使用像if (context instanceof RegisterActivity)这样的上下文,但这似乎不对。

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说,你不需要内部课程,你可以创建一个独立的课程,如下所示:

public class MyWifiReceiver extends BroadcastReceiver {

    private Activity activityToFinish;

    MyWifiReceiver(Activity activityToFinish) {
        this.activityToFinish = activityToFinish;
    }

    @Override
    public void onReceive(Context context, Intent intent) {

        // do what ever you want here
        ...
        // finish the activity
        activityToFinish.finish();
    }
}

并在RegisterActivity中声明一个私有成员变量,如下所示:

 private MyWifiReceiver wifiReceiver;

RegisterActivity.onCreate()中创建一个接收器的实例,在构造函数中传递Activity,如下所示:

    wifiReceiver = new MyWifiReceiver(this);

然后注册并取消注册wifiReceiver,如您在自己的答案中所示。

答案 1 :(得分:0)

感谢@Squonk评论,我已经按照那些简短的评论说明来完成我想要做的事情,现在我想分享我的代码摘要,以展示这个东西是如何工作的:
广播接收器内部类

 private BroadcastReceiver wifiReceiver =
        new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

    //do what ever you want here
};

在onResume()

中注册广播接收器
@Override
protected void onResume() {
    super.onResume();
    IntentFilter filter = new IntentFilter();
    filter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); //or any intent filter you want 
    registerReceiver(wifiReceiver, filter);
}

在onPause中取消注册广播接收器

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

重要

请勿在清单中使用<intent-filter>。 注册广播接收器必须是动态的(onResume,onPause)