Latest web development tutorials

รับสัญญาณออกอากาศ Android (ออกอากาศ Receivers)

รับการออกอากาศในการตอบสนองต่อข้อความออกอากาศเพื่อการใช้งานอื่น ๆ หรือระบบ ข้อความเหล่านี้บางครั้งเรียกว่าเหตุการณ์ที่เกิดขึ้นหรือความตั้งใจ ยกตัวอย่างเช่นการประยุกต์ใช้สามารถเริ่มต้นการออกอากาศเพื่อให้โปรแกรมอื่น ๆ เพื่อให้คำแนะนำบางส่วนของข้อมูลที่ได้รับการดาวน์โหลดไปยังอุปกรณ์และพวกเขาสามารถนำมาใช้ รับสัญญาณการออกอากาศดังกล่าวอาจกำหนดดำเนินการที่เหมาะสมที่จะสกัดกั้นการสื่อสารเหล่านี้

มีสองขั้นตอนสำคัญที่จะทำให้ความตั้งใจของระบบการแพร่ภาพมีสัญญาณการออกอากาศในการทำงาน

  • สร้างตัวรับสัญญาณออกอากาศ
  • รับสัญญาณการออกอากาศที่ลงทะเบียน

มีขั้นตอนเพิ่มเติมเพื่อให้บรรลุความตั้งใจที่จะกำหนดเองคือคุณต้องสร้างและการถ่ายทอดความตั้งใจเหล่านี้


สร้างตัวรับสัญญาณออกอากาศ

รับสัญญาณการออกอากาศจะต้องดำเนินการเป็นชั้น subclass 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 เหตุการณ์นี้จะออกเมื่อกระบวนการเริ่มต้นโดยระบบ Android เป็นที่สมบูรณ์

รับสัญญาณการออกอากาศ (ออกอากาศ Receivers)

<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>

ตอนนี้เมื่อใดก็ตามที่อุปกรณ์ Android สามารถใช้งานได้ดักจะมีการถ่ายทอดรับ 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 ผู้ใช้คลิกที่ปุ่ม "Call" เพื่อเปิดเลขหมายหรือหน้าปัดอินเตอร์เฟซที่เหมาะสมอื่น ๆ
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>

ตัวอย่าง

ตัวอย่างนี้จะอธิบายวิธีการสร้างตัวรับสัญญาณการออกอากาศเพื่อสกัดกั้นความตั้งใจที่กำหนดเอง เมื่อคุณคุ้นเคยด้วยความตั้งใจที่กำหนดเองคุณสามารถเขียนโปรแกรมประยุกต์ใช้ในการสกัดกั้นความตั้งใจที่จะสร้างโดยระบบ ขอให้เราทำตามขั้นตอนต่อไปนี้เพื่อปรับเปลี่ยนการประยุกต์ใช้ Android Hello World ส่วนตัวอย่างที่เราสร้าง

ขั้นตอน ลักษณะ
1 ใช้ Android สตูดิโอเพื่อสร้างการประยุกต์ใช้ Android และชื่อ broadcastreceiver และอยู่ภายใต้การ Hello World ตัวอย่างบท cn.uprogrammer.broadcastreceiver แพคเกจ
2 กิจกรรมหลักในการปรับเปลี่ยนไฟล์ MainActivity.java เพิ่ม broadcastIntent () วิธีการ
3 สร้างไฟล์ใหม่ที่ชื่อว่า Java MyReceiver.java ที่แพคเกจ cn.uprogrammer.broadcastreceiver เพื่อกำหนดรับสัญญาณออกอากาศ
4 โปรแกรมประยุกต์ที่สามารถดำเนินการอย่างใดอย่างหนึ่งหรือที่กำหนดเองมากขึ้นหรือความตั้งใจของระบบโดยไม่มีข้อ จำกัด ใด ๆ ความตั้งใจที่คุณต้องการที่จะห้ามแต่ละต้องใช้ <รับ ... /> แท็กที่ลงทะเบียนใน AndroidManifest.xml
5 ปรับเปลี่ยนความละเอียด / รูปแบบไฟล์ / activity_main.xml มีเนื้อหาเริ่มต้นที่จะออกอากาศปุ่มเจตนา
6 คุณไม่จำเป็นต้องแก้ไขไฟล์สตริง, Android สตูดิโอจะจ่ายไฟล์ string.xml ความสนใจ
7 เปิดตัวโปรแกรมจำลอง Android เพื่อเรียกใช้โปรแกรมประยุกต์และตรวจสอบผลของการเปลี่ยนแปลงที่เกิดขึ้นกับแอพลิเคชัน

นี่คือเนื้อหาของการแก้ไขไฟล์หลักกิจกรรม 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>

ขอเพียงแค่เรียกใช้โปรแกรมประยุกต์ Hello World! ปรับเปลี่ยน ผมถือว่าคุณได้สร้างสภาพแวดล้อม AVD ระหว่างการติดตั้ง เปิดโครงการในไฟล์ที่ใช้งานให้คลิกบนแถบเครื่องมือ ภาพ ไอคอนเพื่อเรียกใช้โปรแกรมประยุกต์ใน Android สตูดิโอ สตูดิโอหุ่นยนต์ติดตั้งโปรแกรมประยุกต์บน AVD และเริ่มมัน หากทุกอย่างไปได้ดีก็จะปรากฏบนหน้าต่างจำลองดังต่อไปนี้:

ภาพ

ตอนนี้คลิกที่ "เจตนาออกอากาศ" เพื่อออกอากาศความตั้งใจของเราเอง มันจะออกอากาศเจตนาของเราเอง "cn.programmer.CUSTOM_INTENT" สกัดกั้นและดำเนินการตรรกะของเราดำเนินการในการรับการออกอากาศของเรา MyReceiver จดทะเบียนใน ขนมปังจะปรากฏที่ด้านล่างของจำลองที่ ดังต่อไปนี้:

ภาพ

คุณสามารถพยายามที่จะใช้รับสัญญาณออกอากาศอื่น ๆ เพื่อสกัดกั้นความตั้งใจที่จะสร้างโดยระบบเช่นการเริ่มต้นระบบการเปลี่ยนแปลงวันและการใช้พลังงานต่ำ