android - 連絡先 - 電話の発信と管理を許可しますか




通知からの意図には追加料金がありません (4)

これは一般的な問題であると思われ、私はすでに見つけられたすべての関連する質問を行った: 活動は新しい意図を拾っていない余分なデータ(整数)がアンドロイドの通知意図で送られないのはなぜですか? 通知は古いインテントエクストラを渡します通知にインテント を追加することはできませんアンドロイド保留中のインテント通知の問題です。 それでもこれを理解することはできません。

問題は同じです。 私はいくつかの余分な情報を運ぶPendingIntentとの通知を設定し、私は反対側にそれを取得しません。

通知を生成するコードは次のとおりです。

Notification notification = new Notification(R.drawable.icon, getResources().getString(R.string.notification_ticker), System.currentTimeMillis());
notification.flags = Notification.FLAG_AUTO_CANCEL | Notification.FLAG_ONLY_ALERT_ONCE;

Intent start_test = new Intent(this, MyActivity.class);
start_test.putExtra("start_test", true);
start_test.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

PendingIntent pi = PendingIntent.getActivity(this, (int) System.currentTimeMillis(), start_test, PendingIntent.FLAG_CANCEL_CURRENT);
notification.setLatestEventInfo(this, getResources().getString(R.string.notification_title), getResources().getString(R.string.notification_content, expired), pi);
nm.notify(NOTIFICATION_ID, notification);

そして反対側に:

boolean start_test=getIntent().getBooleanExtra("start_test", false);

バンドルは実際には存在しません(getExtras()はnullを返します)。

私はPendingIntent.getActivityFLAG_UPDATE_CURRENTFLAG_CANCEL_CURRENTFLAG_ONE_SHOT )のために異なるフラグをPendingIntent.getActivity FLAG_UPDATE_CURRENT 、助けられたものはありません。

コードに示されているように、私はgetCurrentMillisを使ってrequestIDの変更を確認します....

また、MyActivityでは、 onCreateonNewIntentonNewIntentれないことがわかりました。 onResumeのみです。 FLAG_ACTIVITY_NEW_TASKが設定されていても...?

私は何か非常に単純なものを逃しています


  1. 必要でない場合は、マニフェスト内のアクティビティを単一のタスクとして設定しないでください。 次の操作ができる場合は、この行を省略するか、singleTopに変更します。

      android:launchMode="singleTask”
    
  2. 単一のタスクが必要な場合は、保留中のインテントセットフラグに:インテント。 FLAG_ACTIVITY_NEW_TASK | 意図。 FLAG_ACTIVITY_CLEAR_TASKおよびPendingIntent。 FLAG_CANCEL_CURRENT

    resultIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |Intent.FLAG_ACTIVITY_CLEAR_TASK);
    pIntent = PendingIntent.getActivity(context, 0, resultIntent,    PendingIntent.FLAG_CANCEL_CURRENT );
    
  3. 1つのタスクがある場合 - onNewIntent()内のアクティビティ内の追加情報をsetIntent(intent)でリセットします

    protected void onNewIntent(Intent intent) {
           setIntent(intent);
           ... 
     }
    

あなたは次のような意図でエクストラを送ることができます

PendingIntent contentIntent ;
Intent intent = new Intent(this,TestActivity.class);
intent.putExtra("extra","Test");
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);

stackBuilder.addParentStack(ArticleDetailedActivity.class);

contentIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);

テストアクティビティクラスでインテントの特別な値を取得するには、次のコードを記述する必要があります。

Intent intent = getIntent();
 String extra = intent.getStringExtra("extra") ;

私はこのようなものを使った

Intent myIntent = new Intent(context, DoSomething.class);
 PendingIntent pendingIntent = PendingIntent.getActivity(
        context, 
        0, 
        myIntent, 
        Intent.FLAG_ACTIVITY_NEW_TASK);

完全な例をhere確認してください


私は保留中のインテントにPendingIntent.FLAG_UPDATE_CURRENTフラグを追加しました。それは私のために働き始めました(インテントのすべてのフラグをスキップしました)。

サンプルコード:

PendingIntent pendIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);




android-notifications