36

この質問は、startActivityForResultでエクストラを取り戻すことを検討していたときの質問に何らかの形で関連していますが、今は別の課題に直面しています。

ProximityAlertsを受信するようにサブスクライブし、いくつかのExtraを含めるようにインテントを明示的に構築しました。しかし、私がサービスを受けたとき、エキストラはありません。

ここでの答えの後には、動作するコードがあります。

Intent intent = new Intent(this, PlacesProximityHandlerService.class);
intent.setAction("PlacesProximityHandlerService");
intent.putExtra("lat", objPlace.getLat());
intent.putExtra("lon", objPlace.getLon());
intent.putExtra("error_m", objPlace.getError()+ALERT_RANGE_IN_METERS);
PendingIntent sender=PendingIntent.getService(this, 0, intent, 0);
LocationUtils.addProximity(this, objPlace.getLat(), objPlace.getLon(),objPlace.getError()+ALERT_RANGE_IN_METERS, -1, sender);

ドキュメントにはparamと書かれていますPendingIntent to be sent for each location update

4

5 に答える 5

43

なんらかの理由で、たとえば setAction("foo") などのアクションを設定した場合にのみ、エクストラが配信されます。FLAG_ONE_SHOT を設定していない場合、CommonsWare が参照するものは、PendingIntent インスタンスを取得する場合にのみ適用されます。これは、PendingIntent.get... ファクトリ メソッドの requestCode 引数で修正できます。ドキュメントには現在使用されていないと書かれていますが、実際には PendingIntents を区別するときに考慮されます。

あなたの場合、ダミーのアクション文字列以外は何も設定する必要はありません。LocationManagerService は、近接アラート用にサブスクライブした PendingIntent を再利用し、電話がアラーム範囲に入るか範囲外になった場合にのみフラグを追加します。

于 2010-06-27T18:38:31.183 に答える
26

複数の未処理の がある場合は、基になるものがエクストラ以上に異なるPendingIntentsことを確認する必要があります。Intentsそうしないと、Android は最初の のPendingIntentために作成した最初のものを再利用し続け、常にIntentその最初Intentのエクストラを使用します。

たとえば、 -- を介して一意のアクションを追加できますが、ルーティングsetAction()は変更されません(コンポーネントを指定しているため) が、異なるものになります。IntentIntents

于 2010-06-27T17:58:46.077 に答える
2

重要なのは、呼び出す 前にエクストラと独自のアクションをインテントに設定することです

PendingIntent sender=PendingIntent.getService(this, 0, intent, 0);

上記を呼び出した後にエクストラとアクションをインテントに設定すると、機能しません。これは機能しません:

Intent intent;  
PendingIntent sender=PendingIntent.getService(this, 0,   
   intent=new Intent(this, PlacesProximityHandlerService.class), 0);  

intent.setAction("PlacesProximityHandlerService");  
intent.putExtra("lat", objPlace.getLat());  
于 2011-04-20T14:19:30.580 に答える