Zor*_*orb 6 android task android-intent device-policy-manager
我有一项服务,我想要服务推广,以启用它作为设备管理员,直到现在我从服务启动这种类型的UI交互,如
Intent intent2 = new Intent();
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent2.setAction(android.content.Intent.ACTION_VIEW);
intent2.setDataAndType(uri, "application/vnd.android.package-archive");
context.startActivity(intent2);
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但使用DevicePolicyManager我找不到方法:
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "some text.");
context.startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
不起作用:不要宣传任何东西,但也不要崩溃.没有intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);它只是崩溃,因为这段代码在服务内部.想法?
原因在于Android DeviceAdminAdd类本身的代码:
if ((getIntent().getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
Log.w(TAG, "Cannot start ADD_DEVICE_ADMIN as a new task");
finish();
return;
}
Run Code Online (Sandbox Code Playgroud)
您应该考虑使用另一个活动来调用DevicePolicyManager.
我刚刚为自己解决了这个问题。
请注意,您需要将此代码放入 Android Manifest.xml 文件的父级中:
<receiver
android:name=".ScreenLockerDeviceAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_policies" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
它有效:)
| 归档时间: |
|
| 查看次数: |
6414 次 |
| 最近记录: |