I follow this guide on how to get my application request to become a device administrator.
This works fine on any version of Android 4.x with any phone, but it doesn’t work on Lollipop (I tried using Nexus 5 and Nexus 7).
Logcat loads the following error:
*11-02 07:37:09.649: W/DeviceAdminAdd(10020): Cannot start ADD_DEVICE_ADMIN as a new task*
Does anyone else encounter this issue with Lollipop? What could be the reason?
I went through all the parts of the manual and made sure that my XML, manifest, receiver, etc. Everything is as it should be (and, again, it works on any other version of the OS or phone that I tried).
If that matters, I am building my application with the target API = 17 and min API = 14 for compatibility reasons.
Adding a manifest file:
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.package"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<uses-permission android:name="com.mycompany.permission.NFProvider_WRITE" />
<uses-permission android:name="com.mycompany.permission.NFProvider_READ" />
<uses-permission android:name="android.permission.READ_LOGS" />
<application
android:name="com.mycompany.myapp.Application"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<receiver
android:name="com.mycompany.myapp.NFAdminReceiver"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin"/>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
</intent-filter>
</receiver>
<activity
android:name="com.mycompany.myapp.ConnectMainActivity"
android:label="@string/title_activity_connect_main"
android:process="com.mycompany.ui"
android:launchMode="singleInstance"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name="com.mycompany.myapp.MainService"
android:enabled="true" />
<meta-data android:name="applicationVersion" android:value="1.2.0.213" />
</application>
</manifest>
Code creating intent:
ComponentName mComponentName = new ComponentName(activity, NFAdminReceiver.class);
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mComponentName);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, ADMIN_REQUEST_TITLE);
activity.startActivityForResult(intent, ADMIN_INTENT);
Variable activity is an instance of ConnectMainActivity
source
share