AlarmManagerに別Intentとして認識させる

AlarmManagerに別Intentとして認識させる方法です。ここのURLの内容とかぶるのですが、動かなくて悔しかったので、別の方法でやっています。

やりたいこと

Intentを定期的に送信してBroadcastReceiverを起動したい。でも、複数タイマーで起動したいので、タイマーを上書きされると困る。だから、別Intentとして認識して欲しい。

方法としては、IntentのDataに別のURIを入れてタイマーにセットします。別の文字列を用意しないといけないので、現在時間などが良いと思います。

Step.1(AndroidManifest.xmlに追記)

<receiver android:name="com.appspot.eikatou0.SampleReceiver" 
    android:label="@string/app_name">
<intent-filter android:priority="0">
<action android:name="ACTION"/>
<data android:scheme="SCHEME" />
<data android:host="HOSTNAME" />
</intent-filter>
</receiver>

Step.2(PendingIntentを作って、アラームに設定)

private void start() {
PendingIntent pendingIntent = makePendingIntent(context);
alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME,
,
1 * 60 * 1000, // 1min * 60sec * 1000
pendingIntent);
}
private PendingIntent makePendingIntent(Context context) {
Intent intent = new Intent();
intent.setAction("ACTION");
intent.setData(makeUri());
PendingIntent pendingIntent = PendingIntent
.getBroadcast(context, , intent, );
return pendingIntent;
}
private Uri makeUri() {
StringBuffer buffer = new StringBuffer();
long nowElapsedRealtime = SystemClock.elapsedRealtime();
buffer.append("SCHEME" + "://")
.append("HOSTNAME" + "/")
.append(Long.toString(nowElapsedRealtime));
Uri uri = Uri.parse(buffer.toString());
return uri;
}

参考

投稿日 2010年11月20日