2012-05-10 14 views
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"); 

私は多くのことを検索しましたが、私が見たものは何も働いていません。私は今、そのONSTARTが廃止されて実現し、onstartcommand使用する必要があります私のサービス からの私の活動

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); 

から :OK

は今、私はこれにそれを変更しました。

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; 
} 

となり、まだ何かが...返されます。何が私はここで行方不明ですか?右に何かを渡していないように見えます。

私はそれを理解しました...多くの掘り出しと少しの幸運の後、自分の意図の中のデータを更新するだけでは、私の元の意図が既にシステムに登録されていたため、十分ではありませんでした。このように、私の新しい合格データは更新されませんでした。ここにキーがありました。(誰かが便利だと願っています) 次のコード行は更新する必要があります。 PendingIntent AmPendingINtent = PendingIntent.getService(this、0、myIntent、0); システムに最後に登録されてから最後の0を別のものに更新すると、意図を強制的に更新してバンドルに渡します。

PendingIntent AmPendingINtent = PendingIntent.getService(this、0、myIntent、654654); //このようなものです。あなたの最初のシナリオでは

+0

は、Androidのために、このJavaですか?いくつかの適切なタグの恩恵を受けるかもしれません。 – joshp

+0

が正しい。私はこの感謝のためにいくつかの他のタグを追加しました! – FirmwareEngineer

+0

ここで私のチュートリアルをチェックしたいと思うかもしれません:http://blog.blundell-apps.com/notification-for-a-user-chosen-time/私はブール値を余分にintentに送った – Blundell

答えて

0

あなたputExtrasを使用して:

myIntent.putExtras(bundle);  

あなたがputExtraを使用する必要があります。

myIntent.putExtra(bundle);  

putExtrasは、クロスアプリケーションインテントか何か

のように、いくつかの他の目的であります
その後、

"someKey" 

あなたは使用してそれを試してみて、取得する:あなたが使用してキーを入れて、あなたの2番目のシナリオでは

"somekey" 

彼らはあなたのヌルを引き起こして同じではありません。恥知らずなプラグで


私はここで、通知やサービスの非常にうまくアーキテクチャ・ときれいなOOの例があります。http://blog.blundell-apps.com/notification-for-a-user-chosen-time/

+1

ありがとう!私はこれに気づき、somekey/somekeyに変更しました。また、保留中のインテントの中にPendingIntent.FLAG_UPDATE_CURRENTを追加すると、修正されています。 – FirmwareEngineer

関連する問題