如何解决为什么从接收器激活 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 举报,一经查实,本站将立刻删除。