Mempersiapkan aplikasi untuk Android Q. Bagian 1

Terjemahan artikel disiapkan khusus untuk siswa kursus "Android-developer. Kursus dasar . " Kami juga mengingatkan Anda bahwa kami terus mendaftar di kursus lanjutan "Spesialisasi Android-developer"





Kami berada di tahun ke 10 pengembangan Android (Android Q harus versi 10.0). Menurut Beta 4, Android Q secara resmi memiliki API level 29 . Meskipun Beta 5 sudah ada dan Beta 6 diharapkan, API telah ditandai sebagai final, dan sekarang saatnya untuk melihat bagaimana Android Q akan mempengaruhi aplikasi dan perubahan apa yang perlu dilakukan untuk sepenuhnya mendukung Android Q.


Perubahan penting (tidak semua) yang disajikan dalam Android Q dapat dibagi menjadi dua kategori: a) Kerahasiaan dan keamanan , b) Pengalaman Pengguna .

Dari penerjemah: “Kami membagi terjemahan menjadi dua bagian yang sesuai dengan kategori ini. Dengan demikian, pada bagian pertama kita akan berbicara tentang privasi dan keamanan. "

1) Kerahasiaan dan keamanan


a) Mulai Kegiatan latar belakang


Anda tidak lagi dapat memulai suatu Kegiatan saat aplikasi Anda ada di latar belakang.

  • Apa yang mempengaruhi: Semua aplikasi berjalan pada Q (terlepas dari SDK target). Pengecualian dilemparkan jika Android Q adalah versi target aplikasi; dan Aktivitas tidak akan dimulai jika Android Q bukan target SDK untuk aplikasi, tetapi bekerja pada perangkat dengan Android Q.
  • Pengecualian: Layanan terikat, seperti aksesibilitas, pelengkapan otomatis, dll. Jika aplikasi menerima PendingIntent dari sistem, kita dapat menggunakannya untuk memulai Kegiatan. Jika aplikasi memiliki izin SYSTEM_ALERT_WINDOW (dihapus di Android GO) atau aplikasi yang baru saja finish() untuk Aktivitas (tidak disarankan untuk mengandalkannya. "Baru-baru ini" bisa sangat ambigu), maka aplikasi Anda bebas dari batasan ini.
  • Pendekatan yang disarankan: Aktivitas yang memicu pemberitahuan

 val fullScreenIntent = Intent(this, CallActivity::class.java) val fullScreenPendingIntent = PendingIntent.getActivity(this, 0, fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT) val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID) .... .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_CALL) .setFullScreenIntent(fullScreenPendingIntent, true) 

Tambahkan Fullscreen PendingIntent ke notifikasi. Sekarang setelah notifikasi bekerja, sistem akan meluncurkan Intent layar penuh.

Karena itu, jika kita ingin memulai Kegiatan dari latar belakang, pertama buat pemberitahuan yang akan ditampilkan kepada pengguna. Dalam pemberitahuan ini, tambahkan Fullscreen PendingIntent . Juga, tambahkan izin USE_FULL_SCREEN_INTENT ke manifes Anda. Sekarang setelah notifikasi bekerja, sistem akan meluncurkan Intent layar penuh.

  • Jebakan: Sistem memutuskan kapan akan menampilkan pemberitahuan dan kapan akan menampilkan suatu Kegiatan. Jika pengguna aktif menggunakan perangkat, notifikasi pop-up ditampilkan. Jika perangkat dalam keadaan diam atau ketika pengguna berinteraksi dengan notifikasi, Aktivitas layar penuh dimulai. Misalnya, seperti ketika menerima panggilan telepon (pemberitahuan pop-up saat menggunakan ponsel, jika tidak, Aktivitas layar penuh).

b) Pengidentifikasi perangkat keras


Akses ke pengidentifikasi perangkat yang tidak dapat direset telah dicabut di Android Q.

  • Apa yang mempengaruhi: Semua aplikasi berjalan pada Q (terlepas dari SDK target). Pengecualian dilemparkan jika Q adalah target SDK; dan mengembalikan null jika target SDK kurang dari Q
  • Hindari: Alamat Mac sekarang acak, dan IMEI ( TelephonyManager.getDeviceId() ) dan nomor seri tidak lagi tersedia. Sekarang mereka "izin istimewa" dan hanya tersedia untuk aplikasi operator.
  • Pendekatan yang disarankan: Gunakan pengidentifikasi yang dapat disetel ulang seperti ID Iklan, ID Instans, atau ID unik global (GUID). Lihat Praktik terbaik untuk pengidentifikasi unik untuk informasi lebih lanjut tentang pengidentifikasi mana yang digunakan dalam hal ini.

c) Definisi latar belakang lokasi


Dimulai dengan Android Q, sistem akan membedakan antara permintaan lokasi yang dibuat di latar depan dan di latar belakang.


Permintaan izin untuk mengakses lokasi sekarang akan memiliki 3 opsi: Bolehkan sepanjang waktu, Bolehkan hanya saat menggunakan aplikasi (akses hanya di latar depan) dan Tolak (tidak ada akses).

  • Apa pengaruhnya: Tergantung pada target SDK. Jika Q adalah target SDK untuk aplikasi, maka Anda perlu meminta izin lokasi baru di latar belakang. Jika aplikasi memiliki SDK target yang berbeda, maka secara otomatis akan menerima izin ini jika sudah memiliki hak akses ke lokasi.


Gambar diambil dari Dokumentasi Pengembang Android

  • Pendekatan yang disarankan: jika aplikasi memerlukan akses satu kali ke lokasi pengguna untuk melakukan beberapa tugas, gunakan layanan latar depan dengan parameter foregroundServiceType ditentukan sebagai location di file manifes aplikasi.

 <service android:name="MyNavigationService" android:foregroundServiceType="location" ... /> 

Jika aplikasi memerlukan akses konstan ke lokasi perangkat, misalnya, untuk geofence, ia dapat mengonfigurasi permintaan untuk memungkinkan akses ke lokasi di latar belakang. Aspek-aspek lain dari aplikasi (misalnya, bagaimana lokasi diekstraksi dan digunakan) tidak perlu diubah. Untuk meminta akses ke lokasi di latar belakang, tambahkan izin ACCESS_BACKGROUND_LOCATION ke manifes:

 <manifest> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> </manifest> //Request for the permission like any other permission request: ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION), your-permission-request-code) 

Minta akses lokasi di latar belakang

  • Perangkap:


Pengingat yang ditampilkan oleh sistem tentang akses ke lokasi di latar belakang

Beberapa hal penting yang perlu diingat: pengguna dapat diingatkan setelah memberikan akses aplikasi ke lokasi perangkat di latar belakang, dan, seperti izin lainnya, pengguna dapat mencabut izin untuk itu. Ini sangat penting untuk aplikasi di mana Q bukan target SDK, tetapi berjalan pada perangkat dengan Android Q, karena itu akan mendapatkan resolusi latar belakang default jika memiliki izin lokasi. Pastikan aplikasi Anda menangani skrip tersebut dengan anggun. Untuk alasan ini, setiap kali aplikasi memulai layanan atau meminta lokasi, periksa untuk melihat apakah pengguna masih mengizinkan aplikasi untuk mengakses informasi lokasi.

Pada bagian ini, bagian pertama artikel itu berakhir Dan seperti yang dijanjikan, kita akan berbicara tentang Pengalaman Pengguna di bagian kedua .

Source: https://habr.com/ru/post/id463811/


All Articles