android8显示广播,关于android8.0静态接收广播

android8.0很多广播不能静态注册接受

查看log显示 Background execution not allowed: receiving

查看代码frameworks/base/services/core/java/com/android/server/am/BroadcastQueue.java

if (!skip) {

final int allowed = mService.getAppStartModeLocked(

info.activityInfo.applicationInfo.uid, info.activityInfo.packageName,

info.activityInfo.applicationInfo.targetSdkVersion, -1, true, false);

if (allowed != ActivityManager.APP_START_MODE_NORMAL) {

// We won't allow this receiver to be launched if the app has been

// completely disabled from launches, or it was not explicitly sent

// to it and the app is in a state that should not receive it

// (depending on how getAppStartModeLocked has determined that).

if (allowed == ActivityManager.APP_START_MODE_DISABLED) {

Slog.w(TAG, "Background execution disabled: receiving "

+ r.intent + " to "

+ component.flattenToShortString());

skip = true;

} else if (((r.intent.getFlags()&Intent.FLAG_RECEIVER_EXCLUDE_BACKGROUND) != 0)

|| (r.intent.getComponent() == null

&& r.intent.getPackage() == null

&& ((r.intent.getFlags()

& Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND) == 0)

&& !isSignaturePerm(r.requiredPermissions))) {

mService.addBackgroundCheckViolationLocked(r.intent.getAction(),

component.getPackageName());

Slog.w(TAG, "Background execution not allowed: receiving "

+ r.intent + " to "

+ component.flattenToShortString());

skip = true;

}

}

}

所以我们要发送能静态注册接受的广播可以设置ComponentName,PackageName,或者设置FLAG_RECEIVER_INCLUDE_BACKGROUND 这个标志位

设置ComponentName,PackageName就只有指定的应用能接受这个广播,

/**

*

* @hide

*/

public static final int FLAG_RECEIVER_INCLUDE_BACKGROUND = 0x01000000;

这个FLAG是hide的,所以我们能设置intent.addFlags(0x01000000);去让广播能静态注册接受.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值