Nan*_*l T 4 networking android connectivity broadcastreceiver
我正在使用BroadcastReceiver来检查我的应用程序运行时的网络连接.我已经使用Activity绑定了BroadcastReceiver以便在连接断开时带来一些像AlertDialog这样的控件.但现在我不想将此接收器限制为特定的活动,而是我希望将其应用于我的整个应用程序(所有活动).那么我应该采取什么方式来完成这项工作......
这是我用过的代码.请让我知道我的代码是否符合标准,如果出错了,请纠正我.
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();
}
}
};
}
Run Code Online (Sandbox Code Playgroud)
任何形式的帮助都非常感谢.
谢谢
Flo*_*Flo 14
我认为你有两个选择.
第一种选择
首先,您应该注册您的接收器不是代码,而是在清单文件中.通过这种方式,它会自动注册为您的应用程序.在您的接收器中,您必须将网络的当前状态集中存储在自定义Application类或单例类中.
实现某种观察者模式,以便您的活动可以将自己注册到保存网络状态的自定义Application类.然后,Application类通知每个已注册的活动有关网络状态的更改.
您可以在onCreate()和onDestroy()中注册和注销Application类的活动类(更好的是onResume()和onPause()),这样只有在网络更改可见时才会通知它们.
第二种选择
另一个选择是坚持你当前的代码并集中保存广播接收器的引用,同样自定义的应用程序类将完成这项工作.
因此,您的活动知道在哪里可以找到用于注册和取消注册的接收器.但请注意,您必须找到一个启动接收器的地方.另外请记住,您必须处理由于内存不足而导致Android关闭应用程序并稍后重新启动的情况,您必须重新创建接收器.
| 归档时间: |
|
| 查看次数: |
14235 次 |
| 最近记录: |