向受管理的配置文件应用程序发送系统广播

3

我在用户档案和受管理档案(AFW)中都有一个应用程序。我试图根据包名称发送广播。

intent.setPackage(packageName); mContext.sendBroadcastAsUser(intent, UserHandle.ALL);

结果是两个应用程序(用户和管理档案)都会接收到广播。

我想只向受管理档案的应用程序发送广播(因此基本上不应该向用户档案发送)。


我想问你一下,你能否执行 mContext.sendBroadcastAsUser(intent, UserHandle.ALL) 这个方法?我看到只有系统应用才能这样做。(是真的吗?) - Sam
是的,我能够执行并且你是正确的。mContext.sendBroadcastAsUser(intent, UserHandle.ALL) 只能从系统应用程序中访问。我正在从PhoneWindowManager发送此广播。 - arungiri_10
1个回答

1

如果我们可以获取受管理的个人资料的用户ID,就可以仅向受管理的个人资料发送广播。

现在,要获取用户ID,我们需要监听添加了受管理的个人资料的广播。

Intent.ACTION_MANAGED_PROFILE_ADDED

注册监听此广播的步骤:

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_MANAGED_PROFILE_ADDED);
filter.addAction(Intent.ACTION_MANAGED_PROFILE_REMOVED);
context.registerReceiver(mManagedProfileListener, filter);

现在在onReceive内部,如何获取userid?
@Override
public void onReceive(Context context, Intent intent) {
    if (Intent.ACTION_MANAGED_PROFILE_ADDED.equals(intent.getAction())
        && intent.hasExtra(Intent.EXTRA_USER)) {
        UserHandle handle = intent.getExtras().getParcelable(Intent.EXTRA_USER);
        userid = handle.getIdentifier();
   }
}

现在向该用户ID发送广播(只有系统可以发送此广播),
mContext.sendBroadcastAsUser(intent, new UserHandle(userid));

注意:userid实际上是在设备配置托管配置文件或Android For Work时在/data/user下创建的文件夹名称。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接