连接变化接收器在android中得到错误的意图

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)

Bry*_*lap 6

该系统可能会产生粘性广播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有什么区别.