Hai teman-teman!
Ini adalah artikel kedua saya tentang pengembangan
proyek saya . Bagi yang belum membaca
artikel sebelumnya : ini tentang cara mengekspor data secara otomatis dari satu tempat (google table) ke yang lain (rumah).
Hari ini saya akan memberi tahu Anda bagaimana saya menulis (dan mendesain) perpustakaan sehingga aplikasi pihak ketiga dapat menerima data yang dikirim oleh aplikasi saya. Saya meminta semua orang tertarik pada kucing.
Bagian 1. Masalah
Secara singkat tentang proyek. Ada perangkat yang menghubungkan ke smartphone. Ada aplikasi saya, di mana jaringan saraf mengenali data dari perangkat dan memberikan hasilnya. Dan ada aplikasi lain yang ingin mendapatkan hasil ini.
Hasilnya dapat dari beberapa jenis: data telanjang dari perangkat, data yang diproses dari perangkat, informasi tentang keadaan perangkat, informasi tentang hak akses aplikasi ke data (misalnya, bahwa pengguna telah mencabut hak akses ke data perangkat). Sangat penting untuk mentransfer hasil ini ke aplikasi lain.
Jika tiba-tiba saya menjelaskan sesuatu yang salah dengan kode saya -
ini adalah dokumentasi untuk perpustakaan saya.
Bagian 2. Merencanakan solusi
Ada mekanisme yang bagus - Siaran. Singkatnya, ini adalah pesan dari satu aplikasi ke aplikasi lain. Anda dapat mengirimnya ke semua orang segera, atau Anda dapat mengirimkannya ke orang tertentu.
Untuk mengirim dan menerima bisnis ini, Anda perlu:- Entah bagaimana membuat JSON dari objek yang diteruskan
- Kirim Siaran
- Terima Siaran di aplikasi lain
- Memulihkan objek yang ditransmisikan dari JSON
Secara umum, membuat JSON dari suatu objek tidak selalu benar. Anda dapat mengirim sesuatu yang disebut Parcelable via Broadcast, atau Serializable. Serializable adalah hal standar dari Java, Parcelable adalah hal yang serupa, tetapi dioptimalkan untuk perangkat seluler.
Benda saya cukup kecil. Selain itu, sering kali perlu untuk mendapatkan JSON: Saya sendiri menulis aplikasi pihak ketiga sehingga mengirimkan data mentah ke server. Oleh karena itu, saya memilih "membuat JSON dari objek yang diteruskan". Mungkin kemudian saya akan berubah pikiran.
Bagian 3. Menggergaji solusinya
Paragraf 1 dan paragraf 4. Dalam JSON, lalu kembali
Semuanya sederhana di sini. Ada perpustakaan
Gson yang sangat cocok untuk kebutuhan kita.
Untuk menjadikannya keren, ganti metode toString (). Nah, lakukan fromString () untuk mendapatkan objek kita kembali.
class SecureData(val eeg1: Double?, val eeg2: Double?, date: Date) { override fun toString(): String { val gson = Gson() return gson.toJson(this) } companion object { fun fromString(model: String): SecureData { val gson = Gson() return gson.fromJson(model, SecureData::class.java) } } }
Poin 2. Kami mengirim objek
Berikut ini contoh kode tersebut:
val intent = Intent() intent.action = BroadcastUtils.BROADCAST_GESTURE intent.putExtra(BroadcastUtils.EXTRA_GESTRE, it.toString()) sendBroadcast(intent)
Di sini kita membuat niat, mengatur aksinya, meletakkan objek dan mengirimkannya sebagai siaran.
BroadcastUtils.BROADCAST_GESTURE - ini adalah hal kecil yang kami gunakan untuk menyaring siaran yang masuk di aplikasi lain (apakah harus diproses atau tidak).
Untuk mengirim pesan ke aplikasi tertentu, Anda perlu menentukan yang berikut:
intent.component = ComponentName( PermissionsFetcher.REFACE_APP, "${PermissionsFetcher.REFACE_APP}.receivers.ActionsReceiver" )
PermissionsFetcher.REFACE_APP adalah APPLICATION_ID aplikasi saya, dan $ {PermissionsFetcher.REFACE_APP} .receivers.ActionsReceiver adalah jalur ke penerima.
Poin 3. Kami menerima objek
Inilah cara kami mendaftarkan penerima. Jika Anda mendaftar menggunakan konteks aplikasi, itu akan menerima siaran sampai aplikasi ditutup. Jika Anda menggunakan konteks aktivasi - sampai ditutup.
registerReceiver(GesturesReceiver(), IntentFilter(BroadcastUtils.BROADCAST_GESTURE))
Dan inilah GesturesReceiver: class GesturesReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Timber.i("Received gesture") val action = BroadcastUtils.reparseGestureIntent(intent) MainApp.actionSubject.onNext(action) } }
Di sini, seperti yang Anda lihat, saya menerima maksud, mengembalikannya kembali ke objek, dan mengirimnya ke suatu tempat menggunakan RxJava.
Bagian 4. Kesimpulan
Anda membaca artikel tentang merancang aplikasi yang harus berinteraksi dengan aplikasi lain. Saya harap pengalaman ini membantu Anda dengan sesuatu.
Untuk meningkatkan efek, Anda dapat melihat sumber perpustakaan saya dan contoh bekerja dengannya dan meletakkan tanda bintang jika Anda membutuhkannya:
github.com/reface-tech/CodeSpecialApp