在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中的动态注册字符串广播来做到这一点,但这对我来说不起作用,因为我的应用程序可能已关闭。
我正在寻找一种解决方案,只要连接性发生变化即可唤醒我的应用程序。
答案 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
您可以为移动数据进行修改