2015-04-23 9 views
5

Ostatnią intencją jest tutaj posiadanie urządzenia w "kiosku mod".Właściciel urządzenia na nieobowiązkowym urządzeniu (Android L), bez NFC, przy użyciu powłoki adb, urządzenie z zestawem dpm właściciel urządzenia

Theysay Nie potrzebujesz NFC ani rootowania, aby aplikacja stała się device owner. Mam jeszcze zobaczyć pełny przykład tej metody, ale spróbujmy:

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

powinien zrobić ... Więc to zrobić, a otrzymasz:

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

następujący kod, dlatego zwraca false .

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

This STO question stwarza podobne pytanie, ale nie określa rzeczywistej awarii ..

Oczywisty plik i reszta źródłem jest głównie inspirowana 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> 

Device usiłuję w tej chwili jest to LG G Pad.

+0

Aby wyjaśnić ... Twój odbiorca ma manifest android.permission.BIND_DEVICE_ADMIN, ale nadal otrzymujesz ten wyjątek? – Okas

+0

Tak, będę edytować pytanie, aby to pokazać. –

+0

Jeszcze jedno pytanie. Co zawiera twój plik device_owner_receiver.xml? – Okas

Odpowiedz

3

Twój plik manifestu wydaje się być poprawny. Należy pamiętać, że może to pochodzić ze stanu systemu podczas wykonywania tego polecenia. Wiele punkty powinny być sprawdzone przed uruchomieniem komendy dpm powodzeniem:

  • Upewnij się, że aplikacja jest już zainstalowana, jak każdy inny przypadkowy aplikacji
  • upewnić się, że nie bierze się już ustawione dla bieżącego użytkownika (upewnij się, że nie konto jest ustawione w Ustawienia> Konta) przed jego użyciem.
  • nie powinno być istniejący właściciel urządzenie już zarejestrowany

Najlepszą rzeczą do zrobienia (To, co zrobiłem, kiedy eksperymenty rzeczywiście) jest całkowicie fabrycznie restart telefonu i uniknąć większości czynności konfiguracyjnych (z wyjątkiem Kroki uprawnień "skonfiguruj Wi-Fi" i "Nazwa") i nie kojarzą żadnego konta Google.
Po zabezpieczeniu na pewno będziesz w stanie czystym. Następnie

  1. Włącz debugowanie
  2. zainstalować aplikację z IDE (lub z pm install ...)
  3. uruchomić polecenie adb shell dpm set-device-owner ...

Pisałem an article explaining most of these steps on my blog, spójrz może przydać się w twoim przypadku.

+0

Postępowałem zgodnie z instrukcjami, reset do ustawień fabrycznych, brak zestawu konta, użytkownicy .. właściciele ... Problem wydaje się utrzymywać, i na tym etapie jestem pewien, że jest to z wyborem urządzenia. Dziękuję za odpowiedź. –

+0

Czy możesz udostępnić minimalistyczny kod źródłowy testowania (np. Github), który nie działa w twoim przypadku? Byłbym zainteresowany testowaniem na Nexusie 9 (i potwierdziłbym, czy tak naprawdę zależy to od wdrożenia przez dostawcę aplikacji do obsługi administracyjnej). –

+0

Jednym z przypadków testowych był twój github.com/florentdupont/AndroidScreenPinning/tree/master/DeviceOwnerApp, z wymienionym wyjątkiem, gdy oczywiście wywołano dpm. –

1

Nie jestem pewien, czy to ci pomoże, ale jeśli nie, to może ktoś inny użyje tego rozwiązania. Miałem bardzo podobny problem z kartą Samsung A. Nie mogłem ustawić prawa własności do mojej aplikacji.Zawsze podczas pracy:

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

ja trafiałem:

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

Po długich poszukiwaniach w końcu znalazłem, że muszę dodać do moich oczywistych uprawnień szczególnych uprawnień Samsung:

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

Że załatwiłem sprawę, a teraz moja aplikacja może przejść do trybu kiosku na żądanie. Być może patrzysz na podobny problem - być może istnieje jedno lub więcej ustawień uprawnień, które musisz ustawić dla swojego LG. Moje rozwiązanie działa dla urządzenia nierootowanego (i oczywiście bez żadnego konta dodanego - świeże po przywróceniu ustawień fabrycznych).

+0

Czy masz źródło tego pozwolenia? Pracuję z dokładnie tym samym urządzeniem co ty i to nie działa dla mnie. Wydaje się dziwne, że potrzebujesz uprawnienia do "akcesoriów", aby włączyć właściciela urządzenia. –

+0

O ile pamiętam, znalazłem to na forum programistów Samsunga, ale nie pamiętam, gdzie dokładnie. Temat nie odnosił się dokładnie do mojego problemu, jednak po kilku dniach poszukiwań byłam gotowa spróbować czegoś. A ponieważ działało na tabletach, które miałem, byłem z tego zadowolony. Przepraszam, nie mogę być bardziej pomocny. – mikeyy

Powiązane problemy