为什么从接收器激活 MDM 提示的 startActivity() 会闪烁提示而不打开它?

问题描述

一个小型 MDM(设备管理器)应用程序中,我们试图实现以下功能:安装应用程序后立即弹出“激活设备管理器”对话框。此应用程序必须安装在企业环境中使用 ADB 的许多设备上,如果可以实现此功能,它将大大简化安装过程。使用这段代码(我们的 DeviceAdminReceiver 同名,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>

问题在于,此代码会导致安装完成时提示闪烁,但它的打开时间不足以让用户甚至点击“激活”。

基于 docs,我们添加activateMDM.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 行,因为没有它提示根本不会打开,但添加此行后,它只是短暂闪烁,不会保持打开状态。

如果我们在 broadcastReceiver 中使用隐式 Intent 在我们的应用程序中打开一个 activity,然后让该 activity 如上所述调用 activateMDM Intent,我们实现了所需的功能。然而,专门为此设置一个空的 activity 似乎有点过分。上面的代码如何编辑,让“激活设备管理器”提示以上述方式显示,为什么我们的代码只导致它闪烁而不保持打开状态?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)