无法从我的服务类(Android Lollipop)启动设备管理员活动

Posted

技术标签:

【中文标题】无法从我的服务类(Android Lollipop)启动设备管理员活动【英文标题】:Not able to launch device administrator activity from my service class (Android Lollipop) 【发布时间】:2015-05-28 06:50:10 【问题描述】:

我正在尝试通过设备管理员活动来提示用户以启用我的应用程序作为设备管理员。这是尝试从我的服务类调用设备管理员活动的代码:

ComponentName deviceAdmin=new ComponentName(context,DeviceAdminReceiver.class);
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdmin);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Make sure to accept in order to provide support for lock and wipe");
PendingIntent pendingIntent = PendingIntent.getActivity(context, DevicePolicyManagerLockWipeService.RESULT_ENABLE, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
pendingIntent.send();

android Manifest 如下;

<receiver android:name=".DeviceAdminReceiver" android:label="DeviceAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN" android:exported="true">
<meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin"/>
<intent-filter>
   <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
</intent-filter>
</receiver>

这适用于任何 4.x android 版本,但不适用于 Lollipop 版本。在棒棒糖中,当我启动我的应用程序时,它看起来好像正在打开设备管理活动,但活动动画立即停止并关闭,而不提示用户启用设备管理。但是,我的应用程序显示在设置->安全->设备管理员窗口中,但未选中作为设备管理员。

【问题讨论】:

【参考方案1】:

您可能需要在 AndroidManifest.xml 中从发送 ACTION_ADD_DEVICE_ADMIN 意图的活动中删除 android:launchMode="singleInstance"

【讨论】:

ACTION_ADD_DEVICE_ADMIN 意图是从服务类而不是活动发送的。 这是问题的一部分,即使在 4.x 上没有单独的活动来发送意图也不会弹出对话框(至少在我们使用的设备上)。创建一个除了发送意图之外什么都不做的新活动,然后从您的服务中启动该活动。

以上是关于无法从我的服务类(Android Lollipop)启动设备管理员活动的主要内容,如果未能解决你的问题,请参考以下文章

Google GCM - 未在 android Lollipop 中接收推送通知

Android 推送通知服务未在 Lollipop 上启动

Android Lollipop 问题 - 无法将图像从相机加载到 ImageView

AndroLua on Lollipop:JNI DETECTED ERROR IN APPLICATION:无法调用static int org.keplerproject.luajava.LuaJ

在 Android Lollipop 中扩展 Preference 类 = 丢失动画

如何使用 OS Lollipop 在 Java 中为 Android 裁剪图像