sendBroadcastAsUser的任何进一步的文档/教程/示例?

时间:2015-01-29 23:13:28

标签: android android-intent android-broadcast

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()?

我的应用程序是否能够收听此特定系统广播?

1 个答案:

答案 0 :(得分:4)

sendBroadcast() - 仅将意图广播给在当前用户中运行的应用

sendBroadcastAsUser允许向在其他应用中运行的应用发送广播。但这需要INTERACT_ACROSS_USERS_FULL权限,这是第三方应用无法使用的。这就是原因,api没有记录

  

使用sendBroadcastAsUser()而不是使用ALL是什么意思   只需使用vanilla sendBroadcast()?

sendBroadcastAsUser允许向特定用户发送广播,或者在使用UserHandle.ALL的情况下,向所有用户发送广播。

  

我的应用程序是否能够收听此特定系统广播?

是的,只要您的应用有权接收该广播,任何发送给运行您应用的用户的广播都可以收听广播