Android学習のBroadcast
8182 ワード
AndroidでActivity,Service,Broadcast,BroadcastReceiverを使う
アクティビティ(Activity)-機能の表現に使用
サービス(Service)-バックグラウンドで実行されるActivityに相当
ブロードキャスト(Broadcast)-ブロードキャストの送信に使用
ブロードキャスト受信機(BroadcastReceiver)-ブロードキャストを受信する
Intent-上記の各コンポーネントを接続し、メッセージを転送するために使用します.
Androidの放送イベントは2種類ありますが、1つはシステム放送イベント、例えばACTION_BOOT_COMPLETED(システム起動完了後トリガー)、ACTION_TIME_CHANGED(システム時間変更時にトリガー)、ACTION_BATTERY_LOW(低電力時トリガ)など.もう1つは、カスタマイズされたブロードキャストイベントです.
BroadcastReceiverの登録には2つの方法があります.
1つの方法は、AndroidManifestで静的です.xmlにはラベルライフで登録し、ラベル内にラベルでフィルタを設定します.
もう1つの方法は、コードの中で1つのIntentFilterオブジェクトを動的に定義して設定し、登録が必要な場所でContextを調整することである.registerReceiver()メソッドは、キャンセルするとContextを呼び出す.unregisterReceiver()メソッド.動的に登録されたBroadcastReceiverのContextオブジェクトが破棄されると、BroadcastReceiverは自動的に登録をキャンセルします.(特に、メールメッセージなど、バックグラウンドで傍受する必要がある場合があります)
ブロードキャストイベントの送信:Context.を介してsendBroadcastが送信し,Intentが登録時に用いたActionを渡す.≪ブロードキャスト・イベントの受信|Receive Publish Events|emdw≫:送信されたブロードキャストが受信機によって傍受されると、onReceive()メソッドが呼び出され、メッセージを含むIntentオブジェクトが送信されます.onReceiveのコードの実行時間は5 sを超えないでください.そうしないと、Androidはタイムアウトdialogをポップアップします.
またsendBroadcast()を使用する方法で受信権限を指定するとAndroidManifestのみとなる.xmlでタブでこの権限を持つBroascastReceiverが送信されたBroadcastを受信する可能性があることを宣言します.同様に、BroadcastReceiver登録時に受信可能なBroadcastの権限を指定すると、パッケージ内のAndroidManifestのみとなる.xmlではタグで宣言されており、この権限を持つContextオブジェクトが送信するBroadcastはこのBroadcastReceiverによって受信されます.
ブロードキャスト受信機にはユーザインタフェースがありません.ただし、受信した情報に応答するactivityを起動したり、NotificationManagerでユーザーに通知したりすることができます.通知は、バックライトの点滅、振動、音声の再生など、多くの方法でユーザーの注意を引くことができます.
MainActivity.java:
StaticReceiver.java:
アクティビティ(Activity)-機能の表現に使用
サービス(Service)-バックグラウンドで実行されるActivityに相当
ブロードキャスト(Broadcast)-ブロードキャストの送信に使用
ブロードキャスト受信機(BroadcastReceiver)-ブロードキャストを受信する
Intent-上記の各コンポーネントを接続し、メッセージを転送するために使用します.
Androidの放送イベントは2種類ありますが、1つはシステム放送イベント、例えばACTION_BOOT_COMPLETED(システム起動完了後トリガー)、ACTION_TIME_CHANGED(システム時間変更時にトリガー)、ACTION_BATTERY_LOW(低電力時トリガ)など.もう1つは、カスタマイズされたブロードキャストイベントです.
BroadcastReceiverの登録には2つの方法があります.
1つの方法は、AndroidManifestで静的です.xmlには
もう1つの方法は、コードの中で1つのIntentFilterオブジェクトを動的に定義して設定し、登録が必要な場所でContextを調整することである.registerReceiver()メソッドは、キャンセルするとContextを呼び出す.unregisterReceiver()メソッド.動的に登録されたBroadcastReceiverのContextオブジェクトが破棄されると、BroadcastReceiverは自動的に登録をキャンセルします.(特に、メールメッセージなど、バックグラウンドで傍受する必要がある場合があります)
ブロードキャストイベントの送信:Context.を介してsendBroadcastが送信し,Intentが登録時に用いたActionを渡す.≪ブロードキャスト・イベントの受信|Receive Publish Events|emdw≫:送信されたブロードキャストが受信機によって傍受されると、onReceive()メソッドが呼び出され、メッセージを含むIntentオブジェクトが送信されます.onReceiveのコードの実行時間は5 sを超えないでください.そうしないと、Androidはタイムアウトdialogをポップアップします.
またsendBroadcast()を使用する方法で受信権限を指定するとAndroidManifestのみとなる.xmlで
ブロードキャスト受信機にはユーザインタフェースがありません.ただし、受信した情報に応答するactivityを起動したり、NotificationManagerでユーザーに通知したりすることができます.通知は、バックライトの点滅、振動、音声の再生など、多くの方法でユーザーの注意を引くことができます.
MainActivity.java:
package com.demo.broadcast;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
* @ClassName: MainActivity
* @Description: Broadcast demo
* @author chenzheng
* @date 2014-9-4 10:15:05
*/
public class MainActivity extends Activity implements OnClickListener{
private Button sendStaticBtn;
private Button sendDynamicBtn;
private static final String STATICACTION = "com.demo.broadcast.static";
private static final String DYNAMICACTION = "com.demo.broadcast.dynamic";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendStaticBtn = (Button) findViewById(R.id.send_static);
sendDynamicBtn = (Button) findViewById(R.id.send_dynamic);
sendStaticBtn.setOnClickListener(this);
sendDynamicBtn.setOnClickListener(this);
}
@Override
protected void onStart() {
super.onStart();
Log.e("MainActivity", " ");
//
IntentFilter filter_dynamic = new IntentFilter();
filter_dynamic.addAction(DYNAMICACTION);
registerReceiver(dynamicReceiver, filter_dynamic);
}
private BroadcastReceiver dynamicReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("MainActivity", " ");
if(intent.getAction().equals(DYNAMICACTION)){
String msg = intent.getStringExtra("msg");
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
};
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.send_static:
Log.e("MainActivity", " ");
Intent intent1 = new Intent();
intent1.setAction(STATICACTION);
intent1.putExtra("msg", " !");
sendBroadcast(intent1);
break;
case R.id.send_dynamic:
Log.e("MainActivity", " ");
Intent intent2 = new Intent();
intent2.setAction(DYNAMICACTION);
intent2.putExtra("msg", " !");
sendBroadcast(intent2);
break;
default:
break;
}
}
}
StaticReceiver.java:
package com.demo.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
/**
* @ClassName: StaticReceiver
* @Description:
* @author chenzheng
* @date 2014-9-4 11:09:53
*/
public class StaticReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("MainActivity", " ");
String msg = intent.getStringExtra("msg");
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.demo.broadcast"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- -->
<receiver android:name=".StaticReceiver" >
<intent-filter>
<action android:name="com.demo.broadcast.static" />
</intent-filter>
</receiver>
<!-- -->
<receiver android:name=".SystemReceiver" >
<intent-filter>
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="hello" />
<Button
android:id="@+id/send_static"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=" " />
<Button
android:id="@+id/send_dynamic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=" " />
</LinearLayout>