Приемник Android вещания (Broadcast ресиверы)
Радиовещательный приемник в ответ на сообщение вещания в других приложениях или системах. Эти сообщения иногда называют события или намерения. Например, приложение может инициировать передачу, чтобы позволить другим приложениям, чтобы направлять часть данных была загружена в устройство, и они могут быть использованы. Такой радиовещательный приемник может определить соответствующие меры для перехвата этих сообщений.
Есть два важных шагов, чтобы сделать намерение системы вещания с широковещательным приемником работать.
- Создать радиовещательный приемник
- Зарегистрированная радиовещательный приемник
Существует дополнительный шаг для достижения намерения обычаю, вы должны создавать и транслировать эти намерения.
Создать радиовещательный приемник
Радиовещательный приемник должен быть реализован как класс подкласс 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 системы завершена.
<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 () реализована логика будет выполняться.
Есть много событий, порождаемые системой определяется как класса Intent статической постоянной величины. В следующей таблице перечислены важные системные события.
Константы Событие | описание |
---|---|
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 (Intent) метод должен быть постоянным (липкая), что означает, что ваше намерение выдается после завершения трансляции была сохранена.
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 Studio для создания 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>
Вот содержание Рез / макет / 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>
Вот содержание Рез / значений / файла 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 Studio. Android-студия установить приложение на AVD и запускает его. Если все пойдет хорошо, он будет отображаться в окне эмулятора выглядит следующим образом:
Теперь нажмите на кнопку "Broadcast намерение" транслировать наши собственные намерения. Он будет транслировать наше пользовательское намерение "cn.programmer.CUSTOM_INTENT", перехватывая и выполнение наша логика реализована в нашем радиовещательного приемника MyReceiver зарегистрированного в. Тост появится в нижней части тренажера. Как следует:
Вы можете попробовать реализовать другой вещательный приемник для перехвата намерения, генерируемого системой, такие как запуск системы, изменения даты и низком потреблении энергии.