在Android中使用BroadcastReceiver检查网络连接
我正在使用BroadcastReceiver在我的应用程序运行时检查网络连接。我已将BroadcastReceiver与活动绑定,以便在连接中断时提供一些控件,如AlertDialog。但是现在我不想把这个接收器限制在一个特定的活动中,而是想把它应用到我的整个应用程序中(所有活动)。那我该怎么做才能完成呢 这是我使用的代码。请让我知道我的代码是否达到标准,如果出现错误,请纠正我在Android中使用BroadcastReceiver检查网络连接,android,networking,broadcastreceiver,connectivity,Android,Networking,Broadcastreceiver,Connectivity,我正在使用BroadcastReceiver在我的应用程序运行时检查网络连接。我已将BroadcastReceiver与活动绑定,以便在连接中断时提供一些控件,如AlertDialog。但是现在我不想把这个接收器限制在一个特定的活动中,而是想把它应用到我的整个应用程序中(所有活动)。那我该怎么做才能完成呢 这是我使用的代码。请让我知道我的代码是否达到标准,如果出现错误,请纠正我 package com.xx.mobile; import android.app.Activity; import
package com.xx.mobile;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class CheckforConnectivity extends Activity {
private static final String LOG_TAG = CheckforConnectivity.class.getSimpleName();
static final String ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
private boolean mActiveNetState = false;
private boolean mMobileNetState = false;
private boolean mStatus = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter(ACTION);
this.registerReceiver(ConnectivityCheckReceiver, filter);
}
@Override
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(ConnectivityCheckReceiver);
}
private final BroadcastReceiver mConnectivityCheckReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
boolean noConnectivity = intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false);
String reason = intent.getStringExtra(ConnectivityManager.EXTRA_REASON);
boolean isFailover = intent.getBooleanExtra(ConnectivityManager.EXTRA_IS_FAILOVER, false);
NetworkInfo currentNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
NetworkInfo otherNetworkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_OTHER_NETWORK_INFO);
Log.i(TAG, "Status : " + noConnectivity + ", Reason :" + reason + ", FailOver :" + isFailover + ", Current Network Info : " + currentNetworkInfo + ", OtherNetwork Info :" + otherNetworkInfo);
mStatus = noConnectivity;
Log.d(TAG, "Status :" + mStatus);
if(mStatus){
AlertDialog.Builder builder = new AlertDialog.Builder(NotifySMSReceived.this);
builder.setMessage("Connection is not Available !");
builder.setTitle("Info");
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
else {
AlertDialog.Builder builder = new AlertDialog.Builder(NotifySMSReceived.this);
builder.setMessage("Connection is Available !");
builder.setTitle("Info");
builder.setPositiveButton("Ok", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
};
}
非常感谢您的任何帮助
谢谢我想你有两个选择 第一选项 首先,你不应该用代码注册你的接收者,而应该在代码中注册。通过这种方式,它将自动为您的应用程序注册。在接收器中,您必须将网络的当前状态集中存储在某个地方,可能是在自定义类或单例类中 实现某种类型的,以便您的活动可以将自己注册到保存网络状态的自定义应用程序类。然后,应用程序类通知每个注册的活动有关网络状态的更改 您可以在onCreate()和onDestroy()中向应用程序类注册和从应用程序类注销活动类(最好是onResume()和onPause()),这样它们只会在网络更改可见时收到通知 第二选项 另一种选择是坚持使用当前代码,并将广播接收器的引用集中保存在某个位置,同样,自定义应用程序类将完成这项工作
因此,您的活动知道在哪里可以找到用于注册和注销的接收者。但要知道,你必须找到一个地方,在那里你启动接收器。还请记住,您必须处理应用程序可能因内存不足而被Android关闭并在稍后重新启动的情况,然后您必须重新创建接收器。Flo的选项一通过包含在清单文件中使广播接收器全局化是正确的。还有一个选项是,将一个活动作为基本活动,并用它扩展所有活动,然后在基本活动中注册接收者 谢谢你的回复。。。请给我一些参考资料/片段,以便我更好地理解和帮助其他人。谢谢……你到底想知道什么?你能举一些例子吗