Aplikasi I'm bekerja pada menunjukkan beberapa informasi sensitif yang tidak boleh ditampilkan pada "baru-Baru ini Tugas" layar ketika berhenti aplikasi dengan menekan tombol home.
I'd seperti untuk mengaburkan data sensitif di screenshot atau menunjukkan aplikasi logo bukan.
Saya menyadari berikut mencoba mengejar tapi mereka don't sesuai dengan kebutuhan saya:
android:excludeFromRecents
untuk benar dalam manifiest mencegah aplikasi dari yang ditampilkan di dalam tugas-tugas baru. Ini akan mengganggu pengalaman pengguna.FLAG_SECURE
hasil dalam kartu kosong pada recents tugas layar. (https://stackoverflow.com/questions/9822076/how-do-i-prevent-android-taking-a-screenshot-when-my-app-goes-to-the-background) I don't seperti layar kosong. Namun, saya'll tongkat untuk solusi ini jika tidak ada solusi.onCreateThumbnail
tampaknya seperti solusi ideal tapi, sayangnya, doesn't bekerja sebagai it's saat ini tidak dipanggil oleh OS :( (https://code.google.com/p/android/issues/detail?id=29370)Dan kemudian ada beberapa cara yang saya coba, tetapi yang tidak't bekerja seperti yang diharapkan:
onPause
sehingga's screenshot yang ditampilkan bukan yang sebenarnya activitie's satu. Tapi aktivitas baru membutuhkan waktu terlalu lama untuk membuka dan ini mengganggu pengalaman pengguna.onPause
. Itu tampak seperti solusi yang bagus untuk saya. Sayangnya, screenshot untuk tugas-tugas baru layar diambil pada waktu yang tidak ditentukan. Selama pengujian aplikasi logo dengan cepat muncul sebelum aplikasi ditutup ketika menekan 'Rumah' tapi yang dihasilkan screenshot menunjukkan aktivitas dalam waktu singkat sebelum itu.textView.setText("")
) memiliki masalah yang sama dari screenshot waktu hanya disebutkan.Alternatif ide-ide atau solusi-solusi yang terdaftar workarounds?
Aku melihat ke dalam ini beberapa bulan yang lalu untuk tujuan yang sama seperti anda.
Sayangnya, saya harus menyimpulkan bahwa itu hanya tidak mungkin. Aku menggali melalui kode sumber android dan menegaskan hal itu.
FLAG_SECURE
, ini bagian dari kode yang tidak menerima setiap masukan atau perubahan.SECURE_FLAG
, atau obstruksi lain dari view). Sebagai samping, gambar-gambar ini dapat ditemukan di sebuah emulator di /data/system_ce/0/recent_images
. FLAG_SECURE
, yang akan mencegah layar dari yang diambil dari aplikasi anda. Saya bereksperimen dengan pengaturan BENDERA ini di onPause
dan mengeluarkannya dalam onResume
, namun seperti yang sudah disebutkan ini siklus hidup metode berjalan setelah screenshot diambil sudah, dan dengan demikian sama sekali tidak punya efek.Seperti yang dibahas di https://stackoverflow.com/questions/9130599/how-to-change-the-snapshot-shown-by-recent-apps-list ada yang digunakan untuk menjadi sebuah callback yang bisa anda gunakan untuk menyesuaikan thumbnail: onCreateThumbnail. Namun, ini tidak bekerja dan hal ini tidak pernah disebut. Untuk menjadi jelas, callback masih ada, itu hanya tidak pernah disebut oleh OS. Fakta bahwa ia berhenti bekerja adalah didokumentasikan dengan buruk, tapi rupanya diam-diam tak berlaku lagi/dihapus dalam 4.0.3
Adapun thumbnail dirinya sendiri, itu adalah screenshot yang diambil serverside. Hal ini diambil sebelum onPause
disebut (atau bahkan sebelum callback menunjukkan bahwa aktivitas anda adalah tentang untuk pergi ke latar belakang disebut).
Ketika aplikasi anda tidak pergi ke latar belakang, anda sebenarnya melihat animasi (untuk mendapatkan zoom-out transisi). Yang animasi bisa akan terpengaruh melalui perubahan yang anda lakukan di onPause
(jika anda're cukup cepat itu) (saya bereksperimen dengan pengaturan opacity menjadi 0 pada jendela di antara hal-hal lain). Namun hal ini akan hanya mempengaruhi animasi. Ketika animasi selesai, lihat diganti dengan gambar yang diambil sebelumnya.
Lihat juga pertanyaan-pertanyaan ini yang membahas ini:
Bagaimana menerapkan tata letak overlay di atas seluruh aktivitas?
Membuatnya transparan, it's klik-melalui secara default, sehingga tidak berdampak negatif pada UX saat di gunakan.
Di onPause()
mengatur setengah transparan, kabur gambar sebagai latar belakang tata letak, data akan diacak di balik itu. Di onResume()
mengubah latar belakang untuk sepenuhnya transparan lagi. Voila.
Mungkin akan lebih cepat daripada jenis lain dari overlay. Efek samping positif adalah, jika anda melakukan unblurring sebagai pendek efek animasi ketika pengguna kembali (dengan tepat perpustakaan yang menggunakan C++ bukan Jawa), bahkan mungkin terlihat keren dan pengguna bahkan tidak keberatan melihat itu.
Aku ingin't mencoba ini sendiri, tapi itu's sesuatu yang anda ingin't mencoba belum.
Ada cara untuk menyesuaikannya. Yang anda butuhkan Kegiatan anda dengan data sensitif untuk FLAG_SECURE
di onCreate
sebelum setContentView
. Maka anda membutuhkan kosong Kegiatan, yang membuat apa pun yang anda ingin memiliki sebagai miniatur yang disesuaikan. Ini biasanya adalah semacam splash screen. Kegiatan ini baru kebutuhan untuk menjadi peluncur dan merupakan satu-satunya Aktivitas yang tidak FLAG_SECURE
. Kegiatan ini diluncurkan dan di onResume memulai Kegiatan yang sebenarnya dengan data sensitif.
OS Android akan mengambil screenshot dari yang baru Kegiatan di awal dari Aplikasi anda. Sayangnya pengguna juga akan melihat Kegiatan ini sejenak. Karena setiap Aktivitas lainnya adalah FLAG_SECURE
, OS Android akan gunakan hanya tersedia screenshot ini dibuat di awal.
Saya pikir hal ini hanya dapat dicapai melalui BroadCastReceiver tapi tidak ada penerima yang hadir. Jadi oleh karena itu anda terlebih dahulu menonaktifkan default fungsi screenshot di android dan kemudian menerapkan anda sendiri fungsi untuk mengambil screenshot dan sebelum mengambil screenshot, anda harus mengaburkan informasi anda aman.