Почему startActivity() для активации приглашения MDM от получателя мигает приглашением и не открывает его?
В небольшом приложении MDM (диспетчер устройств) мы пытаемся реализовать следующие функции: иметь всплывающее диалоговое окно «Активировать диспетчер устройств» сразу после установки приложения. Это приложение должно быть установлено на многих устройствах, использующих ADB в корпоративной среде, и оно значительно упростило бы процесс установки, если бы эта функциональность могла быть реализована. Используя этот код (Наш называется тем же именем,
DeviceAdminReceiver
), чтобы открыть подсказку:
public class PackageReceiver extends BroadcastReceiver {
private static final String PACKAGE_STRING = "package:";
private static final String REPLACEMENT_STRING = "";
@Override
public void onReceive(Context context, Intent intent) {
try{
boolean isSelf = intent.getDataString()
.replace(PACKAGE_STRING,REPLACEMENT_STRING)
.equals(BuildConfig.APPLICATION_ID);
switch (intent.getAction()){
case Intent.ACTION_PACKAGE_ADDED : case Intent.ACTION_PACKAGE_REPLACED :
if (isSelf){
Intent activateMDM =
new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
activateMDM.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
activateMDM.putExtra(
DevicePolicyManager.EXTRA_DEVICE_ADMIN,
DeviceAdminReceiver.getComponent(context)
);
context.startActivity(activateMDM);
}
break;
}
}catch (Exception e){
e.printStackTrace();
}
}
С этим объявлением в манифесте:
<receiver android:name=".receivers.PackageReceiver" android:enabled="true" android:exported="true">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<action android:name="android.intent.action.PACKAGE_INSTALL" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
<action android:name="android.intent.action.PACKAGES_UNSUSPENDED" />
<action android:name="android.intent.action.PACKAGES_SUSPENDED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
Проблема в том, что этот код вызывает мигание приглашения после завершения установки, но он не остается открытым достаточно долго, чтобы пользователь даже нажал «активировать».
На основе документации мы добавили строку
activateMDM.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
потому что без него подсказка вообще не открывалась, но после добавления этой строки она мигает только на мгновение и не остается открытой.
Если мы используем неявное намерение в
BroadcastReceiver
чтобы открыть в нашем приложении, а затем вызвать
activateMDM
намерения, как указано выше, мы достигаем желаемой функциональности. Однако кажется излишним иметь пустой
activity
посвящен именно этому. Как можно отредактировать приведенный выше код, чтобы запрос «Активировать диспетчер устройств» отображался описанным выше способом, и почему наш код только мигает, а не остается открытым?