0

最近、私はこれらの2つの質問と、それぞれがそれぞれの対応する通知から文字列を取得する独自のアクティビティを持つ複数の通知を試みる問題を解決するために細心の注意を払っています。現在のソリューションは、一つのキーの問題を除いて動作しますほとんどの部分について通知テキストをアクティビティに送信します。問題

How to pass text from notification to another activity? How to send parameters from a notification-click to an activity?

: アプリケーションが開いていない、と私は2つの異なる通知を受信する場合。私は通知の詳細アクティビティを開くためにクリックします。アクティビティのテキストは正常に更新されます。しかし、同じアクティビティを維持しながら、私は2番目の通知をクリックし、何も起こりません。

アプリケーションが開いているとき、このソリューションは正常に動作します。 2つの異なる通知テキストビューを持つ2つの別個のインテントを開きます。アプリケーションが閉じられていて、最初の通知ビューの詳細アクティビティから抜け出し、2番目の通知ビューを開くと、ソリューションが正常に実行されます。

ご協力いただければ幸いです!ここで

が私のコードです:

MainActivityクラス

private NotificationManager notificationManager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
} 

public void setAlarm1(View view){ 
    Toast.makeText(getApplicationContext(),"Setting Alarm 5 seconds",Toast.LENGTH_SHORT).show(); 
    //this is 5 seconds 
    long alertTime = new GregorianCalendar().getTimeInMillis(); 
    alertTime += 5*1000; 


    Intent alertIntent = new Intent(this,AlertReceiver.class); 
    alertIntent.putExtra("msg","This is msg for 5 seconds"); 
    alertIntent.putExtra("msgText","This is msgText for 5 seconds"); 
    alertIntent.putExtra("msgAlert","This is msgAlert for 5 seconds"); 
    alertIntent.putExtra("notifyID",1); 

    AlarmManager alarmManager = (AlarmManager) 
      getSystemService(Context.ALARM_SERVICE); 

    alarmManager.set(AlarmManager.RTC_WAKEUP,alertTime, 
      PendingIntent.getBroadcast(this,1,alertIntent, 
        0)); 

} 

public void setAlarm2(View view){ 
    Toast.makeText(getApplicationContext(),"Setting Alarm 10 seconds",Toast.LENGTH_SHORT).show(); 
    //this is 5 seconds 
    long alertTime = new GregorianCalendar().getTimeInMillis(); 
    alertTime += 10*1000; 


    Intent alertIntent = new Intent(this,AlertReceiver.class); 
    alertIntent.putExtra("msg","This is msg for 10 seconds"); 
    alertIntent.putExtra("msgText","This is msgText for 10 seconds"); 
    alertIntent.putExtra("msgAlert","This is msgAlert for 10 seconds"); 
    alertIntent.putExtra("notifyID",2); 

    AlarmManager alarmManager = (AlarmManager) 
      getSystemService(Context.ALARM_SERVICE); 

    alarmManager.set(AlarmManager.RTC_WAKEUP,alertTime, 
      PendingIntent.getBroadcast(this,2,alertIntent, 
        0)); 

} 

AlertReceiverクラス

public class AlertReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    createNotification(context, intent.getStringExtra("msg"), intent.getStringExtra("msgText"), intent.getStringExtra("msgAlert"), intent.getIntExtra("notifyID",999)); 

} 

public void createNotification(Context context, String msg, String msgText, String msgAlert, int notifyID){ 
    Intent intent = new Intent(context, MoreInfoNotification.class); 
    intent.putExtra("msg",msg); 
    intent.putExtra("msgText",msgText); 
    intent.putExtra("msgAlert",msgAlert); 
    // had this below line of code but made problems worse 
    // intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent notificIntent = PendingIntent.getActivity(context, notifyID, 
      intent,PendingIntent.FLAG_UPDATE_CURRENT); 


    NotificationCompat.BigTextStyle style = new NotificationCompat.BigTextStyle(); 
    style.setBigContentTitle(msg); 
    style.bigText(msgText); 

    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
    builder.setContentTitle(msg); 
    builder.setContentText(msgText); 
    builder.setSmallIcon(R.mipmap.ic_launcher); 
    builder.setTicker(msgAlert); 


    builder.setStyle(style); 

    builder.setContentIntent(notificIntent); 


    builder.setDefaults(NotificationCompat.DEFAULT_SOUND); 
    builder.setAutoCancel(true); 

    NotificationManager mNotificationManager = 
      (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(notifyID,builder.build()); 

} 
} 

MoreInfoNotificationクラス

public class MoreInfoNotification extends AppCompatActivity { 

private TextView mTextView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    onNewIntent(getIntent()); 

} 

@Override 
public void onNewIntent(Intent intent) { 
    // TODO Auto-generated method stub 
    Bundle extras = getIntent().getExtras(); 
    if(extras != null){ 

     setContentView(R.layout.activity_more_info_notification); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     mTextView = (TextView)findViewById(R.id.textView); 
     String totalString = ""; 

     if(extras.containsKey("msg")){ 
      totalString += extras.getString("msg"); 
     } 
     if(extras.containsKey("msgText")){ 
      totalString += ", " + extras.getString("msgText"); 
     } 
     if(extras.containsKey("msgAlert")){ 
      totalString += ", " + extras.getString("msgAlert"); 
     } 

     mTextView.setText(totalString); 
    } 
} 
} 

答えて

0

だから私は最近、このPへの答えを見つけました汚れ。インテントは、私が探していたものとは別のものではなく、同じものとして見られました。私は自分の意思でエキストラを入れた直後に、私のAlertReceiverクラス、createNotification法で

intent.setAction("com.wordpress.zackleaman.materialtablayout.intent.action.ACTION_NAME" + notifyID); 

:重複として表示されているから離れてテントを得るために、私はこの行を書きました。

私は、最も良い方法は次のものを使用することです: PendingIntent.getActivity(context、0、intent、PendingIntent.FLAG_UPDATE_CURRENT);

with:intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

私が試したソリューションの数にかかわらず、最初の通知の詳細が開いていて、アプリケーションが元々閉じられている間に2番目の通知の詳細を開くためにクリックした場合、テキストを更新できませんでした。

関連する問題