我有两个活动是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)
这样的上下文,但这似乎不对。
答案 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)