2015-04-23 13 views
5

Buradaki amaç, 'kiosk mod'da bir aygıta sahip olmaktır. Uygulamanın device owner haline gelmesini sağlamak için NFC'ye veya köklenmesine ihtiyacınız yoktur. Ben bu yöntemin tam bir örneğini görmek için henüz ettik ama sağlayan deneyin:Cihaz sahibi olmayan bir aygıtta (Android L), NFC'siz, adb kabuğunu kullanarak, dpm set-device-owner

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

yapmalıyım ... Yani bunu, ve almak: kodunu takiben

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

, bu nedenle, false döndürür .

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

This STO question

.. benzer bir soru pozlar ama gerçek bir başarısızlık belirtmez

Bildiri dosyası ve kaynak geri kalanı çoğunlukla çalışıyorum 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> 

Cihazdan esinlenmiştir Bunu yapmak için şu anda LG G Pad. Bildirim dosyanız doğru görünüyor.

+0

Netleştirmek için ... alıcınızın manifestinde android.permission.BIND_DEVICE_ADMIN var, ancak yine de bu istisnayı alıyorsunuz? – Okas

+0

Evet, bunu göstermek için soruyu düzenleyeceğim. –

+0

Bir soru daha. Device_owner_receiver.xml dosyanızda ne var? – Okas

cevap

3

Bu komutu yürütürken, sisteminizin durumundan gelebileceğini bilmelisiniz. Birçok noktaları başarıyla dpm komutunu çalıştırmadan önce kontrol edilmelidir:

  • uygulama zaten
  • hiçbir hesap zaten geçerli kullanıcı için ayarlanmış olduğundan emin olun başka gündelik uygulaması gibi, yüklü olduğundan emin olun (no emin olun hesap kullanımdan önce Ayarlar> Hesaplar'da ayarlanır.
  • zaten yapmak

iyi şey kayıtlı varolan cihaz sahibinin olmamalıdır hariç (tamamen telefonunuzu fabrika yeniden ve en yapılandırma adımlarını kaçınmaktır (Ben aslında deneme yaparken yaptıklarını) "Wi-Fi'yi yapılandır" ve "Ad") ve numaralı zorunlu adımlar, herhangi bir Google hesabını ilişkilendirmez.
Sağlandıktan sonra, temiz bir durumda olacağınızdan eminsiniz. IDE'nizde ile uygulamanızı yükleyecek

  • Sonra ,

    1. etkinleştirme Hata ayıklama (veya pm install ...)
    2. bir göz atın, ben an article explaining most of these steps on my blog yazdım adb shell dpm set-device-owner ...

    komutunu çalıştırın Bu durumda, sizin durumunuzda yararlı olabilir.

  • +0

    Talimatları takip ettim, fabrika ayarlarına sıfırlama, ayarlanmadı hesaplar, kullanıcılar .. sahipler ... Sorun devam ediyor gibi görünüyor ve bu noktada cihaz seçimi ile eminim. Yanıtınız için teşekkür ederiz. –

    +0

    Durumunuzda çalışmayan minimalist bir test durumu kaynak kodunu (örneğin github aracılığıyla) paylaşabilir misiniz? Bir Nexus 9 üzerinde test yapmakla ilgilenirim (ve tedarikçinin uygulamanın temel hazırlığı uygulamasına bağlı olup olmadığını doğrulayın). –

    +0

    Test örneklerinden biri, dpm denildiğinde, belirtilen istisna dışında, github.com/florentdupont/AndroidScreenPinning/tree/master/DeviceOwnerApp adresinizdi. –

    1

    Bu durumun size yardımcı olup olmayacağından emin değilim, ancak siz olmasanız bile, bu çözümü başka biri kullanacaktır. Samsung Tab A ile çok benzer bir sorun yaşadım. Uygulamamın mülkiyetini belirleyemedim.Her zaman koşarken:

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

    Ben başlamıştı: Uzun arama Sonunda benim tezahür izinleri eklemek için Samsung'un özel izinlere ihtiyaç olduğu tespit

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

    sonra:

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

    O hile yaptı ve şimdi benim app talep üzerine kiosk moduna gidebilirsiniz. Muhtemelen benzer bir soruna bakıyorsunuzdur - belki de LG'niz için ayarlamanız gereken bir veya daha fazla izin ayarı vardır. Çözümüm, root olmayan bir cihaz için çalıştı (ve açık bir şekilde herhangi bir hesap eklenmeden - fabrika ayarlarına sıfırlandıktan sonra yeni).

    +0

    Bu izin için bir kaynağınız var mı? Sizinle tam olarak aynı cihazla çalışıyorum ve benim için çalışmıyor. Cihaz sahibini etkinleştirmek için "aksesuar çerçeve" iznine ihtiyacınız olduğunu garip görünüyor. –

    +0

    Hatırlayabildiğim kadarıyla, bunu Samsung geliştiricileri forumunda buldum, ancak tam olarak nerede olduğumu hatırlayamıyorum. Konu benim sorunumu tam olarak ifade etmedi, ancak arama günlerinden sonra bir şey denemeye istekliydim. Sahip olduğum tabletlerde çalıştığından beri mutluydum. Üzgünüm daha yardım edemem. – mikeyy

    İlgili konular