sendBroadcastAsUser上的唯一文档说明了这一点:
sendBroadcastAsUser(Intent intent,UserHandle user,String receiverPermission)
允许您指定的sendBroadcast(Intent,String)版本 广播将被发送到的用户。
但是我找不到任何关于如何指定用户的示例,或者如何设置监听器来收听这样的广播。
在AOSP来源中,我找到了这个例子:
Intent intent = new Intent(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
intent.putExtra(PhoneConstants.STATE_KEY,
DefaultPhoneNotifier.convertCallState(state).toString());
if (!TextUtils.isEmpty(incomingNumber)) {
intent.putExtra(TelephonyManager.EXTRA_INCOMING_NUMBER, incomingNumber);
}
intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
android.Manifest.permission.READ_PHONE_STATE);
UserHandle.ALL对于指定的用户意味着什么,如果它的字面意思是“全部”那么使用sendBroadcastAsUser()和ALL的关键是什么,而不仅仅是使用vanilla sendBroadcast()?
我的应用程序是否能够收听此特定系统广播?
答案 0 :(得分:4)
sendBroadcast()
- 仅将意图广播给在当前用户中运行的应用
sendBroadcastAsUser
允许向在其他应用中运行的应用发送广播。但这需要INTERACT_ACROSS_USERS_FULL
权限,这是第三方应用无法使用的。这就是原因,api没有记录
使用sendBroadcastAsUser()而不是使用ALL是什么意思 只需使用vanilla sendBroadcast()?
sendBroadcastAsUser允许向特定用户发送广播,或者在使用UserHandle.ALL的情况下,向所有用户发送广播。
我的应用程序是否能够收听此特定系统广播?
是的,只要您的应用有权接收该广播,任何发送给运行您应用的用户的广播都可以收听广播