Kep*_*zer 4 java android broadcastreceiver
我正在尝试向我的应用添加一些连接状态感知.使用这里的示例和google的文档,我们想出了一个接收器,它可以在连接状态发生变化时正确显示警报,但每当创建活动时也会不需要地显示警报.
ConnectStatusReceiver:
package com.zivtaller.placefinder.receivers;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.util.Log;
import android.widget.Toast;
public class ConnectStatusReceiver extends BroadcastReceiver {
private String TAG = "netReceiver";
public ConnectStatusReceiver() {
super();
}
@Override
public void onReceive(Context context, Intent arg1) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null
&& activeNetwork.isConnectedOrConnecting();
if (isConnected) {
Log.d(TAG, "Data connected");
Toast.makeText(context, "Data connected", Toast.LENGTH_SHORT)
.show();
} else {
Log.d(TAG, "Data not connected");
Toast.makeText(context, "Data not connected", Toast.LENGTH_SHORT)
.show();
}
}
Run Code Online (Sandbox Code Playgroud)
}
它在activity的onResume()中初始化和注册:
netReceiver = new ConnectStatusReceiver();
IntentFilter netFilter = new IntentFilter();
netFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(netReceiver, netFilter);
Run Code Online (Sandbox Code Playgroud)
该系统可能会产生粘性广播android.net.conn.CONNECTIVITY_CHANGE意图.粘性广播在发送后留在身边.无论何时注册一个BroadcastReceiver用于侦听粘性广播的广播,最近广播的意图将在registerReceiver()被呼叫时立即传递给接收方.
测试android.net.conn.CONNECTIVITY_CHANGE广播是否为粘性的简单方法是检查您的registerReceiver()呼叫的返回值onResume()
netReceiver = new ConnectStatusReceiver();
IntentFilter netFilter = new IntentFilter();
netFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
Intent intent = registerReceiver(netReceiver, netFilter);
if (intent != null) {
// broadcast is sticky
}
Run Code Online (Sandbox Code Playgroud)
如果您能够确定广播确实是粘性的,那么您所遇到的是预期的行为.
看看Android中sendStickyBroadcast和sendBroadcast有什么区别.