在Android7之前,我们可以像下面这样定义一个广播接收器,以获得关于网络变化的通知,包括移动数据。
<receiver android:name=".reciever.DataStateChangedReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>但从Android7开始,操作系统不再执行此广播接收器,因为它已被弃用。我正在寻找一个类似的解决方案来在Android7上实现同样的事情(计算出移动数据状态何时发生变化)。此外,我知道我可以在我的活动中通过动态注册字符串广播来做到这一点,但这对我来说是行不通的,因为我的应用程序可能会被关闭。
我正在寻找一种解决方案,可以在连接发生变化时唤醒我的应用程序。
发布于 2018-08-01 20:52:16
使用服务:
@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);
}在清单中:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />你可以在这里找到完整的项目:
https://github.com/stupidly-logical/WiFiName
您可以对移动数据进行相同的修改
https://stackoverflow.com/questions/51633569
复制相似问题