Androidでシステム放送を受信する方法について
7211 ワード
Androidには多くのシステムレベルのブロードキャストが内蔵されており、アプリケーションでこれらのブロードキャストを傍受することで様々なシステムのステータス情報を得ることができます.例えば、携帯電話の電源を入れた後に放送を出したり、バッテリーの電力量が変わった後に放送を出したり、時間や時間帯が変わったりして放送を出したりします.これらのブロードキャストを受信するには、ブロードキャスト受信機を使用する必要があります.
登録ブロードキャストの方式は2種類あり、コードに登録(動的登録)とAndroid Manifest.xmlに登録(静的登録).
1動的登録
ブロードキャスト受信機の作成:BroadcastReceiverから継承されるクラスを新規作成し、親クラスのonReceive()メソッドを書き換えます.ブロードキャストが到来するとonReceive()メソッドが実行され,このメソッドに具体的な論理が記述される.
MainActivityでは、BroadcastReceiverから継承され、onReceiveメソッドを書き換えた内部クラスNetworkChangeReceiverを定義しました.これにより,ネットワーク状態が変化すればonReceiveメソッドが実行される.
onReceiveメソッドでは、getSystemService()メソッドでConnectivityManagerのインスタンス(ネットワーク接続の管理)を取得し、現在ネットワークがあるかどうかを判断できます.
onCreateメソッドでは,ネットワーク状態の変化を傍受するためのIntentFilterインスタンスを作成した.ブロードキャスト受信機は、どのブロードキャストを傍受したいのか、ここで対応するActionを追加します.最後にregisterReceiverメソッドを呼び出して登録します.
動的登録のアナウンスは必ずonDestroy()メソッドでキャンセルしてくださいO(∩∩)O~
プログラムがユーザーにとって敏感な操作を行う必要がある場合は、プロファイルに権限を宣言する必要があります.そうしないと、プログラムは直接クラッシュします.システムのネットワーク状態にアクセスするには、まず権限を宣言してAndroidManifestを開く必要があります.xml :
プログラムを実行し、ホームキーを押す→Menuキーを押す→System settings→Data usageデータ使用詳細画面に入り、Cellular Dataを閉じるとネットワークが使用できないというメッセージが表示されます.
Cellular Dataを再度開くと、ネットワークで使用可能なヒントが表示されます.
2静的登録
動的に登録されたブロードキャスト受信機は、登録とログアウトを自由に制御することができ、柔軟性の面で大きな利点があるが、登録の論理はonCreate()メソッドに書かれているため、プログラムが起動した後にブロードキャストを受信しなければならないという欠点もある.
静的登録を使用すると、プログラムが起動せずにブロードキャストを受信することができる.
プログラムにシャットダウンブロードキャストを受信させ,このブロードキャストを受信するとonReceive()メソッドを実行する.Android Studioでは、パケット名→New→Other→Broadcast Receiver、ポップアップウィンドウを右クリックしてブロードキャスト受信機を作成できます.
ここではブロードキャスト受信機に名前を付け、Exportedはこのブロードキャストが本プログラム以外のブロードキャストを受信することを許可するかどうかを示し、Enabledはこのブロードキャスト受信機を有効にするかどうかを示す.
Finishをクリックして作成が完了したら、ShutdownReceiverのコードを変更します.
静的な放送受信機はAndroidManifestにある必要があります.xmlファイルに登録してこそ使用できますが、Android Studioを使用して作成されたブロードキャスト受信機を使用すると、自動的に登録が完了します.
すべての静的ブロードキャスト受信機はここに登録されています.
AndroidManifestにもxmlファイルを変更し、
注意:onReceive()メソッドに論理を追加したり、時間のかかる操作をしたりしないでください.ブロードキャスト受信機ではスレッドを開くことは許されません.onReceive()メソッドが長く実行され、終了しない場合、プログラムはエラーを報告します.したがって、ブロードキャスト受信機は、ステータスバーを作成する通知など、プログラムの他のコンポーネントを開くために主に使用される.
登録ブロードキャストの方式は2種類あり、コードに登録(動的登録)とAndroid Manifest.xmlに登録(静的登録).
1動的登録
ブロードキャスト受信機の作成:BroadcastReceiverから継承されるクラスを新規作成し、親クラスのonReceive()メソッドを書き換えます.ブロードキャストが到来するとonReceive()メソッドが実行され,このメソッドに具体的な論理が記述される.
public class MainActivity extends AppCompatActivity {
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);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(networkChangeReceiver);
}
/**
* “ ”
*/
private class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager manager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo=manager.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isAvailable()){
Toast.makeText(context," ",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(context," ",Toast.LENGTH_SHORT).show();
}
}
}
}
MainActivityでは、BroadcastReceiverから継承され、onReceiveメソッドを書き換えた内部クラスNetworkChangeReceiverを定義しました.これにより,ネットワーク状態が変化すればonReceiveメソッドが実行される.
onReceiveメソッドでは、getSystemService()メソッドでConnectivityManagerのインスタンス(ネットワーク接続の管理)を取得し、現在ネットワークがあるかどうかを判断できます.
onCreateメソッドでは,ネットワーク状態の変化を傍受するためのIntentFilterインスタンスを作成した.ブロードキャスト受信機は、どのブロードキャストを傍受したいのか、ここで対応するActionを追加します.最後にregisterReceiverメソッドを呼び出して登録します.
動的登録のアナウンスは必ずonDestroy()メソッドでキャンセルしてくださいO(∩∩)O~
プログラムがユーザーにとって敏感な操作を行う必要がある場合は、プロファイルに権限を宣言する必要があります.そうしないと、プログラムは直接クラッシュします.システムのネットワーク状態にアクセスするには、まず権限を宣言してAndroidManifestを開く必要があります.xml :
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
プログラムを実行し、ホームキーを押す→Menuキーを押す→System settings→Data usageデータ使用詳細画面に入り、Cellular Dataを閉じるとネットワークが使用できないというメッセージが表示されます.
Cellular Dataを再度開くと、ネットワークで使用可能なヒントが表示されます.
2静的登録
動的に登録されたブロードキャスト受信機は、登録とログアウトを自由に制御することができ、柔軟性の面で大きな利点があるが、登録の論理はonCreate()メソッドに書かれているため、プログラムが起動した後にブロードキャストを受信しなければならないという欠点もある.
静的登録を使用すると、プログラムが起動せずにブロードキャストを受信することができる.
プログラムにシャットダウンブロードキャストを受信させ,このブロードキャストを受信するとonReceive()メソッドを実行する.Android Studioでは、パケット名→New→Other→Broadcast Receiver、ポップアップウィンドウを右クリックしてブロードキャスト受信機を作成できます.
ここではブロードキャスト受信機に名前を付け、Exportedはこのブロードキャストが本プログラム以外のブロードキャストを受信することを許可するかどうかを示し、Enabledはこのブロードキャスト受信機を有効にするかどうかを示す.
Finishをクリックして作成が完了したら、ShutdownReceiverのコードを変更します.
public class ShutdownReceiver extends BroadcastReceiver {
public ShutdownReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, " ", Toast.LENGTH_LONG).show();
}
}
静的な放送受信機はAndroidManifestにある必要があります.xmlファイルに登録してこそ使用できますが、Android Studioを使用して作成されたブロードキャスト受信機を使用すると、自動的に登録が完了します.
<receiver
android:name=".ShutdownReceiver"
android:enabled="true"
android:exported="true">receiver>
すべての静的ブロードキャスト受信機はここに登録されています.
AndroidManifestにもxmlファイルを変更し、
ラベルに対応するActionを追加します.<receiver
android:name=".ShutdownReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
intent-filter>
receiver>
注意:onReceive()メソッドに論理を追加したり、時間のかかる操作をしたりしないでください.ブロードキャスト受信機ではスレッドを開くことは許されません.onReceive()メソッドが長く実行され、終了しない場合、プログラムはエラーを報告します.したがって、ブロードキャスト受信機は、ステータスバーを作成する通知など、プログラムの他のコンポーネントを開くために主に使用される.