Latest web development tutorials

Android penerima siaran (Broadcast Penerima)

penerima siaran dalam menanggapi pesan broadcast ke aplikasi atau sistem lainnya. Pesan-pesan ini kadang-kadang disebut peristiwa atau niat. Sebagai contoh, sebuah aplikasi dapat memulai siaran untuk memungkinkan aplikasi lain untuk memandu beberapa data telah diunduh ke perangkat, dan mereka dapat digunakan. penerima siaran tersebut dapat menentukan tindakan yang tepat untuk mencegat komunikasi ini.

Ada dua langkah penting untuk membuat maksud dari sistem penyiaran dengan penerima siaran untuk bekerja.

  • Buat penerima siaran
  • penerima siaran Terdaftar

Ada langkah tambahan untuk mencapai maksud dari kebiasaan, Anda harus membuat dan menyiarkan niat tersebut.


Buat penerima siaran

Broadcast receiver perlu diimplementasikan sebagai kelas subclass BroadcastReceiver dan menimpa onReceive () metode menerima objek Intent sebagai parameter dari pesan.

public class MyReceiver extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
      Toast.makeText(context, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

penerima siaran Terdaftar

Dengan aplikasi yang terdaftar di AndroidManifest.xml penerima siaran untuk menerima siaran niat untuk mengembangkan. Misalkan kita ingin mendaftar MyReceiver untuk memantau sistem yang dihasilkan ACTION_BOOT_COMPLETED acara. Acara ini dikeluarkan ketika proses dimulai oleh sistem Android selesai.

Broadcast receiver (siaran Penerima)

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

Sekarang, setiap kali perangkat Android diaktifkan, pencegat akan disiarkan penerima MyReceiver, dan onReceive () dilaksanakan logika akan dieksekusi.

Ada banyak peristiwa yang dihasilkan oleh sistem didefinisikan sebagai nilai konstan statis kelas Intent. Tabel berikut berisi daftar peristiwa penting sistem.

Konstanta acara deskripsi
android.intent.action.BATTERY_CHANGED penyiaran tahan lama, termasuk negara baterai biaya, tingkat dan informasi lainnya.
android.intent.action.BATTERY_LOW baterai rendah perangkat identifikasi kondisi.
android.intent.action.BATTERY_OKAY Mengidentifikasi daya baterai rendah, sekarang sudah baik.
android.intent.action.BOOT_COMPLETED Setelah sistem selesai booting siaran lagi.
android.intent.action.BUG_REPORT Tampilkan Laporan aktivitas bug.
android.intent.action.CALL Memanggil seseorang untuk melakukan data ditentukan.
android.intent.action.CALL_BUTTON Pengguna klik pada tombol "Telepon" untuk membuka dialer atau antarmuka cepat lain yang cocok.
android.intent.action.DATE_CHANGED tanggalnya.
android.intent.action.REBOOT Perangkat restart.

niat kustom disiarkan

Jika Anda ingin aplikasi Anda untuk menghasilkan dan mengirim niat kustom, Anda perlu membuat dan mengirimkan niat ini dalam kegiatan kelas melalui sendBroadcast (). Jika Anda menggunakan sendStickyBroadcast metode (Intent) dimaksudkan untuk menjadi permanen (lengket), yang berarti bahwa niat Anda dikeluarkan setelah selesainya siaran telah dipertahankan.

public void broadcastIntent(View view)
{
   Intent intent = new Intent();
   intent.setAction("cn.uprogrammer.CUSTOM_INTENT");
   sendBroadcast(intent);
}

cn.uprogrammer.CUSTOM_INTENT niat sebagai niat sebelum kita dapat menghasilkan sistem registrasi yang sama terdaftar.

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

contoh

Contoh ini akan menjelaskan cara membuat penerima siaran untuk mencegat niat kustom. Setelah Anda terbiasa dengan niat kustom, Anda dapat memprogram aplikasi untuk mencegat niat yang dihasilkan oleh sistem. Mari kita ikuti langkah-langkah berikut untuk mengubah Android aplikasi Hello World Contoh bagian kita buat.

langkah deskripsi
1 Gunakan Android Studio untuk membuat aplikasi dan nama Android BroadcastReceiver, dan ditempatkan di bawah contoh bab Hello World cn.uprogrammer.broadcastreceiver paket.
2 Kegiatan utama untuk memodifikasi file MainActivity.java menambahkan () metode broadcastIntent.
3 Buat file Java baru bernama MyReceiver.java di paket cn.uprogrammer.broadcastreceiver untuk menentukan penerima siaran.
4 Sebuah aplikasi dapat memproses satu atau lebih kustom atau niat dari sistem, tanpa batasan. Setiap niat Anda ingin untuk melarang perlu menggunakan <penerima ... /> tag yang terdaftar di AndroidManifest.xml.
5 Modifikasi res / layout / berkas activity_main.xml berisi konten default untuk menyiarkan tombol niat.
6 Anda tidak perlu memodifikasi file string, Android Studio akan memperhatikan berkas string.xml.
7 Luncurkan emulator Android untuk menjalankan aplikasi dan memverifikasi hasil perubahan yang dibuat untuk aplikasi.

Berikut adalah isi dari modifikasi file utama kegiatan src / cn.uprogrammer.broadcastreceiver / MainActivity.java dari. File ini berisi masing-masing pendekatan siklus hidup dasar. Kami telah menambahkan broadcastIntent () metode untuk menyiarkan acara adat.

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);
    }
}

Inilah yang src / cn.uprogrammer.broadcastreceiver / MyReceiver.java dari:

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();
    }
}

Kemudian memodifikasi file AndroidManifest.xml. Berikut dengan menambahkan <penerima ... /> tag untuk memasukkan penerima siaran kami:

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

Berikut adalah isi dari file res / layout / activity_main.xml, termasuk tombol kustom niat disiarkan.

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

Berikut adalah isi dari res / values ​​/ berkas strings.xml mendefinisikan dua konstanta baru.

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

Mari kita jalankan dimodifikasi Aplikasi Hello World!. Saya berasumsi bahwa Anda telah membuat AVD selama lingkungan instalasi. Buka proyek Anda dalam file yang aktif, klik pada toolbar gambar Icon untuk menjalankan aplikasi Dalam Android Studio. Android Studio menginstal aplikasi pada AVD dan mulai itu. Jika semua berjalan dengan baik, itu akan ditampilkan pada jendela emulator sebagai berikut:

gambar

Sekarang klik pada tombol "Broadcast niat" untuk menyiarkan niat kebiasaan kami. Ini akan disiarkan niat kebiasaan kami "cn.programmer.CUSTOM_INTENT", mencegat dan melaksanakan logika kita diimplementasikan dalam penerima siaran kami MyReceiver terdaftar di. toast akan muncul di bagian bawah simulator. Sebagai berikut:

gambar

Anda dapat mencoba untuk menerapkan penerima siaran lain untuk mencegat niat yang dihasilkan oleh sistem, seperti startup sistem, perubahan tanggal dan penggunaan daya yang rendah.