Latest web development tutorials

Приемник 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 зарегистрированного в. Тост появится в нижней части тренажера. Как следует:

изображение

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