[解決済み] PendingIntentがIntentのextrasを送らない
質問
私の場合
MainActicity
開始
RefreshService
を持つ
Intent
を持つ
boolean
という余分な
isNextWeek
.
私の
RefreshService
は
Notification
を生成し、それが私の
MainActivity
を開始します。
というように表示されます。
Log.d("Refresh", "RefreshService got: isNextWeek: " + String.valueOf(isNextWeek));
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.putExtra(MainActivity.IS_NEXT_WEEK, isNextWeek);
Log.d("Refresh", "RefreshService put in Intent: isNextWeek: " + String.valueOf(notificationIntent.getBooleanExtra(MainActivity.IS_NEXT_WEEK,false)));
pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
builder = new NotificationCompat.Builder(this).setContentTitle("Title").setContentText("ContentText").setSmallIcon(R.drawable.ic_notification).setContentIntent(pendingIntent);
notification = builder.build();
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(NOTIFICATION_REFRESH, notification);
ご覧のように
notificationIntent
には
boolean
余分な
IS_NEXT_WEEK
の値で
isNextWeek
に置かれる
PendingIntent
.
今クリックすると、この
Notification
をクリックすると、いつも
false
の値として
isNextWeek
の値を取得する方法です。
MainActivity
:
isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);
ログを表示します。
08-04 00:19:32.500 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity sent: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService got: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService put in Intent: isNextWeek: true
08-04 00:19:41.990 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity.onCreate got: isNextWeek: false
を直接起動すると
MainActivity
を
Intent
のように、ìsNextValue`を指定します。
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
はすべて正常に動作し、次のようになります。
true
と表示されます。
isNextWeek
は
true
.
が常に存在することをどう勘違いしたらいいのでしょうか?
false
の値があるのはなぜですか?
最新情報
これで問題が解決しました。 https://stackoverflow.com/a/18049676/2180161
引用元
私が思うに、インテントで変更されるのは エクストラであるため
PendingIntent.getActivity(...)
ファクトリーメソッドは は単に最適化として古いインテントを再利用しているのではないかということです。RefreshServiceで、試してみてください。
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
ご覧ください。
http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
アップデイト2
参照
の回答を参照してください。
を使用した方が良い理由
PendingIntent.FLAG_UPDATE_CURRENT
.
どのように解決するのですか?
PendingIntent.FLAG_CANCEL_CURRENT を使用することは、メモリを効率的に使用できないため、良い解決策ではありません。代わりに を使ってください。 .
こちらもご利用ください Intent.FLAG_ACTIVITY_SINGLE_TOP (アクティビティがすでに履歴スタックの最上位で実行されている場合、アクティビティは起動されません)。
Intent resultIntent = new Intent(this, FragmentPagerSupportActivity.class).
addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
resultIntent.putExtra(FragmentPagerSupportActivity.PAGE_NUMBER_KEY, pageNumber);
PendingIntent resultPendingIntent =
PendingIntent.getActivity(
this,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
では
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
int startPageNumber;
if ( savedInstanceState != null)
{
startPageNumber = savedInstanceState.getInt(PAGE_NUMBER_KEY);
//so on
これで動くはずです。
それでもまだ期待した動作にならない場合は、以下のように
void onNewIntent(Intent intent)
イベントハンドラを実装してください。そうすれば、アクティビティのために呼び出された新しいインテントにアクセスできます (これは単に getIntent() を呼び出すのと同じではありません。
@Override
protected void onNewIntent(Intent intent) {
int startPageNumber;
if (intent != null) {
startPageNumber = intent.getExtras().getInt(PAGE_NUMBER_KEY);
} else {
startPageNumber = 0;
}
}
関連
-
[android studio]com.android.ide.common.process.ProcessException: aaptの実行に失敗しました
-
GIF、Lottie、SVGA
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
android exception - aapt.exe has stopped working.
-
Android Nで報告されたエラーを解決する: android.os.FileUriExposedException: file:///storage/emulated/0/
-
[解決済み] Intentsを使用して、あるAndroid Activityから別のAndroid Activityにオブジェクトを送信するにはどうすればよいですか?
-
[解決済み] Androidでインテントから余分なデータを取得するにはどうすればよいですか?
-
[解決済み] メール送信インテント
-
[解決済み] AndroidのPendingIntentとは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
RuntimeException: アクティビティを開始できません ComponentInfo solution
-
最新のandroidプロジェクトディレクトリにあるarmeabi-v7aとarmeabiの具体的な意味とその違いを教えてください。
-
IllegalStateException。ArrayAdapter は、リソース ID が TextView である必要があります。
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
Google PlayデバイスはPlay保護機構の認証を受けていません。
-
エラータイプ 3 タイプエラー, Error: アクティビティクラス{}が存在しません。アクティビティ起動時のエラー 解決方法
-
Windowsのadbシェルでデータディレクトリにアクセスするとパーミッションが拒否される
-
アンドロイドのエリプサイズを使用する
-
Android Get set image.setImageResource(R.drawable.xxx) リソース
-
[解決済み】通知クリックからアクティビティにパラメータを送信する方法は?