Администратор политики устройства не может получить политику устройства - PullRequest
1 голос
/ 05 октября 2011

Я пытаюсь заставить работать диспетчер политик устройств, но застреваю, когда пытаюсь его включить.Гуглил много и уже становился агрессивным по поводу этой ошибки:

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/

любая помощь или совет будет высоко ценится!

Ответы [ 3 ]

3 голосов
/ 15 декабря 2011

Я думаю, что если вы перепроверите свой Java-файл DeviceAdmin, имя получателя, которое вы пытаетесь расширить, отличается от того, которое вы указываете в файле android manifest.xml.Просто дикая догадка, поскольку вы не показали свой Java-файл DeviveAdmin

3 голосов
/ 03 ноября 2011

Проверьте имя получателя <receiver android:name="MyDeviceAdminReceiver"

Я думаю, вы забыли добавить . перед именем получателя:

<receiver android:name=".MyDeviceAdminReceiver"
0 голосов
/ 21 июня 2019

Я боролся с этой проблемой в течение последнего дня ... Просто столкнулся с моей собственной проблемой.Моя проблема была в моем componentName. Я делал свой конструктор, такой как:

val adminName = ComponentName(this, ::DeviceAdminReceiver.javaClass)

и, наконец, заметил, что получаю Предупреждение об открытых конструкторах PackageManager.NameNotFoundException ... Быстрый переход к

val adminName = ComponentName("com.project.myApp", "com.project.myApp.DeviceAdminReceiver")

и все сразу заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...