استخدام الـ ResultReceiver للتخاطب مع الـ Intent Service
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
في الدرس السابق رأينا كيف ان الـ Bound Service ترسل النتائج مع المكون الملتصق بها. في هذا الدرس سنرى كيفية ارسال النتائج من الـ Intent Service (تستطيع استخدام هذه الطريقه مع الـ Started Service كذلك) بواسطة الـ ResultReceiver واستقبالها في الـ Activity لإستخدام النتيجه لتحديث الـ Views. قبل هذا كله ربما تريد مراجعة الدرس: انشاء الـ Intent Service.
في كلاس الـ Actiivty:
- سنقوم بانشاء كلاس داخلية ResultReceiver في الـ Activity لإستقبال البيانات المرسله من الـ Intent Service.
- نرسل هذا الـ ResultReceiver الى الـ Service بواسطة Intent عند تشغيلها.
- نعمل override للداله onReceiveResult. وفيها نستقبل الـ Bundle بحسب Code للمهمه ونستخرج بيانات النتائج من الـ Bundle, ثم نقوم باستخدام الـ Handler لتحديث الـ TextView.
- ننشئ حقل للـ View هنا سوف تكون TextView.
- ننشئ حقل من نوع Handler الذي من خلاله نستقبل الـ Bundle من الـ Service ثم نقوم بتحديث الـ TextView بداخله لاحقاً.
انشاء كلاس الـ ResultReceiver
private class MyIntentServiceResultReceiver extends ResultReceiver {
public MyIntentServiceResultReceiver(Handler handler) {
super(handler);
}
}
نعمل override للداله onReceiveResult (لإستقبال بيانات النتائج) لتصبح كلاس الـ ResultReceiver على هذا الشكل:
private class MyIntentServiceResultReceiver extends ResultReceiver {
public MyIntentServiceResultReceiver(Handler handler) {
super(handler);
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
super.onReceiveResult(resultCode, resultData);
if (resultCode == 88 && resultData != null) {
final String result = resultData.getString(Constant.RESULT_NUMBER);
mHandler.post(new Runnable() {
@Override
public void run() {
mResultTextView.setText(result);
}
});
}
}
}
لاحظ في دالة الـ onReceiveResult قمنا باستقبال الـ Bundle بحسب Code للمهمه وهو ٨٨, ثم قمنا باستخراج بيانات النتائج من الـ Bundle, بعد ذلك قمنا باستخدام الـ Handler لتحديث الـ TextView. لماذا Handler؟ بسبب ان الدالة onReceiveResult تعمل على خيط حاسوبي مختلف عن الخيط الرئيسي (تعمل على خيط الـ IntentService) وعنصر الـ TextView لانستطيع تحديثه الا في الخيط الرئيسي لذلك قمنا باستخدام Handler ليحل الوضع فهو يعتبر حلقه وصل بين الخيوط.
انشاء الحقول:
private TextView mResultTextView;
private Handler mHandler = new Handler();
نرسل هذا الـ ResultReceiver الى الـ Service بواسطة Intent عند تشغيلها.
ResultReceiver resultReceiver = new MyIntentServiceResultReceiver(null);
intent.putExtra(Constant.RECEIVE_RESULT_KEY, resultReceiver);
startService(intent);
طريقة ارسال النتائج من الـ Service الى الـ Activity
في كلاس الـ Service:
- في دالة الـ onHandleIntent نستقبل الـ Intent ونستخرج منها ResultReceiver (الذي سوف ننشئه لاحقاً في الـ Activity).
- نغلف النتيجه في Bundle ثم نرسل هذا الـ Bundle باستخدام الـ ResultReceiver.
الخطوات:
بعد الانتهاء من حساب النتيجه نستخرج الـ ResultReceiver من الـ Intent التي قامت بتشغيل هذه الـ Service ونغلف النتيجه في Bundle ونرسلها عبر الـ ResultReceiver:
ResultReceiver resultReceiver = intent.getParcelableExtra(Constant.RECEIVE_RESULT_KEY);
Bundle bundle = new Bundle();
bundle.putString(Constant.RESULT_NUMBER, String.valueOf(resultNumber) + " - From IntentService");
resultReceiver.send(88, bundle); // 88 our code for this task
لاحظ استخدام الرقم ٨٨ كـ Code لهذه المهمه.
في هذا الدرس رأينا طريقة ارسال البيانات من الـ Intent Service الى الـ Activity بواسطة الـ ResultReceiver وذلك من خلال تغليفه وارساله مع الـ Intent التي تشغل الخدمة Intent Service ثم استقبلناه من خلال عمل Override للدالة onReceiveResult.
رابط الكلاسات المستخدمه في هذا الدرس
- تم استخدام MyIntentService.java في Main6Activity.java.
للحصول على رابط المشروع راجع درس المقدمة.
المصادر والمراجع
- ResultReceiver | Android Developers.
- راجع الدرس: انشاء الـ Intent Service.
- راجع الدرس: تعرف على الـ Services.
للمزيد راجع درس المقدمة.
نهاية الدرس
لاتنسى تتبع الدرس والدورة كذلك لإشعارك عندما يتم التعديل على المتحوى او اضافة المزيد من المعلومات. ايضاً لاتنسى الاعجاب بالدرس ومشاركته مع الاخرين.
محتوى الدورة
الكلمات الدليلية
عن الدرس
0 إعجاب |
1 متابع |
0 مشاركة |
1558 مشاهدات |
منذ 5 سنوات |
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !