アプリケーションのアラームをスケジュールしました。
アラーム時刻に達するとトリガーされるブロードキャストレシーバーを実装しました。
ブロードキャストレシーバーを手動で呼び出して、コードを2回複製せずにonReceiveメソッド内でコードを実行する方法。
ユーティリティシングルトンコールでコードを使用し、どこからでもutilクラスインスタンスを使用してそのメソッドを呼び出すことを考えました。
しかし、そのonReceiveメソッドを直接呼び出す他の方法、または問題のあるインテントをブロードキャストすることです。
Android:exported = "false" //マニフェストファイルで定義するときのレシーバーの追加パラメーター。
もう1つの質問は、エクスポートされたパラメーターの意味です。これを理解するのを手伝ってください。
通知するために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);
以下は、よりタイプセーフなソリューションです。
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);
ブロードキャストレシーバーを手動で呼び出して、コードを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:アクションを使用してこのブロードキャストレシーバーを起動できない他のアプリケーション