Latest web development tutorials

Android odbiornik broadcast (Broadcast Odbiorniki)

Odbiornik transmisji w odpowiedzi na komunikat rozgłoszeniowy do innych aplikacji lub systemów. Komunikaty te są czasami nazywane zdarzenia lub intencje. Na przykład, aplikacja może zainicjować transmisję, aby umożliwić inne zastosowania, aby kierować część danych została załadowana do urządzenia i można je stosować. Taki odbiornik transmisji mogą określić odpowiednie działania w celu przechwycenia tych komunikatów.

Istnieją dwa ważne kroki, aby intencje systemu nadawania audycji z odbiornikiem do pracy.

  • Tworzenie odbiornik rozgłaszania
  • Zarejestrowany odbiorca przekazu

Jest to dodatkowy krok do osiągnięcia zamiarów zwyczaju, trzeba tworzyć i nadawać te zamiary.


Tworzenie odbiornik rozgłaszania

Odbiornik transmisji musi być realizowany jako klasa podklasa BroadcastReceiver i zastąpić onReceive () metoda otrzyma zamiarem obiekt jako parametr komunikatu.

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

Zarejestrowany odbiorca przekazu

Pismem zarejestrowanym w AndroidManifest.xml odbiornika do odbioru transmisji broadcast zamiar rozwijać. Załóżmy, że chcemy, aby zarejestrować MyReceiver do monitorowania systemu generowane zdarzenie ACTION_BOOT_COMPLETED. To zdarzenie jest wydawane, gdy proces rozpoczęty przez system Android jest kompletna.

Odbiornik broadcast (Broadcast Odbiorniki)

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

Teraz, gdy urządzenie Android jest aktywowany, będzie transmitowana przechwytujące odbiornik MyReceiver i onReceive () realizowany logika będą realizowane.

Istnieje wiele zdarzenia generowane przez system jest zdefiniowane jako klasa zamiar statycznej wartości stałej. Poniższa tabela zawiera listę ważnych zdarzeń systemowych.

Stałe Event opis
android.intent.action.BATTERY_CHANGED Trwała nadawczych, w tym stanu naładowania akumulatora, poziomu i innych informacji.
android.intent.action.BATTERY_LOW Niski stan baterii urządzenie identyfikacyjne.
android.intent.action.BATTERY_OKAY Wskazuje poziom naładowania baterii jest niski, to teraz jest dobry.
android.intent.action.BOOT_COMPLETED Po zakończeniu rozruchu systemu nadawane ponownie.
android.intent.action.BUG_REPORT Wyświetlacz Raport aktywności bug.
android.intent.action.CALL Zadzwoń do kogoś, aby wykonać określone dane.
android.intent.action.CALL_BUTTON Użytkownicy kliknąć na przycisk "Połącz", aby otworzyć aplikację Zadzwoń lub innego odpowiedniego pokrętła interfejsu.
android.intent.action.DATE_CHANGED Data zmiany.
android.intent.action.REBOOT restart urządzenia.

Niestandardowe nadawane intencją

Jeśli chcesz, aby aplikacja do generowania i wysyłania niestandardowego intencji, trzeba tworzyć i przekazywać te intencje w zajęciach poprzez sendBroadcast (). Jeśli używasz sendStickyBroadcast metoda (Intent) ma być trwałe (lepkie), co oznacza, że ​​intencją wydane po zakończeniu transmisji została utrzymana.

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

intencje cn.uprogrammer.CUSTOM_INTENT jak zamiarów, zanim będziemy mogli produkować ten sam system rejestracji jest zarejestrowany.

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

Przykłady

Ten przykład wyjaśni jak stworzyć odbiornik rozgłaszania do przechwytywania niestandardową intencji. Po zapoznaniu się z zamiarem niestandardowego można zaprogramować aplikację do przechwytywania intencji wygenerowany przez system. Pozwól nam wykonać następujące kroki, aby zmodyfikować Android aplikacji Hello World Przykłady sekcji stworzyliśmy.

krok opis
1 Użyj Android Studio do tworzenia aplikacji Android i nazwisko broadcastreceiver i umieszczone pod Hello World rozdziale Przykłady cn.uprogrammer.broadcastreceiver pakiet.
2 Główne działania zmodyfikować plik MainActivity.java dodać metodę broadcastIntent ().
3 Utwórz nowy plik Java o nazwie MyReceiver.java w pakiecie cn.uprogrammer.broadcastreceiver do zdefiniowania odbiorcy przekazu.
4 Aplikacja może przetwarzać jeden lub więcej niestandardowych lub zamiaru systemu, bez żadnych ograniczeń. Każdy zamiar chcesz zabronić trzeba użyć <Odbiornik ... /> tag zarejestrowany w AndroidManifest.xml.
5 Modyfikacja res / layout / file activity_main.xml zawiera treść domyślną nadawania przycisk intencji.
6 Nie trzeba zmodyfikować plik ciąg, Android Studio będzie zwracać uwagę plik string.xml.
7 Uruchom emulator systemu Android, aby uruchomić aplikację i sprawdzić wyniki zmian wprowadzonych do wniosku.

Oto treść zmodyfikowanego pliku głównego Aktywność src / cn.uprogrammer.broadcastreceiver / MainActivity.java dnia. Ten plik zawiera każda podstawowego podejścia cyklu życia. Mamy metody broadcastIntent () do transmisji zdarzeń niestandardowych dodał.

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

Oto co src / cn.uprogrammer.broadcastreceiver / MyReceiver.java się z:

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

Następnie zmodyfikować plik AndroidManifest.xml. Tutaj dodając <Odbiornik ... /> tag dołączyć nasz odbiornik audycji:

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

Oto zawartość pliku res / layout / activity_main.xml, w tym nadawanych intencyjny niestandardowych przycisków.

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

Oto treść RES / wartości / pliku strings.xml definiuje dwie nowe stałe.

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

Załóżmy, wystarczy uruchomić zmodyfikowanej aplikacji Hello World!. Zakładam, że utworzyliśmy AVD podczas środowiska instalacji. Otwórz projekt w aktywnym pliku, kliknij przycisk na pasku narzędzi obraz Ikona, aby uruchomić aplikację w Android Studio. Android Studio zainstalować aplikację na AVD i uruchamia go. Jeśli wszystko pójdzie dobrze, to zostanie wyświetlona w oknie emulatora w następujący sposób:

obraz

Teraz kliknij na przycisk "Broadcast intent" nadawać nasze własne intencje. Będzie ona transmitowana nasz własny intencji "cn.programmer.CUSTOM_INTENT", przechwytując i wykonanie kodu realizowane w naszym odbiorniku nadawanego MyReceiver zarejestrowanego w. Tost pojawi się w dolnej części symulatora. W następujący sposób:

obraz

Można spróbować wdrożyć inny odbiornik rozgłaszania do przechwytywania intencji generowane przez system, takich jak uruchamiania systemu, zmiany terminów i niskim zużyciu energii.