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日