我需要一个广播接收器名称“ 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");
}
}
答案 0 :(得分:0)
面向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;在任何活动中