2015-04-23 1 views
5

Заключительное намерение состоит в том, чтобы иметь устройство в режиме «киоск мод».Владелец устройства на нетронутом устройстве (Android L), без NFC, с использованием оболочки adb, dpm set-device-owner

Theysay Вам не нужен NFC или не укоренение для достижения приложения, которое становится device owner. Я еще увидеть полный пример этого метода, но позволяет попробовать:

adb shell dpm set-device-owner <package>/.<ReceiverImplementation> 

должен делать ... Так что я так и получаю:

java.lang.SecurityException: 
Neither user 2000 nor current process has android.permission.BIND_DEVICE_ADMIN. 

После кода, таким образом, возвращает ложь ,

((DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE)) 
    .isDeviceOwnerApp(getApplicationContext().getPackageName()) 

This STO question ставит подобный вопрос, но не определяет фактический отказ ..

файл манифеста и остальная часть источника в основном вдохновлен this google sample

<manifest 
    package="com.example.android.deviceowner" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:versionCode="1" 
    android:versionName="1.0"> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme"> 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".DeviceOwnerReceiver" 
      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_owner_receiver"/> 
      <intent-filter> 
       <action android:name="android.app.action.ACTION_DEVICE_ADMIN_ENABLED"/> 
      </intent-filter> 
     </receiver> 

    </application> 

</manifest> 

устройство Я пытаюсь для этого сейчас LG G Pad.

+0

Просто, чтобы уточнить ... у вашего ресивера есть android.permission.BIND_DEVICE_ADMIN в манифесте, но вы все еще получаете это исключение? – Okas

+0

Да, я отредактирую вопрос, чтобы показать это. –

+0

Ещё один вопрос. Что находится в файле device_owner_receiver.xml? – Okas

ответ

3

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

  • Убедитесь, что приложение уже установлено, как и любого другого случайного приложение
  • Убедитесь, что ни одна учетная запись не будет уже установлена ​​для текущего пользователя (убедитесь, что нет в настройках> Аккаунты) перед его использованием.
  • не должен быть существующим владельцем устройства уже зарегистрирован

Самого лучшего, что нужно сделать (Это то, что я сделал, когда экспериментировали действительно) является полностью заводским перезагружать телефон и избежать большинства шагов конфигурации (за исключением мандаты «настроить Wi-Fi» и «Имя»), а не связывают ни одну учетную запись Google.
После этого вы обязательно будете в чистом состоянии. Затем

  1. Активировать Debugging
  2. установить приложение с IDE (или с pm install ...)
  3. запустить команду adb shell dpm set-device-owner ...

я написал an article explaining most of these steps on my blog, посмотрите при этом это может быть полезно в вашем случае.

+0

Я следил за инструкциями, с заводским сбросом, без набора учетные записи, пользователи .. владельцы ... Проблема, похоже, сохраняется, и в этот момент я уверен, что это с выбором устройства. Спасибо за ваш ответ. –

+0

Не могли бы вы предоставить минимальный исходный код тестового примера (например, через github), который не работает в вашем случае? Мне было бы интересно провести тестирование на Nexus 9 (и подтвердить, действительно ли это зависит от реализации поставщика приложения для обеспечения). –

+0

Одним из тестовых примеров был ваш github.com/florentdupont/AndroidScreenPinning/tree/master/DeviceOwnerApp, с указанным исключением, когда dpm назывался конечно. –

1

Я не уверен, что это поможет вам, но если бы не вы, возможно, кто-то другой воспользуется этим решением. У меня была очень похожая проблема с Samsung Tab A. Я не мог установить право собственности на свое приложение.Всегда во время работы:

adb shell dpm set-device-owner cy.com.myapp/.AdminReceiver 

я получаю:

java.lang.SecurityException: Neither user 2000 nor current process has 
com.sec.enterprise.permission.MDM_PROXY_ADMIN_INTERNAL. 

После долгих поисков я наконец нашел, что мне нужно, чтобы добавить к моему манифеста разрешений специальные разрешения Samsung:

<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK" /> 

Это сделал трюк, и теперь мое приложение может перейти в режим киоска по требованию. Возможно, вы смотрите на аналогичную проблему - возможно, есть один или несколько параметров разрешения, которые необходимо установить для вашего LG. Мое решение работало на не-корневом устройстве (и, очевидно, без добавления учетной записи - после сброса настроек).

+0

У вас есть источник этого разрешения? Я работаю с тем же устройством, что и вы, и он не работает для меня. Кажется странным, что вам нужно разрешение «вспомогательной структуры» для включения владельца устройства. –

+0

Насколько я помню, я нашел это на форуме разработчиков samsung, но я не могу вспомнить, где именно. Тема не касалась моей проблемы точно, однако после нескольких дней поиска я был готов попробовать что угодно. И так как это работало на планшетах, которые у меня были, я был доволен этим. Извините, я не могу быть более полезным. – mikeyy

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

  • Нет связанных вопросов^_^