Mode kios di Android

114

Saya sedang dalam proses mengevaluasi apakah dan bagaimana aplikasi perusahaan CF .NET dapat diporting untuk berjalan di perangkat Android. Aplikasi pada ponsel Windows Mobile dijalankan dalam mode kios di mana aplikasi dimulai secara otomatis dalam mode layar penuh setelah booting dan dengan pengguna tidak dapat mengakses bagian lain dari ponsel secara tidak sengaja atau dengan sengaja.

Apakah mungkin di Android hanya memiliki satu aplikasi mulai otomatis setelah boot dan mencegah pengguna secara tidak sengaja (atau sengaja) mengakses bagian lain dari perangkat Android?

Erik H.
sumber
Apakah Anda memecahkan masalah Anda?
Menna-Allah Sami
3
Ya, itu mungkin. Saya membuat posting blog (sangat) panjang tentang ini: andreas-schrade.de/2015/02/16/…
funcoder
Saya juga membuat entri blog tentang ini (sebagian) menggunakan Lollipop - meskipun tidak termasuk bagian penerima boot: sureshjoshi.com/mobile/android-kiosk-mode-without-root
SJoshi
Saya menjawab pertanyaan serupa di sini tentang metode berbeda untuk membuat perangkat sekali pakai yang dikunci: stackoverflow.com/a/43644803/2888763
Trevor Halvorson

Jawaban:

29

Anda bisa menjalankan aplikasi secara otomatis saat boot dengan mendengarkan android.intent.action.BOOT_COMPLETEDmaksud di BroadcastReceiver dan memulai Aktivitas Anda dari sana. Dalam Aktivitas Anda dapat mendaftarkan diri Anda sebagai layar beranda default baru [1] dan menangani tombol-tombol tersebut.

Saya pikir ada beberapa contoh yang tidak dapat Anda tangani tanpa memodifikasi kerangka kerja (seperti longpress di Beranda untuk menampilkan Aplikasi yang sedang aktif) - Saya juga bisa salah.

Tapi untuk prototipe itu sudah cukup.

Selamat bermain-main!

[1]:

<intent-filter>
 <action android:name="android.intent.action.MAIN" />
 <category android:name="android.intent.category.HOME" />
 <category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Valentin
sumber
1
Anda juga perlu menimpa aktivitas pertama yang ditekan kembali saat Anda menekan tombol kembali, Anda membuka peluncur
ademar111190
Bagaimana mencapai dialog sistem n bilah pemberitahuan dinonaktifkan melalui kode
Gnanam R
1
@GnanamR: periksa jawaban saya di: stackoverflow.com/questions/11958034/hide-tablet-system-bar
Basher51
@Rinkalkumar Jalankan aplikasi dalam mode layar penuh.
John61590
17

Anda dapat menyesuaikan ini (menonaktifkan akses ke menu, membatasi penambahan aplikasi, dll.) Untuk mengaktifkan kios. http://code.google.com/p/android-launcher-plus/

rbot
sumber
7
Bisakah saya tahu mengapa ini tidak disukai? Saya menulis aplikasi kios Android saya yang lengkap dan saat ini diterapkan dengan mengedit & mengembangkan di atas peluncur android plus.
rbot
1
Dalam hal ini, saya memberi suara positif pada jawaban dan komentar Anda ;-)
Mawg mengatakan kembalikan Monica
@rbot bagaimana Anda melakukan itu? Saya telah mencoba membuat aplikasi kios selama berabad-abad, dan saya telah menyelesaikan hampir semua hal lainnya kecuali untuk memastikan baki notifikasi tidak terbuka.
Wakka02
1
@ Wakka02 Saya rasa saya sedang mencari onwindowchanged atau acara serupa (yang mungkin menunjukkan pembukaan Baki Pemberitahuan) dan menutup baki. Saya melakukannya lama sekali, jadi tidak ingat secara spesifik.
rbot
@ Wakka02: periksa jawaban saya di: stackoverflow.com/questions/11958034/hide-tablet-system-bar
Basher51
17

Dalam Pratinjau Android L baru, Google telah mengumumkan Penguncian Tugas , yang melakukan hal itu. Namun tampaknya perlu root.

Pratinjau Pengembang L memperkenalkan API penguncian tugas baru yang memungkinkan Anda untuk sementara waktu membatasi pengguna agar tidak meninggalkan aplikasi Anda atau diganggu oleh pemberitahuan. Ini dapat digunakan, misalnya, jika Anda mengembangkan aplikasi pendidikan untuk mendukung persyaratan penilaian berisiko tinggi di Android. Setelah aplikasi Anda mengaktifkan mode ini, pengguna tidak akan dapat melihat notifikasi, mengakses aplikasi lain, atau kembali ke layar Utama, hingga aplikasi Anda keluar dari mode tersebut.

Untuk mencegah penggunaan yang tidak sah, hanya aplikasi resmi yang dapat mengaktifkan penguncian tugas. Selain itu, otorisasi penguncian tugas harus diberikan oleh aplikasi pemilik perangkat yang dikonfigurasi secara khusus, melalui android.app.admin.DevicePolicyManager.setLockTaskComponents()metode.

Untuk menyiapkan pemilik perangkat, ikuti langkah-langkah berikut:

  • Lampirkan perangkat yang menjalankan Android userdebugbuild ke mesin pengembangan Anda.
  • Instal aplikasi pemilik perangkat Anda.
  • Buat device_owner.xmlfile dan simpan ke /data/systemdirektori di perangkat.
$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" >> /tmp/device_owner.xml
$ echo "&device-owner package=\"<your_device_owner_package>\" name=\"*<your_organization_name>\" />" >> /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot

Sebelum menggunakan API penguncian tugas di aplikasi Anda, verifikasi bahwa aktivitas Anda diotorisasi dengan memanggil DevicePolicyManager.isLockTaskPermitted ().

Untuk mengaktifkan penguncian tugas, panggil android.app.Activity.startLockTask() dari aktivitas resmi Anda.

Saat penguncian tugas aktif, perilaku berikut akan diterapkan:

  • Bilah status kosong, dan pemberitahuan pengguna serta informasi status disembunyikan.
  • Tombol Beranda dan Aplikasi Terbaru disembunyikan.
  • Aplikasi lain mungkin tidak meluncurkan aktivitas baru.
  • Aplikasi saat ini dapat memulai aktivitas baru, selama hal itu tidak membuat tugas baru.
  • Pengguna tetap terkunci di aplikasi Anda sampai aktivitas resmi memanggil Activity.stopLockTask().
nhaarman
sumber
3
developer.android.com/guide/topics/admin/device-admin.html - tentang menerapkan Aplikasi Admin Perangkat.
Toshe
2
Ini adalah artikel saya tentang Kunci Tugas dengan algoritme penyiapan penuh pvolan.blogspot.ru/2017/01/android-50-kiosk-mode-aka-super.html
PVoLan
9

Setelah mencari ini beberapa saat, saya menemukan solusi yang baik. Ini hanya berfungsi pada perangkat yang di-rooting, tetapi saya kira jika hanya untuk aplikasi yang satu ini maka rooting seharusnya tidak menjadi masalah.

Lihat juga http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/ untuk cara lain

matt_lethargic
sumber
5

Memulai aplikasi Anda saat boot

cara TERBAIK untuk melakukannya adalah dengan menyetel aplikasi Anda sebagai peluncur

<activity ...
  android:launchMode="singleInstance"
  android:windowActionBar="false">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.HOME" />
      <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Mengunci aplikasi Anda

cara paling andal adalah menggunakan perangkat dengan Lollipop atau lebih tinggi dan memanfaatkannya

startLockTask

pertama, Anda harus menyetel aplikasi Anda sebagai pemilik perangkat. NB perangkat Anda harus tidak disediakan: jika Anda mendaftarkannya, Anda harus melakukan reset pabrik dan melewati pendaftaran akun.

agar dapat mendaftarkan aplikasi Anda, Anda harus menyiapkan komponen DeviceAdminReceiver terlebih dahulu:

package com.example.myapp;

public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
    @Override
    public void onEnabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return "are you sure?";
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        // here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
    }
}

setelah Anda memiliki perangkat yang tidak disediakan, Anda dapat meluncurkan perintah berikut dari adb ( tidak perlu root )

adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver

untuk menghindari android meminta izin pengguna untuk menyematkan aplikasi Anda, Anda harus memanggil setLockTaskPackages

akhirnya!

@Override
public void onResume(){
    super.onResume();
    DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
    mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
    startLockTask();
}
@Override
public void finish(){
    stopLockTask();
    super.finish();
}
omong kosong
sumber
5

Google baru-baru ini merilis Android Management API yang memungkinkan penyiapan mode kios dengan mudah untuk perangkat Android apa pun yang menjalankan Android 5.1 atau lebih tinggi, dan juga menyetel berbagai kebijakan lainnya.

Fred
sumber
Temuan yang luar biasa. Berikut tautan langsung ke info mode Kios: developers.google.com/android/management/policies/…
Robert Liberatore
3

Siapkan Halaman Perangkat Tujuan Tunggal pengembang android telah menjelaskan hal-hal ini sehingga Anda dapat dengan mudah mengetahui lebih banyak hal dari sana.

Sekarang mudah untuk mengonfigurasi perangkat Android 6.0 Marshmallow dan yang lebih baru sebagai perangkat milik perusahaan, sekali pakai (COSU).

Keyur
sumber
2

Temukan teknik lain yang mungkin dalam posting forum ini . Mengutip posting itu:

http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/10839-android-kiosk-mode-tutorial.html

Dengan menggunakan metode berikut, Anda dapat membuat aplikasi yang akan mencegah pengguna "biasa" bermain dengan apa pun selain aplikasi Anda.

Aplikasi ini terbuat dari dua modul. Kegiatan utama dan layanan. Layanan dikonfigurasi untuk memulai saat boot. Ketika layanan dimulai, ia memeriksa apakah aktivitas sedang berjalan atau tidak. Jika tidak berjalan menggunakan timer untuk memulai aktivitas utama.

Saat aktivitas dijeda, layanan akan dijadwalkan untuk dimulai dalam satu detik: Kode:

Sub Activity_Pause (UserClosed As Boolean)
    If kiosk Then StartServiceAt(KioskService, DateTime.Now + 1 * DateTime.TicksPerSecond, false)    
End Sub

Jika pengguna menekan pada home screen, home screen akan muncul selama beberapa detik. Namun aplikasi Anda akan kembali ke depan setelah beberapa detik dan pengguna tidak akan dapat berinteraksi dengan aplikasi lain atau mengubah pengaturan.

Layanan ini disetel menjadi layanan latar depan. Ini mencegah Android mematikan layanan kami. Tekan tombol Stop untuk menonaktifkan mode kios.

Tampaknya ada contoh file ZIP kode mode kios yang juga tersedia untuk diunduh .

Kaya Besar
sumber
2

Kerangka Xposed dapat melakukan ini. Itu membutuhkan root dan ada kemungkinan itu tidak akan berfungsi di setiap dan semua platform. Cari metode disable () di kelas android.app.StatusBarManager .

Di sini, di kode sumber Android

Lihat di sini tentang cara menulis modul Anda sendiri: Tutorial pengembangan Xposed

Ini jauh lebih mudah daripada yang Anda pikirkan pada pandangan pertama. Semoga berhasil!

JohnyTex
sumber
Ada modul Xposed yang menurut Anda melakukan ini?
Firelord
0

Bersamaan dengan menyiapkan aplikasi Anda dengan penerima BOOT, dan jawaban ini untuk mencegah perluasan bilah status, solusi ini berfungsi pada versi 4.4 dan di atasnya sebagai aplikasi kios lengkap:

Tempatkan di onCreate () Anda:

    final View view = (View) findViewById(android.R.id.content);
    if (view != null) {
        //"hides" back, home and return button on screen. 
        view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                   View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE |
                                   View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                   View.SYSTEM_UI_FLAG_FULLSCREEN);
        view.setOnSystemUiVisibilityChangeListener
                (new View.OnSystemUiVisibilityChangeListener() {
                    @Override
                    public void onSystemUiVisibilityChange(int visibility) {
                        // Note that system bars will only be "visible" if none of the
                        // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
                        if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
                            view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE |
                                    View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE |
                                    View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
                                    View.SYSTEM_UI_FLAG_FULLSCREEN);
                        }
                    }
                });
    }

Ini sepenuhnya akan menyembunyikan tombol kembali, aplikasi, dan tombol beranda.

Kristy Welsh
sumber
bagaimana dengan bilah notifikasi?
Elshan