Ошибка: неизвестный администратор: ComponentInfo
Файл манифеста можно найти здесь.
Класс DeviceAdminReceiver можно найти здесь
agent_device_xml как определено ниже:
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
<expire-password />
<encrypted-storage />
<disable-camera />
</uses-policies>
Команда выполнена и ошибка:
adb shell dpm set-device-owner org.wso2.iot.agent.services/.AgentDeviceAdminReceiver
Error: Unknown admin: ComponentInfo{org.wso2.iot.agent.services/org.wso2.iot.agent.services.AgentDeviceAdminReceiver}
Это logcat.
06-21 13:58:54.053 11499-12787/org.wso2.iot.agent E/Volley: [714] NetworkDispatcher.run: Unhandled exception java.lang.SecurityException: Admin ComponentInfo{org.wso2.iot.agent/org.wso2.iot.agent.services.AgentDeviceAdminReceiver} does not own the device
java.lang.SecurityException: Admin ComponentInfo{org.wso2.iot.agent/org.wso2.iot.agent.services.AgentDeviceAdminReceiver} does not own the device
at android.os.Parcel.readException(Parcel.java:1689)
at android.os.Parcel.readException(Parcel.java:1641)
at android.app.admin.IDevicePolicyManager$Stub$Proxy.setAutoTimeRequired(IDevicePolicyManager.java:6759)
at android.app.admin.DevicePolicyManager.setAutoTimeRequired(DevicePolicyManager.java:3377)
at org.wso2.iot.agent.services.operation.OperationManagerDeviceOwner.setAutoTimeRequired(OperationManagerDeviceOwner.java:681)
at org.wso2.iot.agent.services.operation.OperationProcessor.doTask(OperationProcessor.java:219)
at org.wso2.iot.agent.services.operation.OperationProcessor.setPolicyBundle(OperationProcessor.java:267)
at org.wso2.iot.agent.services.operation.OperationProcessor.doTask(OperationProcessor.java:125)
at org.wso2.iot.agent.services.MessageProcessor.performOperation(MessageProcessor.java:130)
at org.wso2.iot.agent.services.MessageProcessor.onReceiveAPIResult(MessageProcessor.java:327)
at org.wso2.iot.agent.proxy.APIController$9.parseNetworkResponse(APIController.java:383)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:123)
06-21 13:58:54.054 11499-11499/org.wso2.iot.agent E/APIController: com.android.volley.VolleyError: java.lang.SecurityException: Admin ComponentInfo{org.wso2.iot.agent/org.wso2.iot.agent.services.AgentDeviceAdminReceiver} does not own the device
Как я могу исправить эту проблему, чтобы сделать приложение владельцем устройства.
4 ответа
На первый взгляд кажется, что в имени получателя отсутствует ".services", а имя пакета не должно содержать ".services".
Попробуйте: adb shell dpm set-device-owner org.wso2.iot.agent/.services.AgentDeviceAdminReceiver
Уже поздно, но я решил изменить имя пакета для applicationId при запуске команды ADB.
Что я пытался сделать:
adb shell dpm set-device-owner com.package.name/com.package.name.MyDeviceAdminReceiver
Что сработало:
adb shell dpm set-device-owner applicationId/com.package.name.MyDeviceAdminReceiver
Я знаю, что это немного поздно, но я решил ошибку, изменив имя получателя в файле манифеста с com.packageName.util.reciever.AdminReceiver
к .AdminReceiver
- с последующим прямым помещением Device Admin Receiver в корень пакета
После этого устанавливаем приложение и запускаем команду из ADB как оболочка ADB dpm set-device-owner com.package.package/.AdminReceiver
Имя моего пакета указано в файле манифеста, а идентификатор моего приложения —au.com.rightwayitservices.kiosk
как в файле build.gradle, и мой класс, расширяющий имя DeviceAdminReceiver, — DeviceAdminReceiver.
Файл манифеста.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="au.com.rightwayitservices.kiosk" >
<uses-feature
android:name="android.hardware.telephony"
android:required="false" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.REORDER_TASKS"/>
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity
android:name="au.com.rightwayitservices.kiosk.MainActivity"
android:screenOrientation="portrait"
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="au.com.rightwayitservices.kiosk.LockedActivity"
android:label="@string/title_activity_locked"
android:screenOrientation="portrait"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.HOME"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<receiver
android:name="au.com.rightwayitservices.kiosk.DeviceAdminReceiver"
android:description="@string/app_name"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin_receiver" />
<intent-filter>
<action android:name="android.intent.action.DEVICE_ADMIN_ENABLED"/>
<action android:name="android.app.action.DEVICE_ADMIN_DISABLED" />
<action android:name="android.intent.action.PROFILE_PROVISIONING_COMPLETE"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
</manifest>