Android四大コンポーネントのBroadcastReceiver学習
5072 ワード
一、BroadcastReceiver概要
1.BroadcastReceiverはAndroidの4つのコンポーネントの1つです.一般的には、インベントリファイルに静的登録を行います.ただし、ブロードキャスト受信者のみがjavaコードに動的に登録できる2.BroadcastReceiverはブロードキャストを受信するためのコンポーネントであり、コンポーネントとコンポーネントの間で通信するために使用され、アプリケーションにまたがって伝えることができる3.ブロードキャストの送信適用の場合:送信周波数が低い場合に使用され、データ量が小さい場合に使用される.intentはあまり大きなデータを携帯できないためである.
二、受信ブロードキャスト2.1静的登録ブロードキャスト受信者
1.リストファイルに配置する2.静的に登録されたブロードキャストのプログラムを1回実行した後も、以降はブロードキャスト受信の状態を維持することができ、対応するブロードキャストがあればそのブロードキャスト情報を受信することができる
2.2ブロードキャスト受信者の動的登録動的に登録するブロードキャストは、プログラムの実行中にのみブロードキャスト を受信することができる.まず、ブロードキャストに伴うintentのデータ2.2を取得してintent.getAction()が所望のactionと等しいかどうかを判断するonReceive()メソッドを実装する自己受信クラスextend BroadcastReceiverクラス2.1を記述する.説明状態変更2.2.2ネットワークマネージャオブジェクトに従って対応するネットワーク状態を得る2.2.3対応する状態でhandlerを使用してメッセージを送信する3.登録ブロードキャストを書く方法3.1 newカスタムブロードキャスト受信クラスオブジェクト3.2 new 1 IntentFilter.addAction(ConnectivityManagement.CONNECTIVE_ACTION)3.4 registerReceiver(ブロードキャスト受信クラスオブジェクト、filter);登録する 登録ブロードキャストActivity初期化時に登録ブロードキャスト対応の方法を書き、ブロードキャストの登録を完了する5.特定の場所で登録を解除する必要がある5.1 registerReceiverはContextWrapperクラスのメソッドであり、ActivityとServiceはいずれもContextWrapperを継承しているので直接呼び出すことができ、実際のアプリケーションではActivityとServiceにBroadを登録しているcastReceiver、このActivityまたはServiceが破棄された場合は、ブロードキャストの登録が解除されていない場合は、システムは、登録を解除することを忘れたことを示す異常を報告します.5.2一般的にページ破棄時にunregisterReceiver(カスタムブロードキャストクラスのオブジェクト)に接触して登録します.6.リスニングネットワークのインスタンスコード
2.3放送受信者優先度についての説明
1.静的コードブロックで定義する2.動的javaコード設定filter.setPriority(…)3.優先度の値が大きいほど優先度が高くなる3.1ネット上でpriorityの最大値は1000と言いますが、2147483647 3.2優先度の範囲は-2114748647から2147483647で、ちょうどその長さ範囲はIntegerタイプデータの最大値4294967296(2の32乗)です
三、放送を送る
3.1通常放送(無秩序放送)1.無秩序放送は複数の受信者にとって完全に非同期であり、通常は各受信者が待つことなく放送を受信し、受信者間では影響を及ぼさないが、このような無秩序放送では、受信者は放送を終了することができず、すなわち他の受信者の受信動作を阻止することができない2.sendBroadcast(intent)Intent intent=new Intent("......")intent.putExtra("xxx","xxx")sendBroadcast(intent);3.遅延できない4.ブロックできない
3.2秩序放送
1.優先度の高い受信者に送信されるたびに、優先度の高い受信者によって優先度の低い受信者に伝播され、優先度の高い受信者はこの放送を終了する能力があり、優先度は受信者登録時に設定(静的および動的)することができる2.setOrderdBroadcast(intent,permission)permissionは一般的にnullであり、追加の権限は必要ないことを示している.空でなければ、すべての受信者にこの権限が必要である.3.遅延可能である.4.ブロック方法abortBroadcast();//受信者のOnReceive()でブロックできる
最後に著者は、これは私が書いた最初の文章で、あまり使えない感じがして、書くのが間違っています.指摘を歓迎します.
1.BroadcastReceiverはAndroidの4つのコンポーネントの1つです.一般的には、インベントリファイルに静的登録を行います.ただし、ブロードキャスト受信者のみがjavaコードに動的に登録できる2.BroadcastReceiverはブロードキャストを受信するためのコンポーネントであり、コンポーネントとコンポーネントの間で通信するために使用され、アプリケーションにまたがって伝えることができる3.ブロードキャストの送信適用の場合:送信周波数が低い場合に使用され、データ量が小さい場合に使用される.intentはあまり大きなデータを携帯できないためである.
二、受信ブロードキャスト2.1静的登録ブロードキャスト受信者
1.リストファイルに配置する2.静的に登録されたブロードキャストのプログラムを1回実行した後も、以降はブロードキャスト受信の状態を維持することができ、対応するブロードキャストがあればそのブロードキャスト情報を受信することができる
2.2ブロードキャスト受信者の動的登録
public class NetBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
int netMobile = NetUtil.getNetWorkState(context);
if (netMobile == 1) {
handler.sendEmptyMessage(500);
// Toast.makeText(LiveActivity.this, " ", Toast.LENGTH_SHORT).show();
} else if (netMobile == 0) {
// Toast.makeText(LiveActivity.this, " ", Toast.LENGTH_SHORT).show();
handler.sendEmptyMessage(500);
} else if (netMobile == -1) {
handler.sendEmptyMessage(501);
// Toast.makeText(LiveActivity.this, " , ", Toast.LENGTH_SHORT).show();
}
}
}
}
/**
*
*/
private static final int NETWORK_NONE = -1;
/**
*
*/
private static final int NETWORK_MOBILE = 0;
/**
*
*/
private static final int NETWORK_WIFI = 1;
public static int getNetWorkState(Context context) {
//
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) {
if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) {
return NETWORK_WIFI;
} else if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE)) {
return NETWORK_MOBILE;
}
} else {
return NETWORK_NONE;
}
return NETWORK_NONE;
}
@SuppressLint("HandlerLeak")
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 500:
netTag = 1;
break;
case 501:
netTag = 2;
break;
}
}
};
// netTag , ```
/**
*
*/
private void registBroadcast() {
receiver = new NetBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(receiver, filter);
}
2.3放送受信者優先度についての説明
1.静的コードブロックで定義する2.動的javaコード設定filter.setPriority(…)3.優先度の値が大きいほど優先度が高くなる3.1ネット上でpriorityの最大値は1000と言いますが、2147483647 3.2優先度の範囲は-2114748647から2147483647で、ちょうどその長さ範囲はIntegerタイプデータの最大値4294967296(2の32乗)です
三、放送を送る
3.1通常放送(無秩序放送)1.無秩序放送は複数の受信者にとって完全に非同期であり、通常は各受信者が待つことなく放送を受信し、受信者間では影響を及ぼさないが、このような無秩序放送では、受信者は放送を終了することができず、すなわち他の受信者の受信動作を阻止することができない2.sendBroadcast(intent)Intent intent=new Intent("......")intent.putExtra("xxx","xxx")sendBroadcast(intent);3.遅延できない4.ブロックできない
3.2秩序放送
1.優先度の高い受信者に送信されるたびに、優先度の高い受信者によって優先度の低い受信者に伝播され、優先度の高い受信者はこの放送を終了する能力があり、優先度は受信者登録時に設定(静的および動的)することができる2.setOrderdBroadcast(intent,permission)permissionは一般的にnullであり、追加の権限は必要ないことを示している.空でなければ、すべての受信者にこの権限が必要である.3.遅延可能である.4.ブロック方法abortBroadcast();//受信者のOnReceive()でブロックできる
最後に著者は、これは私が書いた最初の文章で、あまり使えない感じがして、書くのが間違っています.指摘を歓迎します.