首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Nougat中获取移动数据连接更改

在Nougat中获取移动数据连接更改
EN

Stack Overflow用户
提问于 2018-08-01 20:42:08
回答 1查看 331关注 0票数 0

在Android7之前,我们可以像下面这样定义一个广播接收器,以获得关于网络变化的通知,包括移动数据。

代码语言:javascript
复制
<receiver android:name=".reciever.DataStateChangedReceiver">
   <intent-filter>
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
   </intent-filter>
</receiver>

但从Android7开始,操作系统不再执行此广播接收器,因为它已被弃用。我正在寻找一个类似的解决方案来在Android7上实现同样的事情(计算出移动数据状态何时发生变化)。此外,我知道我可以在我的活动中通过动态注册字符串广播来做到这一点,但这对我来说是行不通的,因为我的应用程序可能会被关闭。

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-01 20:52:16

使用服务:

代码语言:javascript
复制
@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);
                }

            }
....
}

唤醒应用:

代码语言:javascript
复制
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);
}

在清单中:

代码语言:javascript
复制
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

你可以在这里找到完整的项目:

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

您可以对移动数据进行相同的修改

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51633569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档