#android #policy #device-admin
#Android #политика #устройство-администратор
Вопрос:
Я пытаюсь заставить диспетчер политики устройств работать, но я застреваю, когда пытаюсь его включить. Много гуглил и уже начал проявлять агрессию по поводу этой ошибки:
10-05 10:39:07.147: WARN/DeviceAdminAdd(144): Unable to retrieve device policy ComponentInfo{test.devadmin/test.devadmin.DeviceAdmin$MyDeviceAdminReceiver}
10-05 10:39:07.147: WARN/DeviceAdminAdd(144): android.content.pm.PackageManager$NameNotFoundException: ComponentInfo{test.devadmin/test.devadmin.DeviceAdmin$MyDeviceAdminReceiver}
Манифест:
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".DeviceAdmin" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".app.DeviceAdmin$Controller"
android:label="@string/activity_sample_device_admin">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
</intent-filter>
</activity>
<receiver android:name="MyDeviceAdminReceiver"
android:label="@string/app_label"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<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>
</application>
</manifest>
device_admin.xml
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
</uses-policies>
</device-admin>
метод включения
public void enable() {
if (!mDPM.isAdminActive(mDeviceAdmin)) {
Intent intent = new Intent(
DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
mDeviceAdmin);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"Additional text explaining why this needs to be added.");
startActivityForResult(intent, REQUEST_ENABLE);
} else {
mDPM.lockNow();
}
Класс получателя в основном такой же, как здесь: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html
http://rootfs.wordpress.com/2010/09/09/android-make-your-application-a-device-administrator/
любая помощь или совет будут высоко оценены!
Ответ №1:
Проверьте имя получателя <receiver android:name="MyDeviceAdminReceiver"
Я думаю, вы забыли добавить .
перед именем получателя:
<receiver android:name=".MyDeviceAdminReceiver"
Комментарии:
1. имя получателя должно быть receiver android:name=». MyDeviceAdminReceiver»
2. Спасибо, ребята. Я видел много других примеров, использующих Но это делает: MyDeviceAdminReceiver»
Ответ №2:
Я думаю, что если вы перепроверите свой java-файл DeviceAdmin, имя получателя, которое вы пытаетесь расширить, отличается от того, которое вы указываете в android manifest.xml досье. Просто дикое предположение, поскольку вы не показали свой java-файл DeviveAdmin
Ответ №3:
Я боролся с этой проблемой в течение последнего дня… Только что столкнулся с моей собственной проблемой. Моя проблема заключалась в componentName
том, что я делал свой конструктор, такой как:
val adminName = ComponentName(this, ::DeviceAdminReceiver.javaClass)
и, наконец, заметил, что получаю предупреждение о общедоступных конструкторах
PackageManager.Исключение NameNotFoundException… Быстрый переход к
val adminName = ComponentName("com.project.myApp", "com.project.myApp.DeviceAdminReceiver")
и все сработало немедленно.