代码之家  ›  专栏  ›  技术社区  ›  Alireza Ahmadi

在牛轧糖中改变移动数据连接

  •  0
  • Alireza Ahmadi  · 技术社区  · 8 年前

    在android7之前,我们可以定义一个广播接收器,如下所示,以获得有关网络变化的通知,包括移动数据。

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

    但从android7开始,操作系统不再执行这个广播接收器,因为它已经被弃用了。我正在寻找一个类似的解决方案,在android7上实现同样的功能(找出移动数据状态何时改变)。另外,我知道我可以通过在活动中动态注册广播来实现这一点,但这对我不起作用,因为我的应用程序可能会关闭。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Yash    8 年前

    使用服务:

    @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