Latest web development tutorials

receptor de radiodifusão Android (receptores de radiodifusão)

receptor de radiodifusão em resposta à mensagem de transmissão para outras aplicações ou sistemas. Estas mensagens são às vezes chamados eventos ou intenções. Por exemplo, uma aplicação pode iniciar uma transmissão para permitir que outras aplicações para orientar alguns dos dados terem sido transferidos para o dispositivo, e eles podem ser usados. Esse receptor de radiodifusão podem definir as medidas necessárias para interceptar essas comunicações.

Há dois passos importantes para tornar a intenção do sistema de transmissão com um receptor de transmissão para o trabalho.

  • Criar receptor de radiodifusão
  • receptor de radiodifusão Registered

Há um passo adicional para alcançar a intenção do costume, você deve criar e transmitir estas intenções.


Criar receptor de radiodifusão

receptor de radiodifusão precisa ser implementado como uma classe subclasse BroadcastReceiver e substituir OnReceive () método recebe o objeto Intent como um parâmetro da mensagem.

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

receptor de radiodifusão Registered

Por petição registada na AndroidManifest.xml receptor de radiodifusão para receber transmissão de intenção para se desenvolver. Suponha que pretende registar MyReceiver para monitorar eventos ACTION_BOOT_COMPLETED gerado pelo sistema. Este evento é emitido quando o processo iniciado pelo sistema Android está completa.

receptor de radiodifusão (receptores de radiodifusão)

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

receptor Agora, sempre que o dispositivo Android é ativado, os interceptores será transmitido MyReceiver e OnReceive () implementado lógica será executada.

Existem muitos eventos gerados pelo sistema é definida como uma classe Intenção valor constante estática. A tabela a seguir lista os eventos importantes do sistema.

Constantes de eventos descrição
android.intent.action.BATTERY_CHANGED transmissão durável, incluindo o estado de carga da bateria, o nível e outras informações.
android.intent.action.BATTERY_LOW bateria fraca dispositivo de identificação condição.
android.intent.action.BATTERY_OKAY Identifica a bateria está fraca, é agora tem sido boa.
android.intent.action.BOOT_COMPLETED Depois que o sistema tiver terminado o arranque transmitir novamente.
android.intent.action.BUG_REPORT Apresentar Relatório atividade bug.
android.intent.action.CALL Chamar alguém para executar os dados especificados.
android.intent.action.CALL_BUTTON Os usuários clicam no botão "Call" para abrir o marcador ou outra marcação interface adequada.
android.intent.action.DATE_CHANGED Alterações de data.
android.intent.action.REBOOT reinicialização do dispositivo.

intenção transmitir Personalizado

Se você quiser que seu aplicativo para gerar e enviar uma intenção de costume, você precisa criar e transmitir estas intenções em atividades de classe através sendBroadcast (). Se você usar sendStickyBroadcast método (Intenção) se destina a ser permanente (pegajosa), o que significa que a sua intenção emitido após a conclusão da transmissão foi mantido.

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

intenções cn.uprogrammer.CUSTOM_INTENT como intenções antes de nós pode produzir o mesmo sistema de registro está registrado.

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

Exemplos

Este exemplo irá explicar como criar um receptor de radiodifusão para interceptar uma intenção personalizado. Depois de se familiarizar com a intenção personalizado, você pode programar o aplicativo para interceptar intenção gerada pelo sistema. Vamos seguir os seguintes passos para modificar a seção Exemplos Android aplicação Olá mundo que criamos.

passo descrição
1 Use Android Studio para criar um aplicativo e nome BroadcastReceiver Android, e colocado sob o capítulo exemplos Olá Mundo cn.uprogrammer.broadcastreceiver pacote.
2 As principais atividades para modificar o arquivo MainActivity.java adicionar método broadcastIntent ().
3 Criar um novo arquivo Java chamado MyReceiver.java no pacote cn.uprogrammer.broadcastreceiver para definir o receptor broadcast.
4 Um aplicativo pode processar um ou mais personalizado ou intenção de o sistema, sem quaisquer restrições. Cada intenção que deseja banir precisa usar tag <receptor ... /> registrado em AndroidManifest.xml.
5 Modificar res / layout / arquivo activity_main.xml contém um conteúdo padrão para transmitir botão intenção.
6 Você não precisa modificar o arquivo de corda, Estúdio Android pagará arquivo string.xml atenção.
7 Lançar emulador Android para executar o aplicativo e verificar os resultados das alterações feitas no aplicativo.

Aqui está o conteúdo do arquivo principal atividade src / cn.uprogrammer.broadcastreceiver / MainActivity.java modificada. Este ficheiro contém cada um a abordagem básica de ciclo de vida. Nós adicionamos broadcastIntent () para transmitir eventos personalizados.

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

Aqui está o que src / cn.uprogrammer.broadcastreceiver / MyReceiver.java de:

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

Em seguida, modificar o arquivo AndroidManifest.xml. Aqui, adicionando tag <receptor ... /> para incluir o nosso receptor broadcast:

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

Aqui está o conteúdo do arquivo res / layout / activity_main.xml, incluindo botões personalizados com a intenção de difusão.

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

Aqui está o conteúdo de res / valores / arquivo strings.xml define duas novas constantes.

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

Vamos apenas executar um aplicativo Olá mundo! Modificado. Presumo que você criou AVD durante o ambiente de instalação. Abra o projeto no arquivo ativo, clique na barra de ferramentas fotografia Ícone para executar o aplicativo no Android Studio. Estúdio Android instalar o aplicativo no AVD e inicia-lo. Se tudo correr bem, ele será exibido na janela do emulador da seguinte forma:

fotografia

Agora clique no botão "Broadcast intenção" para transmitir nossas intenções personalizados. Ele vai transmitir a nossa intenção costume "cn.programmer.CUSTOM_INTENT", interceptando e execução de nossa lógica implementada em nosso receptor de radiodifusão MyReceiver registrado em. O brinde aparece na parte inferior do simulador. Como se segue:

fotografia

Você pode tentar implementar outro receptor de radiodifusão para interceptar intenção gerado pelo sistema, tais como a inicialização do sistema, alterações de data e baixo consumo de energia.