2016-08-26 2 views
3

Я попытался установить мое приложение, к device_owner моей таблетки (без ROOT или NFC), с помощью следующей команды:Как я могу установить device_owner в приложение для Android?

adb shell dpm set-device-owner com.test.my_device_owner_app/.MyDeviceAdminReceiver 

нравится написано на многих сайтах (потому что я должен сделать киоск APP). Прежде всего я сделал сброс настроек, а затем я установил мое приложение, а затем я написал эту команду оболочки, но ответ:

java.lang.IllegalStateException: Попытка установить владелец устройства, но устройство является уже подготовлен.
    в android.os.Parcel.readException (Parcel.java:1554)
    в android.os.Parcel.readException (Parcel.java:1499)
    в android.app.admin.IDevicePolicyManager $ заглушка $ Proxy.setDeviceOwner (IDevicePolicyManager.java:3212)
    в com.android.commands.dpm.Dpm.runSetDeviceOwner (Dpm.java:114)
    в com.android.commands.dpm.Dpm .onRun (Dpm.java:82)
    в com.android.internal.os.BaseCommand.run (BaseCommand.java:47)
    в com.android.commands.dpm.Dpm.main (Dpm.java:38)
    на ком .android.internal.os.RuntimeInit.nativeFinishInit (Native Method)
    в com.android.internal.os.RuntimeInit.main (RuntimeInit.java:249)

Теперь, как я могу решить эта проблема без укоренения планшета?

+0

Вы выяснили, как решить проблему? У меня есть леново а10-30. Похоже, есть скрытая учетная запись, которую создает lenovo во время установки, поэтому он говорит, что устройство уже подготовлено. – kash

+0

nope .... на данный момент я до сих пор не могу установить device_owner на этом планшете. – mf87

ответ

0

У меня такая же проблема с планшетами Lenovo Yoga 2.

Вот некоторые отрезанные из источника dpm, которые я нашел, исследуя эту проблему.

if (!allowedToSetDeviceOwnerOnDevice()) { 
     throw new IllegalStateException(
       "Trying to set device owner but device is already provisioned."); 
    } 

    if (mDeviceOwner != null && mDeviceOwner.hasDeviceOwner()) { 
     throw new IllegalStateException(
       "Trying to set device owner but device owner is already set."); 
    } 

А вот allowedToSetDeviceOwnerOnDevice реализации

/** 
* Device owner can only be set on an unprovisioned device, unless it was initiated by "adb", in 
* which case we allow it if no account is associated with the device. 
*/ 
private boolean allowedToSetDeviceOwnerOnDevice() { 
    int callingId = Binder.getCallingUid(); 
    if (callingId == Process.SHELL_UID || callingId == Process.ROOT_UID) { 
     return AccountManager.get(mContext).getAccounts().length == 0; 
    } else { 
     return Settings.Global.getInt(mContext.getContentResolver(), 
       Settings.Global.DEVICE_PROVISIONED, 0) == 0; 
    } 
} 

Так сначала убедитесь, что все учетные записи будут удалены. Проверьте настройки> Учетные записи. Lenovos bloat ware создала учетную запись Local Calendar по умолчанию. Вы должны удалить его.

Для тех, кто имеет доступ к корневой

ВИДЕТЬ SO answer for manually creating the device_owner.xml. Как я вижу из реализации, dpm делает то же самое, что описано в ответе. Кстати, я оставляю атрибут имени без проблем.

Когда вы смотрите в else случае, вы можете обойти проверку по телефону

settings put global device_provisioned 0 

Мой опыт работы с йогой таблетки

Даже у меня есть корневой доступ, делая завод сброса и попытки device_owner .xml метод Вчера у меня не было успеха.

Что я сделал сегодня было войти в систему с учетной записью Google (вчера я пропустил эту часть) и после того, как также удалить этот счет в Настройки> Учетные записи я был в состоянии (как су), чтобы выполнить команду dpm успешно.

Update

У меня есть еще Yoga 2 таблетки без корневого доступа и без входа в систему со своей учетной записи Google и успешно установить владельца устройства.

Можно подумать, что я могу вам порекомендовать: попробуйте закрыть Android Studio после установки вашего приложения режима киоска. Возможно, это вызывает еще один Binder.getCallingUid().

Смежные вопросы