Android学習ノート--ブロードキャスト(Broadcast)
10976 ワード
1、Android放送分類
Androidのブロードキャストタイプは、標準ブロードキャストと秩序ブロードキャストの2種類に分けられます.
標準ブロードキャスト:非同期ブロードキャストで、ブロードキャストが発行されると、登録されたすべてのブロードキャスト受信機が同時にブロードキャストを受信します.例えば、地下鉄の音声放送をしたり、列車員(放送者)が音声放送(放送送信)をしたりすると、すべての乗客(登録して放送を受信するプログラム)が同時に音声を聞くことができ、前後の順序を問わない.Androidシステムには、このようなブロードキャストが起動完了、電力量の変化などがある.
秩序放送:同期送信、放送送信後、登録された放送受信機の優先度順に放送され、優先度の範囲は-1000~1000であり、数字が大きいほど優先度が高くなり、最初にこの放送を受信し、受信機の優先度はandroid:priorityによって設定される.例えば、リレーでは、リレー棒は放送の内容で、選手が順番に伝える必要があります.優先度の高い選手の位置は前で、優先度のある選手の位置は前で、選手のリレーの過程は放送の過程です.もちろん、ある選手が「ああ、このバトンはドアの栓になるのがいい.ポケットに入れて家に帰ったら、後ろの選手は自然にこの放送を受け取ることができない」と思っていたら.Androidシステムの中のメールはこのような形式で放送を行い、私たちの携帯電話にインストールされているXX衛士、XX安全マスターのメールブロック機能は自分がメールを受信する優先度をシステムのメールアプリケーションより高くし、メールをブロックする目的を達成することです.
2、ブロードキャスト受信(BroadcatReceiver)
ブロードキャストを受信する前に、それらのブロードキャストに関心を持つ登録が必要です.登録方法は2種類あり、動的登録と静的登録があります.
2.1動的登録
動的検出とは、プログラムの実行開始後に登録受信を行い、プログラムが起動していない状態で、このブロードキャストを受け付けない、
次に、ネットワーク状態の検出を例に、そのコアコードを実現する
1、放送受信機の実現
2、ブロードキャスト受信機の登録
Androidのブロードキャストタイプは、標準ブロードキャストと秩序ブロードキャストの2種類に分けられます.
標準ブロードキャスト:非同期ブロードキャストで、ブロードキャストが発行されると、登録されたすべてのブロードキャスト受信機が同時にブロードキャストを受信します.例えば、地下鉄の音声放送をしたり、列車員(放送者)が音声放送(放送送信)をしたりすると、すべての乗客(登録して放送を受信するプログラム)が同時に音声を聞くことができ、前後の順序を問わない.Androidシステムには、このようなブロードキャストが起動完了、電力量の変化などがある.
秩序放送:同期送信、放送送信後、登録された放送受信機の優先度順に放送され、優先度の範囲は-1000~1000であり、数字が大きいほど優先度が高くなり、最初にこの放送を受信し、受信機の優先度はandroid:priorityによって設定される.例えば、リレーでは、リレー棒は放送の内容で、選手が順番に伝える必要があります.優先度の高い選手の位置は前で、優先度のある選手の位置は前で、選手のリレーの過程は放送の過程です.もちろん、ある選手が「ああ、このバトンはドアの栓になるのがいい.ポケットに入れて家に帰ったら、後ろの選手は自然にこの放送を受け取ることができない」と思っていたら.Androidシステムの中のメールはこのような形式で放送を行い、私たちの携帯電話にインストールされているXX衛士、XX安全マスターのメールブロック機能は自分がメールを受信する優先度をシステムのメールアプリケーションより高くし、メールをブロックする目的を達成することです.
2、ブロードキャスト受信(BroadcatReceiver)
ブロードキャストを受信する前に、それらのブロードキャストに関心を持つ登録が必要です.登録方法は2種類あり、動的登録と静的登録があります.
2.1動的登録
動的検出とは、プログラムの実行開始後に登録受信を行い、プログラムが起動していない状態で、このブロードキャストを受け付けない、
次に、ネットワーク状態の検出を例に、そのコアコードを実現する
1、放送受信機の実現
/* BroadcastReceiver*/
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
/*do something*/
}
}
2、ブロードキャスト受信機の登録
public class MainActivity extends Activity {
…
private IntentFilter intentFilter;
private NetworkChangeReceiver networkChangeReceiver;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); /* */ intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); /* */ registerReceiver(networkChangeReceiver, intentFilter); }
…
}
3、Android Mainfest.xmlで申請を宣言してネットワークステータス権限を取得<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> /* */ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ... </manifest>
4、放送受信機のログアウトpublic class MainActivity extends Activity { … @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } … }
2.2静的登録
静的登録とは、プログラムが実行されていない場合にもブロードキャストを受信し、プログラムを起動することを意味する.
1、放送受信機を実現する(単独でファイルを構築する必要がある)/* BroadcastReceiver*/ class NetworkChangeReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { /*do something*/ } }
2、Android Mainfest.xmlでのネットワークステータスの取得申請の宣言とブロードキャスト受信機の宣言<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> /* */ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ... <application> ... /* */ <receiver android:name=".NetworkChangeReceiver"> <intent-filter android:priorit="1000"> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver> ... </application> </manifest>
3、ブロードキャストの送信(sendBroadcast)
3.1標準放送の送信
標準ブロードキャストコードの送信Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); intent.putExtra(“XLZH”, “this is a user-defined broadcast!”)
sendBroadcast(intent);
com.example.broadcast.MY_BROADCASTはカスタムブロードキャストで、他のアプリケーションがブロードキャストをリスニングする必要がある場合は、動的または静的登録が必要です.
3.1秩序放送の送信
秩序化されたブロードキャストコードの送信Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST"); intent.putExtra(“XLZH”, “this is a user-defined broadcast!”)
sendOrderedBroadcast(intent);
4、ローカル放送(LocalBroadcast)
ブロードキャストにユーザ付きの機密メッセージがある場合、他のアプリケーションをリスニングしたくない場合は、ローカルブロードキャストを使用して、アプリケーション内でのみブロードキャストおよび受信操作を行うことができます.
1、放送受信機の実現/* BroadcastReceiver*/ class LocalBroadcastReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { /*do something*/ } }
2、ブロードキャスト受信機の登録IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST"); LocalBroadcastReceiver localReceiver = new LocalBroadcastReceiver(); localBroadcastManager.registerReceiver(localReceiver, intentFilter);
3、ローカル放送の送信LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(this); Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST"); intent.putExtra("XLZH", "This is a localBroadcast!"); localBroadcastManager.sendBroadcast(intent);
com.example.broadcasttest.LOCAL_BROADCASTはカスタムローカルブロードキャストであり、標準ブロードキャストとは異なりLoaclBroadcastManagerのInstance()メソッド取得インスタンスを呼び出し、カスタム登録ブロードキャスト受信機を送信する際にそれぞれ使用するLocalBroadcastManagerのsendBroadcast()メソッドとregisterReceiver()メソッドを送信する必要がある
またローカルブロードキャストは動的登録のみで、静的登録はできません