0

ユーザーが指定した時刻にファイルを更新するサービスを後で呼び出すために、アラーム マネージャを使用しています。そのメカニズムはうまく機能します。私が今しなければならないことは、異なる時間に異なることをする必要がある異なる意図を持つ複数のアラームがあるため、アラームがそれを呼び出したサービスに渡すことです。

バンドルでエクストラを渡す方法は理解していますが、サービスでは機能しないようです。このように何かを渡すことはできません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);// このようなもの。

4

1 に答える 1

0

最初のシナリオでは

putExtrasの使用:

 myIntent.putExtras(bundle);    

putExtraを使用する必要があります:

myIntent.putExtra(bundle);    

putExtras は、クロスアプリの意図など、他の目的のためのものです


2番目のシナリオでは、次を使用してキーを配置します。

 "someKey"

次に、次を使用して取得しようとします。

 "somekey"

それらはあなたのnullを引き起こすのと同じではありません。


恥知らずなプラグインで、私は通知とサービスの非常にうまく構築されたきれいな OO の例をここに持っています: http://blog.blundell-apps.com/notification-for-a-user-chosen-time/

于 2012-05-11T16:48:57.727 に答える