Android 5.0 üretim cihazlarında görev kilitleme nasıl etkinleştirilir


12

Bu StackOverflow sorusu , Android L geliştirici önizlemesinde bir cihaz sahibi uygulamasının ve dolayısıyla kiosk modunun nasıl etkinleştirileceğini araştırıyor. Yöntem, kullanıcı tanımlı bir Android derlemesi gerektirdiğinden, cihazı köklendirdiğinden ve bir XML dosyasını kök dosya sistemine kopyaladığından, şirket içinde tek işlevli bir Android cihazının toplu olarak dağıtılması için uygun görünmemektedir.

Cihaz sahibi uygulamaları üretim yapan Android L cihazlarına nasıl yüklenecek?


sorunu çözdün mü?
KOTIOS


Teşekkürler @Spynet - çözümün en eksiksiz özeti gibi görünüyor.
Adrian Cox

1
src ile iyi bir rehber için buraya bakınız: objectpartners.com/2014/11/04/…
Hayden Thring

Yanıtlar:


14

( Düzenle: Bazı testlerden sonra güncellendi)

Kontrol son belgelere .

Bu özelliğe şimdi Ekran sabitleme deniyor gibi görünüyor ve Uygulamanın cihaz sahibi olması gerekmiyor. Cihaz sahibi ayarlanmamışsa kullanıcıdan kabul etmesi istenir. Ancak, aşağıda belirtilen kiosk kullanımı için bununla ilgili sorunlar var.

Ekran sabitlemeyi etkinleştirmenin iki yolu vardır:

Manuel olarak: Kullanıcılar Ayarlar> Güvenlik> Ekran Sabitleme'de ekran sabitlemeyi etkinleştirebilir ve sonlar ekranındaki yeşil raptiye simgesine dokunarak sabitlemek istedikleri görevleri seçebilirler. Programlı olarak: Ekran sabitlemeyi programlı olarak etkinleştirmek için uygulamanızdan startLockTask () öğesini arayın. İsteyen uygulama bir cihaz sahibi değilse kullanıcıdan onay istenir. Bir cihaz sahibi uygulaması, uygulamaların kullanıcı onay adımı olmadan sabitlenebilmesini sağlamak için setLockTaskPackages () yöntemini çağırabilir.

Ekran sabitlemeyi programlı olarak (cihaz sahibi olmayan Uygulama) veya cihazdaki sondaki iğneyi kullanarak etkinleştirirseniz, aşağıdaki davranışı elde edersiniz:

Kullanıcıya ekran sabitlemeyi etkinleştirmek isteyip istemediklerini ve çıkmak için bir parola isteyip istemediklerini soran bir iletişim kutusu görüntülenir. Evet'e basarlarsa durum çubuğu ve bildirimler kaybolur, geri, ev ve son kullanılanlar düğmeleri kaybolmaz. Eve veya son işaretlere dokunmak, kullanıcının ekran sabitlemesinden nasıl çıkacağını bildiren bir tost görünmesini sağlar.

Kullanıcı daha sonra basılı tutabilir ve ekran sabitlemeden çıkmak için geri çekilebilir. Kullanıcı bir şifre talep etmeyi seçerse, doğrudan kilit ekranına yönlendirilir. Bu davranış, bir kiosk imo için uygun olmadığı anlamına gelir. Kiosk kullanıcılarının kilit ekranına bakması çok kolay olduğu için.

Uygun bir kiosk moduna geçmek için cihaz sahibini ayarlamamız gerekir. Google'ın dokümantasyonu, bunu NFC ile yapmanız gerektiğini söylüyor:

Bir cihaz sahibini dağıtmak ve etkinleştirmek için, cihaz öngörülmemiş durumdayken bir programlama uygulamasından cihaza bir NFC veri aktarımı gerçekleştirmelisiniz.

Bunu yapmak için NFC kullanmak biraz karmaşık görünüyor (ya bir cihazda NFC yoksa?) Ben kimse henüz NFC tarafından cihaz sahibini ayarlama hakkında bilgi verebilir eğer bu henüz araştırmadım? Şimdi sorunuzun ana noktası haline geliyor. (yani, cihaz sahibini köklü olmayan bir cihazda ayarlamak)

Ancak, bir cihazı köklendirirseniz davranışın beklendiği gibi olduğunu doğrulamak için cihaz sahibini Google'ın önceki talimatlarına göre (bir device_owner.xml ekleyerek) burada belirttiğim gibi ayarlayabilirsiniz

Artık Uygulamayı düzgün bir şekilde kilitleyebilirsiniz, kullanıcının kabul etmesi için hiçbir iletişim kutusu görünmez, sonlandırmalar ve ana sayfa düğmesi kaybolur ve Uygulamanızın kilidi açılmadıkça kullanıcı Uygulamadan çıkamaz. Uygun bir kiosk modu. Bunu en son Lollipop yapısına sahip bir Nexus 7 2013'te test ettim.

Aşağıdaki kod parçası kilidi açar:

mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
mDeviceAdminSample = new ComponentName(this, DeviceAdminSample.class);

if (mDPM.isDeviceOwnerApp(this.getPackageName())) {
    Log.d(TAG, "isDeviceOwnerApp: YES");
    String[] packages = {this.getPackageName()};
    mDPM.setLockTaskPackages(mDeviceAdminSample, packages);
} else {
    Log.d(TAG, "isDeviceOwnerApp: NO");
}

if (mDPM.isLockTaskPermitted(this.getPackageName())) {
    Log.d(TAG, "isLockTaskPermitted: ALLOWED");
    startLockTask();
} else {
    Log.d(TAG, "isLockTaskPermitted: NOT ALLOWED");
}

Bence bu şu anda mümkün olan en iyi cevap. NFC adımı bir sır olarak kalıyor, ancak çok daha dar bir soru.
Adrian Cox

NFC adımını çalıştırmaya çalışıyorum ama başarılı olamadım, burada bir soruya başladım . Ayrıca, burada
tagy22

2

Biraz sıkıntı yaratan ama dpmcihaz sahibini ayarlamak için kullanabileceğiniz tagy22'nin cevabına ek olan bir cevap hakkında yorum yapamam . Daha fazla ayrıntı burada .


1
dpmcihazda bir hesap (Google hesabı gibi) ayarlanmışsa işi tamamlamaz.
Firelord

Bu durumda NFC olacak mı? Bir hesap sahibinin bir hesap eklenmeden önce ayarlanması gerektiği izlenimindeydim.
Troy Patrick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.