web-dev-qa-db-ja.com

Android-ブロードキャストレシーバーをトリガーしてonReceive()メソッドを呼び出す方法は?

アプリケーションのアラームをスケジュールしました。

アラーム時刻に達するとトリガーされるブロードキャストレシーバーを実装しました。

ブロードキャストレシーバーを手動で呼び出して、コードを2回複製せずにonReceiveメソッド内でコードを実行する方法。

ユーティリティシングルトンコールでコードを使用し、どこからでもutilクラスインスタンスを使用してそのメソッドを呼び出すことを考えました。

しかし、そのonReceiveメソッドを直接呼び出す他の方法、または問題のあるインテントをブロードキャストすることです。

Android:exported = "false" //マニフェストファイルで定義するときのレシーバーの追加パラメーター。

もう1つの質問は、エクスポートされたパラメーターの意味です。これを理解するのを手伝ってください。

17
M Vignesh

通知するためにAndroid OSでフィルタリングする必要があるactionに言及する必要があります。つまり、マニフェストファイル内、

<receiver
Android:name="com.example.MyReceiver"
Android:enabled="true" >
<intent-filter>
    <action Android:name="com.example.alarm.notifier" />//this should be unique string as action
</intent-filter>

そして

ブロードキャストレシーバーのonReceiveメソッドを呼び出したいときはいつでも、

Intent intent = new Intent();
intent.setAction("com.example.alarm.notifier");
sendBroadcast(intent);
7
Mehul Joisar

以下は、よりタイプセーフなソリューションです。

  • AndroidManifest.xml

    <receiver Android:name=".CustomBroadcastReceiver" />
    
  • CustomBroadcastReceiver.Java

    public class CustomBroadcastReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            // do work
        }
    }
    
  • *.Java

    Intent i = new Intent(context, CustomBroadcastReceiver.class);
    context.sendBroadcast(i);
    
6
Eric

ブロードキャストレシーバーを手動で呼び出して、コードを2回複製せずにonReceiveメソッド内でコードを実行する方法。

AndroidManifest.xmlで追加したBroadcastReceiverと同じアクションを使用してsendBroadcastを起動します。

Intent intent=new Intent(CUSTOM_ACTION_STRING);
// Add data in Intent using intent.putExtra if any required to pass 
sendBroadcast(intent);

そのAndroid:exportedパラメーターとは

Android:exported docのように:ブロードキャストレシーバーがアプリケーション外のソースからメッセージを受信できるかどうか—可能であれば「true」、そうでない場合は「false」

次の場合の意味:

Android:exported = true:アクションを使用してこのブロードキャストレシーバーを起動できる他のアプリケーション

Android:exported = false:アクションを使用してこのブロードキャストレシーバーを起動できない他のアプリケーション

2