使い方 - java android putextra




PendingIntentがIntentのカスタムExtras設定を返送しないのはなぜですか? (4)

キーは、コールする前に 、エキストラとユニークなアクションをインテントに設定することです

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

この質問は、startActivityForResultでエキストラ取得しようとしていたときの質問に関係していましたが、今は別の課題に直面しています。

私はProximityAlertsを受け取るように申し込みをしており、私は明示的に意図を構築していくつかのエクストラを追加しています。 しかし、私がサービスを受けると、エクストラはそこにはありません。

ここでの答えは作業コードです:

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

ドキュメントにはPendingIntent to be sent for each location update param PendingIntent to be sent for each location update


未処理の未払いのPendingIntentsが複数ある場合は、基礎となるPendingIntents分以上に異なることを確認する必要があります。 それ以外の場合は、最初のIntentのエクストラを常に使用して、最初のIntentに対して作成した最初のPendingIntentを再利用します。

たとえば、 setAction()を使用して独自のアクションを追加することができます。これは(コンポーネントを指定しているため) Intentルーティングを変更することはありませんが、 Intent異なるものにします。


私はこの問題を抱えていました。私が見つけた解決策は、それがなぜ機能するのか説明できませんでしたが、かなりシンプルでした。

最初は私の保留中の意図は次のようになりました。

     notificationIntent = new Intent(ctx, FragmentTabsPager.class);
     notificationIntent.setData(Uri.parse("content://com.sbs.mobile.workorder.WorkOrder/notes/"));
     notificationIntent.putExtra("NOTIFICATION", true);   
     notificationIntent.putExtra(WorkOrder.WorkOrderColumns.WORKORDERID, submessage);

このようなインテントを作成するとき、通知がクリックされたときにエキストラが渡されることはなく、エクストラマップは受信アクティビティで空になります。 私はnotificationIntentを初期化する行に以下の変更を加えました:

     notificationIntent = new Intent().setClass(ctx, FragmentTabsPager.class);

今では、エクストラが受信活動に投入されています。 繰り返しますが、なぜこれが機能するのか説明できませんが、問題は解決しました。


答えはどれも私のために働かなかった。 アクションを特定の文字列に設定するのは初めてですが、後で別のエキストラで同じ通知を使用すると機能しません。 setActionメソッドの文字列をランダムに生成した文字列に置き換えました。問題なく動作します。

intent.setAction(new Random().nextInt(50) + "_action");
  • あなたが通知をたくさん使うかもしれないと思うなら(異なるファイルをダウンロードするのと同じように)、 nextInt()大きな数値を渡してください。




extras