获取牛轧糖的移动数据连接更改

时间:2018-08-01 12:42:08

标签: android broadcastreceiver job-scheduling

在Android 7之前,我们可以定义以下广播接收器,以获取有关包括移动数据在内的网络变化的通知。

<receiver android:name=".reciever.DataStateChangedReceiver">
   <intent-filter>
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
   </intent-filter>
</receiver>

但是从Android 7开始,OS已停止使用,不再执行此广播接收器。我正在寻找一种类似的解决方案,以在Android 7上实现相同的目的(确定移动数据状态更改时的状态)。另外,我知道我可以通过Activity中的动态注册字符串广播来做到这一点,但这对我来说不起作用,因为我的应用程序可能已关闭。

我正在寻找一种解决方案,只要连接性发生变化即可唤醒我的应用程序。

1 个答案:

答案 0 :(得分:0)

使用服务:

function convert(data){
  var myMap = {}
  data.forEach(el => myMap[el] = myMap[el] != undefined ? myMap[el] + 1 : 1);
  return Object.keys(myMap).map(k => {return {name: k, y: myMap[k]}})
}

console.log(convert(['A','B','B','B','C','C','A','B']))

唤醒应用程序:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
    registerReceiver(broadcastReceiver,intentFilter);

    return START_STICKY;
}

private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
            ConnectivityManager connectivityManager = (ConnectivityManager)context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) {

                if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE){
                    notifyMobileNetworkChange(context);
                }
                else {
                    notifyWifiNetworkChange(context);
                }

            }
....
}

在清单中

private void notifyMobileNetworkChange(Context context) {
    //Run anything you want here
    Intent dialogIntent = new Intent(this, WiFiName.class);
    dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(dialogIntent);
}

您可以在此处找到完整的项目:

https://github.com/stupidly-logical/WiFiName

您可以为移动数据进行修改