Android 8.0(api27)静态广播和动态广播接收问题

Android 8.0对广播进行了限制:静态广播(应用内)需要为Intent设置setClassName(String),动态广播需要为IntentFilter设置addAction(String)同时还要为Intent设置setAction(String),并且这两个字符内容必须一样。

附代码

1.静态广播(应用内):必须设置setClassName(context, "包+类名")

//广播接收者--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();
    }
}

//注册静态广播--AndroidManifest.xml
<receiver android:name=".broadcast_receiver.MyBroadcastReceiver"
    android:permission="true">
      <intent-filter>
         <action android:name="myBroadcastReceiver" />
      </intent-filter>
</receiver>

// 发送静态广播-MainActivity
Intent intent = new Intent();
intent.setAction("myBroadcastReceiver");
String className = getPackageName() + ".broadcast_receiver.MyBroadcastReceiver";
intent.setClassName(MainActivity.this, className);
sendBroadcast(intent);



2.动态广播:intentFilter.addAction(String)和intent.setAction(String)字符内容必须一样


//广播接收者
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");
// 注册动态广播
registerReceiver(new DynamicBroadcastReceiver(), intentFilter);
// 发送动态广播
Intent intent = new Intent();
intent.setAction("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容