Android — Broadcast Receivers (приемники вещания)


Broadcast Receivers (приемники вещания) просто отвечать на широковещательные сообщения из других приложений или из самой системы. Эти сообщения иногда называют событиями или намерениями Intents. Например, приложения также могут инициировать широковещательные рассылки, чтобы сообщить другим приложениям, что некоторые данные были загружены на устройство и доступны для их использования, поэтому это широковещательный приемник, который перехватит это сообщение и инициирует соответствующее действие.

Чтобы заставить BroadcastReceiver работать для целей системного вещания, необходимо выполнить два важных шага:

Есть еще один дополнительный шаг, если вы собираетесь реализовать свои собственные намерения, тогда вам нужно будет создать и транслировать эти намерения.

Создание широковещательного приемника

Приемники вещания реализован как подкласс BroadcastReceiver class и переопределение метода onReceive (), в котором каждое сообщение принимается как Intent (намерение) параметр объекта.

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 завершила процесс загрузки.

транслировать

Вещательный приемник

<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 загружается, оно будет перехвачено BroadcastReceiver. MyReceiver и реализованная логика внутри onReceive () будет выполнен.

Есть несколько событий, генерируемых системой, которые определены как конечные статические поля в Намерение учебный класс. В следующей таблице перечислены несколько важных системных событий.

Константа и описание
1android.intent.action.BATTERY_CHANGED
Липкая трансляция, содержащая состояние зарядки, уровень и другую информацию об аккумуляторе.
2android.intent.action.BATTERY_LOW
Указывает на низкий уровень заряда батареи устройства.
3android.intent.action.BATTERY_OKAY
Указывает на то, что батарея в норме после низкого уровня заряда.
4android.intent.action.BOOT_COMPLETED
Он транслируется один раз после завершения загрузки системы.
5android.intent.action.BUG_REPORT
Показать активность для сообщения об ошибке.
6android.intent.action.CALL
Выполните звонок кому-то, указанному в данных.
7android.intent.action.CALL_BUTTON
Пользователь нажал кнопку «позвонить», чтобы перейти к программе набора номера или другому соответствующему пользовательскому интерфейсу для выполнения вызова.
8android.intent.action.DATE_CHANGED
Дата изменилась.
9android.intent.action.REBOOT
Перезагрузите устройство.

Трансляция настраиваемых намерений

Если вы хотите, чтобы ваше приложение само генерировало и отправляло настраиваемые намерения, вам придется создавать и отправлять эти намерения с помощью sendBroadcast () внутри вашего класса активности. Если вы используете sendStickyBroadcast (намерение) метод, намерение sticky, имея в виду Intent вы отправляете пребывания после завершения вещания.

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

Это намерение com.tutorialspoint.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="com.tutorialspoint.CUSTOM_INTENT">
         </action>
      </intent-filter>
   
   </receiver>
</application>

Пример

Этот пример объяснит вам, как создать BroadcastReceiver перехватить индивидуальное намерение. Когда вы познакомитесь с настраиваемым намерением, вы можете запрограммировать свое приложение на перехват намерений, созданных системой. Итак, давайте выполним следующие шаги, чтобы изменить приложение Android, которое мы создали в Привет, мир, в предыдущих статьях

ШагОписание
1Вы будете использовать Android studio для создания Android-приложения и назовете его как Мое приложение под пакет com.example.tutorialspoint7.myapplication как объяснено в Привет, мир, пример глава.
2Изменить основной файл активности MainActivity.java добавить broadcastIntent () метод.
3Создайте новый файл java с именем MyReceiver.java под пакет com.example.tutorialspoint7.myapplication чтобы определить BroadcastReceiver.
4Приложение может обрабатывать одно или несколько пользовательских и системных намерений без каких-либо ограничений. Каждое намерение, которое вы хотите перехватить, должно быть зарегистрировано в вашем AndroidManifest.xml файл с использованием тега
5Измените содержимое по умолчанию res / layout / activity_main.xml файл, чтобы включить кнопку для трансляции намерения.
6Нет необходимости изменять строковый файл, студия Android позаботится о файле string.xml.
7Запустите приложение, чтобы запустить эмулятор Android и проверить результат изменений, внесенных в приложение.

Ниже приводится содержание измененного файла основной деятельности. MainActivity.java. Этот файл может включать каждый из основных методов жизненного цикла. Мы добавили broadcastIntent () метод для трансляции особого намерения.

package com.example.tutorialspoint7.myapplication;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

   /** Вызывается при первом создании действия. */
   @Override
   
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
   }


   // Транслировать индивидуальное намерение.
      
   public void broadcastIntent(View view){
      Intent intent = new Intent();
      intent.setAction("com.tutorialspoint.CUSTOM_INTENT"); sendBroadcast(intent);
   }
}

Ниже приводится содержание MyReceiver.java:

package com.example.tutorialspoint7.myapplication;

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, "Intent Detected.", Toast.LENGTH_LONG).show();
   }
}

Ниже будет измененное содержание AndroidManifest.xml файл. Здесь мы добавили тег , чтобы включить нашу службу:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint7.myapplication">

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
		
      <activity android:name=".MainActivity">
         <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="com.tutorialspoint.CUSTOM_INTENT">
            </action>
         </intent-filter>

      </receiver>
   </application>

</manifest>

Ниже будет содержание res / layout / 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="Example of Broadcast"
      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="Tutorials point "
      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="https://www.tutorialspoint.com/android/@drawable/abc"
      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="Broadcast Intent"
      android:onClick="broadcastIntent"
      android:layout_below="@+id/imageButton"
      android:layout_centerHorizontal="true" />

</RelativeLayout>

Попробуем запустить наш модифицированный Привет, мир! приложение, которое мы только что изменили. Я полагаю, вы создали свой AVD при настройке среды. Чтобы запустить приложение из студии Android, откройте один из файлов активности вашего проекта и нажмите «Выполнить». Значок Eclipse Run значок на панели инструментов. Android Studio устанавливает приложение на ваш AVD и запускает его, и если все в порядке с вашей настройкой и приложением, оно отобразит следующее окно эмулятора —

Демоверсия Android Broadcast

Теперь, чтобы транслировать наше собственное намерение, давайте нажмем на Трансляция намерения кнопка, это будет транслировать наше индивидуальное намерение «com.tutorialspoint.CUSTOM_INTENT» который будет перехвачен нашим зарегистрированным BroadcastReceiver, то есть MyReceiver, и в соответствии с нашей реализованной логикой в ​​нижней части симулятора появится тост следующим образом:

Android Broadcast Intent

Вы можете попробовать реализовать другой BroadcastReceiver для перехвата сгенерированных системой намерений, таких как загрузка системы, изменение даты, низкий заряд батареи и т. д.

Поделись с друзьями:

Оставьте комментарий