Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

Kod Widget untuk Apl Android anda: Updating Widget

by
Difficulty:BeginnerLength:LongLanguages:

Malay (Melayu) translation by Meyria (you can also view the original English article)

Widget aplikasi memberikan pengguna anda akses mudah ke ciri yang paling kerap digunakan aplikasi anda, sambil memberikan aplikasi anda kehadiran pada skrin utama pengguna. Dengan menambahkan widget pada projek anda, anda boleh memberikan pengalaman pengguna yang lebih baik, sambil menggalakkan pengguna untuk tetap terlibat dengan aplikasi anda, kerana setiap kali mereka melirik skrin utama mereka, mereka akan melihat widget anda, memaparkan beberapa aplikasi anda yang paling berguna dan kandungan yang menarik.

Dalam siri tiga bahagian ini, kami sedang membina widget aplikasi yang mempunyai semua fungsi yang anda akan dapati dalam hampir setiap widget aplikasi Android.

Dalam jawatan pertama, kami membuat widget yang mengambil dan memaparkan data dan melakukan tindakan unik sebagai tindak balas kepada peristiwa onClick. Walau bagaimanapun, widget kami masih hilang satu fungsi penting: ia tidak pernah mengemas kini dengan maklumat baru. Satu widget yang tidak pernah ada sesuatu yang baru untuk ditawarkan bukanlah semua yang berguna, jadi kami akan memberikan widget kami dua cara yang berbeza untuk dikemas kini.

Pada akhir siri ini, kami akan memperluas widget kami untuk mengambil dan memaparkan data baru secara automatik berdasarkan jadual, dan sebagai tindak balas kepada interaksi pengguna.

Kami sedang memilih di mana kami berhenti, jadi jika anda tidak mempunyai salinan widget yang kami buat dalam jawatan pertama, maka anda boleh memuat turunnya dari GitHub.

Mengemas kini Tata Letak Anda

Langkah pertama ialah mengemas kini susun atur kami untuk memaparkan beberapa data yang berubah dari masa ke masa. Untuk membantu kami melihat tepat apabila widget kami menerima setiap kemas kini, saya akan mengarahkan widget untuk mengambil dan memaparkan masa semasa, setiap kali ia melakukan kemas kini.

Saya akan menambah yang berikut kepada susun atur widget:

  • TextView yang memaparkan label Last Update
  • TextView yang akan memaparkan masa kemas kini terakhir

Semasa kami sedang menjalankan fail new_app_widget.xml, saya juga akan menambah TeksView yang akhirnya membolehkan pengguna memicu kemas kini secara manual:

Seterusnya, tentukan sumber rentetan baru yang kami rujukan dalam susun atur kami:

@string/time kelihatan berbeza daripada rentetan tipikal anda, kerana ia hanya pemegang tempat yang akan digantikan pada masa runtime.

Ini memberikan kita susun atur yang siap:

Preview the complete Android application widget layout

Mengemas kini Widget Anda Berdasarkan Jadual

Oleh kerana kaedah yang paling mudah untuk dilaksanakan, saya akan bermula dengan mengemas kini widget kami secara automatik, selepas tempoh masa yang ditetapkan telah berlalu.

Apabila mencipta jadual kemas kini automatik seperti ini, 1,800,000 milisaat (30 minit) adalah selang terkecil yang boleh anda gunakan. Walaupun anda menetapkan projek updatPeriodMillis kepada kurang dari 30 minit, widget anda hanya akan masih update setiap setengah jam.

Memutuskan seberapa kerap widget anda perlu dikemaskini tidak semestinya. Kemas kini kerap adalah longkang yang lebih besar pada bateri peranti, tetapi menetapkan kemas kini ini terlalu jauh dan widget anda mungkin berakhir memaparkan maklumat yang ketara kepada pengguna.

Untuk mencari baki yang berfungsi untuk projek tertentu anda, anda perlu menguji widget anda merentasi pelbagai frekuensi kemaskini dan mengukur kesan setiap kekerapan pada hayat bateri, sambil memantau sama ada kandungan widget yang pernah menjadi ketinggalan zaman.

Kerana kerap kali kerap adalah salah satu daripada soalan yang mengecewakan, subyektif di mana tidak ada jawapan 'betul', dapat membantu mendapatkan pendapat kedua dengan mengatur beberapa pengujian pengguna. Anda juga boleh menubuhkan beberapa ujian A / B untuk memeriksa sama ada frekuensi kemaskini tertentu diterima lebih positif daripada yang lain.

Buka fail AppWidgetProviderInfo anda (res/xml /new_app_widget_info.xml) dan anda akan melihat bahawa ia telah menentukan selang kemas kini lalai sebanyak 86,400,000 milisaat (24 jam).

Terdapat banyak widget yang hanya dikemas kini sekali setiap 24 jam; contohnya, widget yang memaparkan ramalan cuaca hanya perlu mendapatkan maklumat baru sekali sehari. Walau bagaimanapun, walaupun widget anda hanya perlu dikemas kini sekali sehari, ini tidak sesuai untuk menguji apl anda. Tidak ada orang yang ingin menunggu 24 jam untuk melihat sama ada kaedah onUpdate() mereka mencetuskan dengan betul, jadi anda biasanya menggunakan selang waktu yang paling pendek ketika melakukan ujian awal, dan kemudian mengubah nilai ini nanti, jika diperlukan.

Untuk memudahkan ujian aplikasi kami, saya akan menggunakan selang terkecil yang mungkin:

Mengambil semula dan Memaparkan Masa Semasa

Kaedah onUpdate () bertanggungjawab untuk mengemas kini Views widget anda dengan maklumat baru. Jika anda membuka pembekal widget projek anda (java/values /NewAppWidget.java) maka anda akan melihat bahawa ia sudah mengandungi garis besar kaedah onUpdate ():

Tidak kira sama ada widget anda mengemas kini secara automatik atau sebagai tindak balas kepada interaksi pengguna, proses kemas kini adalah sama: pengurus widget menghantar niat penyiaran dengan tindakan ACTION_APPWIDGET_UPDATE, dan kelas pembekal widget bertindak balas dengan memanggil kaedah onUpdate (), yang mana sebaliknya panggilan kaedah pembaruanAppWidget () pembantu.

Sebaik sahaja kami telah pembaruan kelas NewAppWidget.java kami untuk mengambil dan memaparkan masa semasa, projek kami akan menggunakan seksyen kod yang sama ini, tanpa mengira bagaimana kaedah onUpdate () dicetuskan:

Terdapat satu masalah dengan kod di atas: jika pengguna menghidupkan TeksView beberapa kali sepanjang tempoh seminit, tidak akan ada indikasi visual yang widget telah diperbarui, hanya kerana tidak ada masa baru untuk dipaparkan. Ini mungkin tidak akan menimbulkan masalah untuk pengguna akhir anda, yang tidak mungkin duduk di sana, mengetik TeksView beberapa kali seminit dan bertanya-tanya mengapa masa itu tidak berubah. Walau bagaimanapun, ini mungkin menjadi masalah semasa menguji apl anda, kerana ini bermakna anda perlu menunggu sekurang-kurangnya 60 saat di antara mencetuskan kaedah onUpdate ().

Untuk memastikan sentiasa terdapat beberapa jenis pengesahan visual bahawa kaedah onUpdate () berjaya berjalan, saya akan memaparkan roti bakar setiap kali onUpdate () dipanggil:

Test that the widget is updating correctly by including a toast

Mengemas kini Widget Anda dalam Respons kepada Tindakan Pengguna

Widget kami kini akan dikemas kini secara automatik sekali setiap setengah jam, tetapi bagaimana dengan mengemaskini sebagai tindak balas kepada interaksi pengguna?

Kami telah meletakkan banyak asas dengan menambah Tap to Update  TextView ke susun atur kami dan memperluaskan kelas NewAppWidget.java untuk mengambil dan memaparkan masa semasa setiap kali onUpdate () dipanggil.

Satu-satunya perkara yang perlu dilakukan ialah membuat Intent dengan AppWidgetManager.ACTION_APPWIDGET_UPDATE, yang merupakan tindakan yang memaklumkan widget bahawa ia adalah masa untuk mengemaskini, dan kemudian memanggil Niat ini sebagai tindak balas kepada pengguna yang berinteraksi dengan Tap to Update TextView.

Inilah kelas NewAppWidget.java yang lengkap:

Mampu mengemas kini widget mengikut permintaan boleh menjadi tidak ternilai semasa menguji projek anda, kerana ini bermakna anda tidak akan perlu menunggu selang kemas kini untuk berlalu. Walaupun anda tidak memasukkan fungsi ini dalam aplikasi anda yang sudah selesai, anda mungkin mahu menambah ke Butang Tap to Update, hanya untuk memudahkan hidup anda semasa menguji projek anda.

Mewujudkan Imej Pratonton

Widget kami kini kelihatan benar-benar berbeza dengan widget yang Android Studio dihasilkan untuk kami secara automatik, tetapi pada masa ini ia masih menggunakan imej pratonton yang dijana secara automatik.

Create a unique Android app widget preview image

Idealnya, imej pratonton anda harus menggalakkan pengguna memilih widget anda dari Pemilih Widget, tetapi sekurang-kurangnya ia mestilah representasi yang tepat tentang bagaimana widget anda sebenarnya kelihatan! Pada masa ini, imej pratonton kami tidak menandakan kotak tersebut, jadi kami perlu membuat yang baru.

Kaedah yang paling mudah adalah menggunakan aplikasi Pratonton Widget yang termasuk dalam emulator Android.

Mewujudkan Preview Widget

Pertama, pasang projek anda pada Peranti Maya Maya (AVD). Kemudian buka laci aplikasi AVD dan lancarkan aplikasi Pratonton Widget. AVD akan memaparkan senarai setiap apl yang dipasang pada peranti-pilih aplikasi anda dari senarai.

Widget anda akan dipaparkan pada latar belakang kosong. Luangkan masa untuk mengubah saiz dan tweak widget anda supaya kelihatan lebih baik, dan apabila anda berpuas hati dengan hasilnya, pilih Take Snapshot. Tangkapan skrin akan disimpan sebagai PNG dalam folder Muat turun AVD. Untuk mengambil fail ini, alihkan semula ke Android Studio dan buka Explorer File Peranti, dengan memilih Lihat> Alat Windows> Peranti Fail Explorer dari bar alat. Dalam paparan File Explorer Peranti, navigasi ke folder sdcard/Unduh, di mana anda akan melihat imej pratonton yang disimpan sebagai [app_name] _ori_ [orientation] .png.

Create a preview image using the Android Virtual Devices built-in Widget Preview app

Seret imej ini dari Android Studio dan jatuhkannya di tempat yang mudah diakses, seperti desktop anda. Berikan imej nama yang lebih deskriptif, dan kemudian seret dan lepaskan imej tersebut ke dalam folder drawable  projek anda. Kini anda boleh membuka fail AppWidgetProviderInfo (dalam contoh ini, itu new_app_widget_info.xml) dan ubah baris berikut untuk merujuk imej pratonton baru anda:

Akhirnya, anda boleh mengalih keluar example_appwidget_preview yang tidak perlu dari projek anda.

Menguji Widget Anda

Sudah tiba masanya untuk meletakkan widget selesai untuk ujian!

Pertama, pasang projek yang dikemas kini pada peranti Android fizikal anda atau AVD. Keluarkan semua contoh sedia ada widget ini dari skrin utama anda, jadi anda tahu anda sedang bekerja dengan versi terkini.

Untuk menambah widget anda, tekan mana-mana ruang kosong di skrin utama, ketik Widget, dan kemudian pilih widget anda. Anda akan mendapat peluang untuk mengubah saiz dan meletakkan semula widget itu, seperti yang diperlukan.

Nilai Last Update akan memaparkan masa yang anda buat widget ini. Tekan Tap to Update dan widget harus memaparkan roti panggang dan masa yang baru. Jika anda meletakkan contoh kedua widget pada skrin utama anda, ia harus memaparkan masa yang berlainan kepada yang pertama.

Create multiple instances of the same application widget

Anda boleh mengemas kini salah satu contoh widget ini dengan memberikan Tap to Update  TextView dan ketuk. Jika anda mencetuskan kemas kini manual untuk widget pertama, maka widget kedua tidak akan dikemas kini, dan sebaliknya.

Sebagai tambahan kepada kemas kini manual, Pengurus Widget App akan mengemas kini semua contoh widget anda sekali setiap 30 minit, berdasarkan masa ketika anda membuat contoh pertama. Walaupun kemas kini manual boleh menyebabkan keadaan memaparkan masa yang berlainan, sekali setiap setengah jam semua keadaan akan dikemas kini serentak, di mana mereka akan memaparkan masa yang sama.

Anda mungkin ingin menyimpan beberapa contoh widget ini di skrin utama anda, jadi anda boleh memantau bagaimana kandungannya berubah dari masa ke masa sebagai tindak balas kepada kombinasi kemas kini automatik dan manual.

Kesimpulan

Dalam siri ini, kami telah mencipta widget aplikasi Android yang menunjukkan cara untuk melaksanakan semua ciri yang paling biasa yang terdapat dalam widget aplikasinya. Jika anda telah mengikuti sepanjang sejak permulaan, maka pada ketika ini anda akan membina widget yang dikemas kini secara automatik dan sebagai tindak balas kepada input pengguna, dan itu mampu bertindak balas kepada peristiwa onClick (anda juga boleh memuat turun projek lengkap dari GitHub).

Dalam jawatan berikutnya, kami akan melihat beberapa amalan terbaik untuk memastikan widget anda memberikan pengalaman pengguna yang baik, dan bagaimana untuk meningkatkan widget anda dengan Aktiviti konfigurasi.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.