【Android】Androidで放送される基本的な使い方
14302 ワード
システム放送を受ける
動的登録
JavaコードでIntentFilterを指定し、何かの放送を傍受したい場合は対応するActionを追加します.動的に登録されたブロードキャストは、unregisterReceiver()メソッドを呼び出して登録をキャンセルする必要があります.
次に動的登録でネットワークの変化を傍受する
AndroidManifestでxmlに権限を追加するには、次の手順に従います.
ActivityのJavaコード:
静的登録
動的登録はプログラムが起動してからブロードキャストを受信する必要があり,静的ブロードキャストはこのショートボードを補う.AndroidManifestでIntentReceiverを指定すると、プログラムが起動していない場合にブロードキャストを受信できます.
以下、静的登録で起動放送を受け付けます
新しいブロードキャスト受信機
AndroidManifestでxmlでの権限の追加、ブロードキャスト受信機の登録、アクションの追加
ブロードキャストの送信
標準放送の送信
受信機のJavaコード:
受信機の登録コード:
ActivityのJavaコード
秩序放送を送信
秩序化されたブロードキャストを送信する方法:
ブロードキャスト受信機の前後順をAndroidManifestに設定する.xmlのreceiverのintent-filterのpriorityプロパティ、優先度オプション値:-1000~1000
ローカルブロードキャストの使用
主にLocalBroadcastManagerでブロードキャストを管理し、ブロードキャスト受信機の送信と登録方法は以下の通りである. LocalBroadcastManager.getInstance()取得例 ~.registerReceiver()登録ブロードキャスト ~.sendBroadcast()送信ブロードキャスト ~.unregisterReceiver()放送キャンセル 注意事項:ローカルブロードキャストは静的登録によって受信ことができず、システムグローバルブロードキャストよりも効率的である .ブロードキャストでアクティビティを開始するにはFLAG_を追加する必要がありますACTIVITY_NEW_TASKのマーク ブロードキャストでAlertDialogをポップアップするにはTYPE_を追加する必要がありますSYSTEM_ALERT
Javaコード:
動的登録
JavaコードでIntentFilterを指定し、何かの放送を傍受したい場合は対応するActionを追加します.動的に登録されたブロードキャストは、unregisterReceiver()メソッドを呼び出して登録をキャンセルする必要があります.
次に動的登録でネットワークの変化を傍受する
AndroidManifestでxmlに権限を追加するには、次の手順に従います.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
ActivityのJavaコード:
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);
}
//
class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable()) {
Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
}
}
}
}
静的登録
動的登録はプログラムが起動してからブロードキャストを受信する必要があり,静的ブロードキャストはこのショートボードを補う.AndroidManifestでIntentReceiverを指定すると、プログラムが起動していない場合にブロードキャストを受信できます.
以下、静的登録で起動放送を受け付けます
新しいブロードキャスト受信機
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
}
}
AndroidManifestでxmlでの権限の追加、ブロードキャスト受信機の登録、アクションの追加
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.broadcasttest">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<receiver
android:name=".BootCompleteReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
intent-filter>
receiver>
application>
manifest>
ブロードキャストの送信
標準放送の送信
受信機のJavaコード:
public class MyBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();
}
}
受信機の登録コード:
<receiver
android:name=".MyBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.example.broadcasttest.MY_BROADCAST" />
intent-filter>
receiver>
ActivityのJavaコード
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");
sendBroadcast(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//
unregisterReceiver(networkChangeReceiver);
}
}
秩序放送を送信
秩序化されたブロードキャストを送信する方法:
sendOrderedBroadcast(intent, null);
ブロードキャスト受信機の前後順をAndroidManifestに設定する.xmlのreceiverのintent-filterのpriorityプロパティ、優先度オプション値:-1000~1000
android:priority="100"
ローカルブロードキャストの使用
主にLocalBroadcastManagerでブロードキャストを管理し、ブロードキャスト受信機の送信と登録方法は以下の通りである.
Javaコード:
public class MainActivity extends AppCompatActivity {
private IntentFilter intentFilter;
private LocalReceiver localReceiver;
private LocalBroadcastManager localBroadcastManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
localBroadcastManager = LocalBroadcastManager.getInstance(this);
//
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");
localReceiver = new LocalReceiver();
localBroadcastManager.registerReceiver(localReceiver, intentFilter);
//
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");
localBroadcastManager.sendBroadcast(intent);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//
localBroadcastManager.unregisterReceiver(localReceiver);
}
class LocalReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();
}
}
}