الروبوت استقبال البث (البث الاستقبال)
استقبال البث ردا على رسالة البث إلى تطبيقات أو أنظمة أخرى. وتسمى هذه الرسائل أحيانا أحداث أو النوايا. على سبيل المثال، يمكن تطبيق بدء البث للسماح للتطبيقات الأخرى لتوجيه بعض البيانات التي تم تحميلها إلى الجهاز، ويمكن استخدامها. هذا استقبال البث قد تحدد الإجراءات المناسبة لاعتراض هذه الرسائل.
هناك نوعان من الخطوات الهامة لجعل القصد من نظام البث مع جهاز استقبال البث للعمل.
- إنشاء جهاز استقبال البث
- استقبال البث المسجلين
هناك خطوة إضافية لتحقيق القصد من هذه العادة، يجب عليك إنشاء وبث هذه النوايا.
إنشاء جهاز استقبال البث
لا بد من تنفيذها في فئة فرعية BroadcastReceiver وتجاوز onReceive () يتلقى أسلوب الكائن النوايا كمعلمة الرسالة بث الاستقبال.
public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show(); } }
استقبال البث المسجلين
من خلال تطبيق مسجل في استقبال البث AndroidManifest.xml على الحصول على نية البث إلى تطوير. لنفترض أننا نريد لتسجيل MyReceiver لمراقبة الحدث ACTION_BOOT_COMPLETED قبل النظام. صدر هذا الحدث عندما العملية التي بدأها نظام أندرويد كاملة.
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="MyReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED"> </action> </intent-filter> </receiver> </application>
استقبال الآن، كلما يتم تنشيط جهاز الروبوت، وسيتم بث اعتراضية MyReceiver، وonReceive () نفذت وستنفذ المنطق.
هناك العديد من الأحداث التي تم إنشاؤها من قبل النظام هو الذي يعرف بأنه فئة النوايا قيمة ثابتة ثابتة. يسرد الجدول التالي الأحداث النظام الهامة.
الثوابت الحدث | وصف |
---|---|
android.intent.action.BATTERY_CHANGED | البث دائم، بما في ذلك حالة البطارية من تهمة، ومستوى وغيرها من المعلومات. |
android.intent.action.BATTERY_LOW | منخفضة بطارية جهاز تحديد الشرط. |
android.intent.action.BATTERY_OKAY | يحدد انخفاض طاقة البطارية، ولقد كان الآن جيد. |
android.intent.action.BOOT_COMPLETED | بعد انتهاء نظام التشغيل بث مرة أخرى. |
android.intent.action.BUG_REPORT | عرض تقرير النشاط الشوائب. |
android.intent.action.CALL | دعوة شخص لأداء البيانات المحددة. |
android.intent.action.CALL_BUTTON | ينقر المستخدمون على زر "دعوة" لفتح المتصل أو غيرها من الاتصال الهاتفي واجهة مناسبة. |
android.intent.action.DATE_CHANGED | تاريخ التغييرات. |
android.intent.action.REBOOT | إعادة تشغيل الجهاز. |
نية بث مخصصة
إذا كنت تريد طلبك لتوليد وإرسال نية الطلب، تحتاج إلى إنشاء ونقل هذه النوايا في النشاطات الصفية من خلال sendBroadcast (). إذا كنت تستخدم sendStickyBroadcast المقصود (النوايا) طريقة لتكون دائمة (لزجة)، وهو ما يعني أن لديك نية صدر بعد الانتهاء من بث ما زال قائما.
public void broadcastIntent(View view) { Intent intent = new Intent(); intent.setAction("cn.uprogrammer.CUSTOM_INTENT"); sendBroadcast(intent); }
يتم تسجيل النوايا cn.uprogrammer.CUSTOM_INTENT كما النوايا قبل أن نتمكن من إنتاج نظام التسجيل نفسه.
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <receiver android:name="MyReceiver"> <intent-filter> <action android:name="cn.uprogrammer.CUSTOM_INTENT"> </action> </intent-filter> </receiver> </application>
أمثلة
هذا المثال يوضح كيفية إنشاء جهاز استقبال البث لاعتراض نية المخصصة. مرة واحدة كنت على دراية نية مخصصة، يمكنك برمجة تطبيق لاعتراض نية ولدت من قبل النظام. دعونا اتبع الخطوات التالية لتعديل تطبيق القسم أمثلة مرحبا العالم الروبوت خلقنا.
خطوة | وصف |
---|---|
1 | استخدام الروبوت Studio لإنشاء الروبوت التطبيق واسم broadcastreceiver، ووضعها تحت الفصل أمثلة مرحبا العالم cn.uprogrammer.broadcastreceiver الحزمة. |
2 | الأنشطة الرئيسية لتعديل الملف MainActivity.java إضافة broadcastIntent طريقة (). |
3 | إنشاء ملف جافا جديد اسمه MyReceiver.java في حزمة cn.uprogrammer.broadcastreceiver لتحديد استقبال البث. |
4 | يمكن تطبيق عملية العرف واحد أو أكثر أو نية للنظام، دون أي قيود. كل نية تريد حظر تحتاج إلى استخدام <المستقبل ... /> العلامة مسجلة في AndroidManifest.xml. |
5 | تعديل RES / تخطيط / ملف activity_main.xml يحتوي على المحتوى الافتراضي للبث زر القصد. |
6 | أنت لا تحتاج إلى تعديل ملف سلسلة، والروبوت ستوديو دفع ملف string.xml الاهتمام. |
7 | إطلاق محاكي أندرويد لتشغيل التطبيق والتحقق من نتائج التغييرات التي أدخلت على التطبيق. |
هنا هو مضمون تعديل الرئيسية ملف النشاط SRC / cn.uprogrammer.broadcastreceiver / MainActivity.java من. هذا الملف يحتوي على كل من النهج الأساسي لدورة الحياة. واضاف لدينا طريقة broadcastIntent () بث أحداث مخصصة.
package cn.uprogrammer.broadcastreceiver; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.content.Intent; import android.view.View; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } // 广播自定义意图 public void broadcastIntent(View view){ Intent intent = new Intent(); intent.setAction("cn.programmer.CUSTOM_INTENT"); sendBroadcast(intent); } }
وهنا ما SRC / cn.uprogrammer.broadcastreceiver / MyReceiver.java من:
package cn.uprogrammer.broadcastreceiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.widget.Toast; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "检测到意图。", Toast.LENGTH_LONG).show(); } }
ثم تعديل ملف AndroidManifest.xml على. هنا بإضافة <المستقبل ... /> العلامة لتشمل استقبال البث لدينا:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.uprogrammer.broadcastreceiver" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="22" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <receiver android:name="MyReceiver"> <intent-filter> <action android:name="cn.programmer.CUSTOM_INTENT"> </action> </intent-filter> </receiver> </application> </manifest>
هنا هو محتوى ملف RES / تخطيط / activity_main.xml، بما في ذلك الأزرار المخصصة عازمة البث.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="广播实例" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textSize="30dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="www.uprogrammer.cn" android:textColor="#ff87ff09" android:textSize="30dp" android:layout_above="@+id/imageButton" android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageButton" android:src="@drawable/ic_launcher" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/button2" android:text="广播意图" android:onClick="broadcastIntent" android:layout_below="@+id/imageButton" android:layout_centerHorizontal="true" /> </RelativeLayout>
هنا هو مضمون RES / القيم / ملف strings.xml وتعرف اثنين من ثوابت جديدة.
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Android Broadcast Receiver</string> <string name="action_settings">Settings</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">Main Activity</string> </resources>
دعونا فقط تشغيل التطبيق مرحبا العالم! تعديلها. أفترض أنك قمت بإنشائها AVD خلال بيئة التثبيت. فتح مشروعك في الملف النشط، انقر على شريط الأدوات رمز لتشغيل التطبيق في الروبوت الاستوديو. الروبوت ستوديو تثبيت التطبيق على AVD وبدء تشغيله. إذا سارت الامور بشكل جيد، وسوف يتم عرضها على نافذة المحاكي على النحو التالي:
الآن انقر على زر "بث عازمة" على بث نوايا عادتنا. وسوف تبث لدينا نية العرف "cn.programmer.CUSTOM_INTENT"، اعتراض وتنفيذ منطقنا تنفيذها في استقبال البث لدينا MyReceiver مسجل في. سوف تظهر نخب في الجزء السفلي من جهاز محاكاة. على النحو التالي:
يمكنك محاولة تنفيذ استقبال البث آخر لاعتراض نية ولدت من قبل النظام، مثل بدء تشغيل النظام، يتغير التاريخ وانخفاض استهلاك الطاقة.