Отправка системных широковещательных сообщений только приложениям управляемого профиля

У меня есть приложение как в профиле пользователя, так и в управляемом профиле (AFW). Я пытаюсь отправить трансляцию на основе имени пакета. намерение.setPackage (имя пакета); mContext.sendBroadcastAsUser(намерение, UserHandle.ALL);

В результате оба приложения (пользовательские и управляемые профили) получают трансляцию.

Я хочу отправить трансляцию только в приложение управляемого профиля (поэтому в основном профиль пользователя не должен получать )


person arungiri_10    schedule 05.02.2016    source источник
comment
Я хочу спросить вас, можете ли вы выполнить mContext.sendBroadcastAsUser(intent, UserHandle.ALL); Я читал, что это можно сделать только для системных приложений. (Это правда?)   -  person Sam    schedule 08.02.2016
comment
Да, я могу выступать, и вы правы. Доступ к mContext.sendBroadcastAsUser(intent, UserHandle.ALL) возможен только из системных приложений. Я отправляю эту трансляцию из PhoneWindowManager.   -  person arungiri_10    schedule 03.03.2016


Ответы (1)


Можно отправить трансляцию только управляемому профилю, если мы можем получить идентификатор пользователя управляемого профиля.

Теперь, чтобы получить идентификатор пользователя, нам нужно прослушать трансляцию добавленного управляемого профиля.

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, как получить идентификатор пользователя,

@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();
   }
}

Теперь отправьте широковещательную рассылку этому идентификатору пользователя (только система может отправить эту широковещательную рассылку),

mContext.sendBroadcastAsUser(intent, new UserHandle(userid));

Примечание. ID пользователя на самом деле является именем папки, которая создается в /data/user всякий раз, когда на устройстве настраивается управляемый профиль или AFW (Android For Work).

person arungiri_10    schedule 03.03.2016