ユーザーが指定した時刻にファイルを更新するサービスを後で呼び出すために、アラーム マネージャを使用しています。そのメカニズムはうまく機能します。私が今しなければならないことは、異なる時間に異なることをする必要がある異なる意図を持つ複数のアラームがあるため、アラームがそれを呼び出したサービスに渡すことです。
バンドルでエクストラを渡す方法は理解していますが、サービスでは機能しないようです。このように何かを渡すことはできませんnull
。アクティビティからサービスに渡されたものを取得し続けます。
1 つのアラームのアクティビティ コードは次のとおりです。
Intent myIntent = new Intent(this, TimerService.class);
Bundle bundle = new Bundle();
bundle.putString("extraData", "FIRST_ALARM");
myIntent.putExtras(bundle);
PendingIntent AmPendingIntent = PendingIntent.getService(this, 0, myIntent, 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, Time2fire, fONCE_PER_DAY, AmPendingIntent);
サービスコード:
super.onStart(intent, startId);
String bundleFromActivity = intent.getStringExtra("extraData");
私はたくさん検索しましたが、私が見たものは何も機能していません。
わかりましたので、これを次のように変更しました: from my activity
Intent intent = new Intent(getApplicationContext(), TimerService.class);
intent.putExtra("someKey", "hifromalarmone");
PendingIntent myIntent = PendingIntent.getService(getApplicationContext(),0,intent, 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, Time2fire, fONCE_PER_DAY, myIntent);
私のサービスから、onstart は非推奨であり、onstartcommand を使用する必要があることがわかりました。
public int onStartCommand(Intent intent, int startId, int flags)
{
super.onStartCommand(intent, flags, startId);
Bundle extras = intent.getExtras();
String data1 = extras.getString("somekey");// intent.getStringExtra("someKey");
return START_STICKY;
}
そして何を推測します....それでもnullを返します。ここで何が欠けていますか??? 正しいものを渡していないようです。
わかりました、それで私はそれを理解しました...多くの掘り下げと少しの幸運の後、元の意図がすでにシステムに登録されているため、意図内のデータを更新するだけでは十分ではないことに気付きました。そのため、新しい渡されたデータで更新されることはありませんでした。ここに鍵がありました (誰かがこれが役に立つことを願っています) 次のコード行は、更新する必要があるものです PendingIntent AmPendingINtent = PendingIntent.getService(this,0,myIntent,0); これが最後にシステムに登録されてから最後の 0 を別のものに更新すると、バンドルを更新して渡すという意図が強制されます。
PendingIntent AmPendingINtent = PendingIntent.getService(this,0,myIntent,654654);// このようなもの。