Android 检测用户何时启用数据连接

Android 检测用户何时启用数据连接,android,Android,我想知道如何检测用户何时启用了数据连接,但仅当我的应用程序将用户发送到网络数据设置屏幕时。然后执行其余的操作。。。 在那之前没有 我以前见过一些与同一主题相关的例子,但找不到一个清晰有效的答案 非常感谢您提供的任何帮助。我认为您应该在共享参考资料中选择一个标志,因此,当用户进入数据设置时,您保存标志=true,然后检查连接中的更改,如您在文章中提到的,您应该侦听标志,然后注册接收器以侦听数据连接,然后在onDestroy中注销连接,可以这样做: NetworkStateReceiver: pub

我想知道如何检测用户何时启用了数据连接,但仅当我的应用程序将用户发送到网络数据设置屏幕时。然后执行其余的操作。。。 在那之前没有

我以前见过一些与同一主题相关的例子,但找不到一个清晰有效的答案


非常感谢您提供的任何帮助。

我认为您应该在共享参考资料中选择一个标志,因此,当用户进入数据设置时,您保存
标志=true
,然后检查连接中的更改,如您在文章中提到的,您应该侦听标志,然后注册接收器以侦听数据连接,然后在onDestroy中注销连接,可以这样做:

NetworkStateReceiver:

public class NetworkStateReceiver extends BroadcastReceiver {

protected List<NetworkStateReceiverListener> listeners;
protected Boolean connected;

public NetworkStateReceiver() {
    listeners = new ArrayList<NetworkStateReceiverListener>();
    connected = null;
}

public void onReceive(Context context, Intent intent) {
    if(intent == null || intent.getExtras() == null)
        return;

    ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo ni = manager.getActiveNetworkInfo();

    if(ni != null && ni.getState() == NetworkInfo.State.CONNECTED) {
        connected = true;
    } else if(intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {
        connected = false;
    }

    notifyStateToAll();
}

private void notifyStateToAll() {
    for(NetworkStateReceiverListener listener : listeners)
        notifyState(listener);
}

private void notifyState(NetworkStateReceiverListener listener) {
    if(connected == null || listener == null)
        return;

    if(connected == true)
        listener.networkAvailable();
    else
        listener.networkUnavailable();
}

public void addListener(NetworkStateReceiverListener l) {
    listeners.add(l);
    notifyState(l);
}

public void removeListener(NetworkStateReceiverListener l) {
    listeners.remove(l);
}

public interface NetworkStateReceiverListener {
    public void networkAvailable();
    public void networkUnavailable();
}
然后在网络设置活动中接收时:

public class NetworkSettingsActivity extends Activity{
    NetworkStateReceiver receiver;

    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }
    protected void onCreate(Bundle savedInstanceState){
        if (getIntent().getBooleanExtra("ACTIVATE_RECEIVER", false)){
         receiver = new NetworkStateReceiver();
         receiver.addListener(new NetworkStateReceiver.NetworkStateReceiverListener() {
             @Override
             public void networkAvailable() {
                 //do something
             }

             @Override
             public void networkUnavailable() {
                //do something else
             }
         });
         registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
     }
    }
}

希望我能有所帮助,祝你好运:)…

事实上,我正在考虑另一种方法,就像这里回答的那样,但我真的不知道如何实现它……非常感谢。。。。这就是我需要的……:)很抱歉,我仍然无法对你的答案投赞成票,但我肯定会接受它……:)再次感谢……;)很高兴我能帮助你
public class NetworkSettingsActivity extends Activity{
    NetworkStateReceiver receiver;

    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(receiver);
    }
    protected void onCreate(Bundle savedInstanceState){
        if (getIntent().getBooleanExtra("ACTIVATE_RECEIVER", false)){
         receiver = new NetworkStateReceiver();
         receiver.addListener(new NetworkStateReceiver.NetworkStateReceiverListener() {
             @Override
             public void networkAvailable() {
                 //do something
             }

             @Override
             public void networkUnavailable() {
                //do something else
             }
         });
         registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
     }
    }
}