Android 8.0對(duì)廣播進(jìn)行了限制:靜態(tài)廣播(應(yīng)用內(nèi))需要為Intent設(shè)置setClassName(String),動(dòng)態(tài)廣播需要為IntentFilter設(shè)置addAction(String)同時(shí)還要為Intent設(shè)置setAction(String),并且這兩個(gè)字符內(nèi)容必須一樣庵楷。
附代碼
1.靜態(tài)廣播(應(yīng)用內(nèi)):必須設(shè)置setClassName(context, "包+類(lèi)名")
//廣播接收者--MyBroadcastReceiver.java
package com.example.administrator.testmvp.broadcast_receiver;
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();
}
}
//注冊(cè)靜態(tài)廣播--AndroidManifest.xml
<receiver android:name=".broadcast_receiver.MyBroadcastReceiver"
android:permission="true">
<intent-filter>
<action android:name="myBroadcastReceiver" />
</intent-filter>
</receiver>
// 發(fā)送靜態(tài)廣播-MainActivity
Intent intent = new Intent();
intent.setAction("myBroadcastReceiver");
String className = getPackageName() + ".broadcast_receiver.MyBroadcastReceiver";
intent.setClassName(MainActivity.this, className);
sendBroadcast(intent);
2.動(dòng)態(tài)廣播:intentFilter.addAction(String)和intent.setAction(String)字符內(nèi)容必須一樣
//廣播接收者
package com.example.administrator.testmvp.broadcast_receiver;
public class DynamicBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, intent.getAction(), Toast.LENGTH_SHORT).show();
}
}
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcasttest.MY_BROADCAST");
// 注冊(cè)動(dòng)態(tài)廣播
registerReceiver(new DynamicBroadcastReceiver(), intentFilter);
// 發(fā)送動(dòng)態(tài)廣播
Intent intent = new Intent();
intent.setAction("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);