网络更改的广播接收器未执行

时间:2018-08-06 04:50:44

标签: android permissions

我需要一个广播接收器名称“ NetworkReciver.java”,该名称应在Internet连接或断开连接时执行。但是执行起来很麻烦。

清单权限

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />


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

在MainActivity.java中请求权限

String[] permissionsRequired = new String[]{Manifest.permission.SET_ALARM,
     Manifest.permission.INTERNET,
     Manifest.permission.ACCESS_NETWORK_STATE,};
     // Since these are Normal Permissions
     ActivityCompat.requestPermissions(this, permissionsRequired, 1);

NetworkReciever.java:

public class NetworkReciever extends BroadcastReceiver 
{

         @Override
         public void onReceive(Context context, Intent intent)
         {
                Log.i("KAMLESH", "Network REceiver Alarm Set in Hair Style");
         }
}

2 个答案:

答案 0 :(得分:0)

来自documentation

面向Android 7.0(API级别24)及更高版本的应用如果在清单中声明了广播接收器,则不会接收CONNECTIVITY_ACTION广播。如果应用向CONNECTIVITY_ACTION注册BroadcastReceiver,并且该上下文仍然有效,则应用仍将接收Context.registerReceiver()广播。


这意味着您需要动态注册接收者,而不是从清单中注册。阅读Dynamically register/unregister a broadcast receiver in android,它将为您提供有关动态方式的想法。


注意:自API 28起,CONNECTIVITY_ACTION已过时。引入的其他选项很少,您可以在相同的网址CONNECTIVITY_ACTION中找到

答案 1 :(得分:0)

您必须像该registerReceiver(new NetworkReciever())一样注册此广播接收器的NetworkReciever;在任何活动中