在一个小型的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>
问题是,此代码导致安装完成时提示闪烁,但它没有保持足够长的打开时间,用户甚至无法点击“激活”。
根据文档,我们添加了行 activateMDM.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
因为没有它,提示符根本不会打开,但是添加这一行后,它只会短暂闪烁,不会保持打开状态。
如果我们在 BroadcastReceiver
开业 activity
在我们的应用程序中,然后 activity
打电话给 activateMDM
如上所述,我们实现了所需的功能。然而,拥有一个空的 activity
就是为了这个。如何编辑上述代码以使“激活设备管理器”提示以上述方式显示,以及为什么我们的代码仅使其闪烁而不保持打开状态?
暂无答案!
目前还没有任何答案,快来回答吧!