مرحبا شباب!
هذا هو مقالي الثاني حول تطوير
مشروعي . بالنسبة لأولئك الذين لم يقرأوا
المقالة السابقة : يتعلق الأمر بكيفية تصدير البيانات تلقائيًا من مكان واحد (جدول google) إلى مكان آخر (الصفحة الرئيسية).
سأخبرك اليوم كيف كتبت (وصممت) المكتبة حتى تتمكن تطبيقات الطرف الثالث من تلقي البيانات المرسلة بواسطة طلبي. أطلب من كل شخص مهتم تحت القط.
الجزء 1. المشكلة
باختصار عن المشروع. هناك جهاز يتصل بهاتف ذكي. يوجد طلبي ، حيث تتعرف الشبكة العصبية داخله على بيانات الجهاز وتعطي النتيجة. وهناك تطبيقات أخرى ترغب في الحصول على هذه النتيجة بالذات.
يمكن أن تكون النتيجة من عدة أنواع: البيانات المكشوفة من الجهاز ، البيانات المعالجة من الجهاز ، معلومات حول حالة الجهاز ، معلومات حول حقوق وصول التطبيق إلى البيانات (على سبيل المثال ، أن المستخدم قد ألغى حقوق الوصول إلى بيانات الجهاز). من الضروري نقل هذه النتيجة بطريقة ما إلى تطبيقات أخرى.
إذا فجأة أشرح شيئًا ما بطريقة غير صحيحة بواسطة الكود الخاص بي -
إليك الوثائق الخاصة بمكتبتي.
الجزء 2. التخطيط للحل
هناك آلية رائعة - البث. باختصار ، هذه رسالة من تطبيق إلى تطبيقات أخرى. يمكنك إرسالها إلى الجميع على الفور ، أو يمكنك إرسالها إلى شخص معين.
لإرسال واستقبال هذا العمل ، تحتاج إلى:- بطريقة ما جعل JSON من الكائن الذي تم تمريره
- إرسال البث
- قبول البث في تطبيق آخر
- استرجع الأشياء المنقولة من JSON
بشكل عام ، صنع JSON من كائن غير صحيح دائمًا. يمكنك إرسال شيء يسمى Parcelable عبر البث أو Serializable. Serializable هو شيء قياسي من Java ، Parcelable شيء مشابه ، لكنه محسّن للأجهزة المحمولة.
أغراضي صغيرة جدًا. بالإضافة إلى ذلك ، غالبًا ما يكون من الضروري الحصول على JSON: كتبت أنا شخصياً تطبيقًا لجهة خارجية حتى يرسل بيانات أولية إلى الخادم. لذلك ، اخترت "جعل JSON من الكائن الذي تم تمريره". ربما بعد ذلك سوف أغير رأيي.
الجزء 3. نشر الحل
الفقرة 1 والفقرة 4. في JSON ، ثم العودة
كل شيء بسيط هنا. هناك مكتبة
Gson مناسبة بشكل رائع لاحتياجاتنا.
لجعل الأشياء باردة ، تجاوز الأسلوب toString (). حسنًا ، افعل من fromString () لاستعادة كائننا.
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) } } }
النقطة 2. نرسل الكائن
فيما يلي مثال على هذا الرمز:
val intent = Intent() intent.action = BroadcastUtils.BROADCAST_GESTURE intent.putExtra(BroadcastUtils.EXTRA_GESTRE, it.toString()) sendBroadcast(intent)
نحن هنا ننشئ نية ، ونضع إجراءاتها ، ونضع الشيء ونرسله بالبث.
BroadcastUtils.BROADCAST_GESTURE - هذا هو الشيء القليل الذي سنقوم به بتصفية عمليات البث الواردة في تطبيق آخر (سواء كان يجب معالجتها أم لا).
لإرسال رسالة إلى تطبيق معين ، تحتاج إلى تحديد ما يلي بالإضافة إلى ذلك:
intent.component = ComponentName( PermissionsFetcher.REFACE_APP, "${PermissionsFetcher.REFACE_APP}.receivers.ActionsReceiver" )
PermissionsFetcher.REFACE_APP هو APPLICATION_ID للتطبيق الخاص بي ، و $ {PermissionsFetcher.REFACE_APP} .receivers.ActionsReceiver هو المسار إلى المتلقي.
النقطة 3. نتلقى الأشياء
هذه هي الطريقة التي نسجل بها المتلقي. إذا قمت بتسجيله باستخدام سياق التطبيق ، فسوف يتلقى البث حتى يتم إغلاق التطبيق. إذا كنت تستخدم سياق التنشيط - حتى يتم إغلاقه.
registerReceiver(GesturesReceiver(), IntentFilter(BroadcastUtils.BROADCAST_GESTURE))
وهنا هو لفتة استقبال: class GesturesReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Timber.i("Received gesture") val action = BroadcastUtils.reparseGestureIntent(intent) MainApp.actionSubject.onNext(action) } }
هنا ، كما ترى ، تلقيت النية ، وأعدتها مرة أخرى إلى كائن ، وأرسلتها إلى مكان ما باستخدام RxJava.
الجزء 4. الخاتمة
تقرأ مقالة عن تصميم التطبيقات التي يجب أن تتفاعل مع التطبيقات الأخرى. آمل أن تساعدك هذه التجربة في شيء ما.
لزيادة التأثير ، يمكنك رؤية مصادر مكتبتي ومثال على العمل بها ووضع علامة نجمية في حال احتجت إليها:
github.com/reface-tech/CodeSpecialApp