Latest web development tutorials

الروبوت استقبال البث (البث الاستقبال)

استقبال البث ردا على رسالة البث إلى تطبيقات أو أنظمة أخرى. وتسمى هذه الرسائل أحيانا أحداث أو النوايا. على سبيل المثال، يمكن تطبيق بدء البث للسماح للتطبيقات الأخرى لتوجيه بعض البيانات التي تم تحميلها إلى الجهاز، ويمكن استخدامها. هذا استقبال البث قد تحدد الإجراءات المناسبة لاعتراض هذه الرسائل.

هناك نوعان من الخطوات الهامة لجعل القصد من نظام البث مع جهاز استقبال البث للعمل.

  • إنشاء جهاز استقبال البث
  • استقبال البث المسجلين

هناك خطوة إضافية لتحقيق القصد من هذه العادة، يجب عليك إنشاء وبث هذه النوايا.


إنشاء جهاز استقبال البث

لا بد من تنفيذها في فئة فرعية 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 مسجل في. سوف تظهر نخب في الجزء السفلي من جهاز محاكاة. على النحو التالي:

صور

يمكنك محاولة تنفيذ استقبال البث آخر لاعتراض نية ولدت من قبل النظام، مثل بدء تشغيل النظام، يتغير التاريخ وانخفاض استهلاك الطاقة.