ブロードキャストインテントを受けとる

ブロードキャストインテントとは電源が接続されたときや端末の設定が変わった時などシステム全体に影響を及ぼすようなことが起きた時に自動で発信されるインテントのことです。

その一覧はIntentのリファレンスの「Standard Broadcast Actions」という項目に現在のところ14種類定義されています。

ブロードキャストの受け取りかた

ではアプリ側でこのブロードキャストをどう受け取るかというとBroadcastReceverをActivityやServiceクラスのなかで作り、onReceiveメソッドでブロードキャストインテントを受け取れます。

そのために初めにBroadcastReceiverを使ったクラスを作ります。

public class MyReceiver extends BroadcastReceiver
{
	@Override
	public void onReceive(Context context, Intent intent){}
}

そのクラスをAndroidManifest.xmlapplication要素以下に追加します。

<receiver android:name="com.xxx.myapp.MyReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_LOW" />
    </intent-filter>
</receiver>

例えばActivityクラスで電池の電量が変化されたときに呼ばれるACTION_BATTERY_CHANGEDというブロードキャストを受け取っているのが次のコードです。

public class MainActivity extends FragmentActivity 
{
    
    MyReceiver receiver;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        receiver = new MyReceiver()
        {
            @Override
            public void onReceive(Context context, Intent intent) 
            {
                Toast.makeText(context, "バッテリー残量変化", Toast.LENGTH_LONG).show();
            }
        };
        registerReceiver(receiver, filter);
            //レシーバーを登録
    }
    
    @Override
    public void onDestroy()
    {
        super.onDestroy();
        
        unregisterReceiver(receiver);
            //登録したレシーバーの解除
    }
}

registerReceiverメソッドでレシーバーを登録し、不要になったらunRegisterReceiverで解除しています。

上の例では1つだけしかブロードキャストのアクションを渡していませんが、次のように複数渡すこともできます。

        IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        filter.addAction(Intent.ACTION_TIME_TICK);
関連項目
プライバシーポリシー