2016-10-20 8 views
1

ボタンをクリックすると、ステータスバーに通知が作成されます。他のアクティビティから通知をキャンセルする - Android

クリックすると、この通知によってアクティビティが作成されます。

このアクティビティのレイアウトにはボタンがあります。

このボタンをクリックすると、ボタンがあるアクティビティを作成した通知をキャンセルする必要があります。

問題は、複数の通知を作成して別々のIDを付与することができます。

ステータスバーを開くと、通知が表示され、1つ選択するとアクティビティが作成され、ボタンをクリックしてアクティビティをキャンセルします。

キャンセルされた通知は、常に選択したものではなく最後に作成されたものです。

これは、通知が作成されている主な活動からのコードです:

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.ButtonBarLayout; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 

public class NotifMenuActiv extends AppCompatActivity { 

private Button but_notif, but_cancel; 
private NotificationManager mNotificationManager; 
private Notification.Builder mBuilder; 
private EditText id; 
private Intent resultIntent; 
private PendingIntent pIntent; 
private int req_code = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_notif_menu); 
    mNotificationManager = (NotificationManager)getSystemService(Context 
      .NOTIFICATION_SERVICE); 
    mBuilder = new Notification.Builder(this); 
    mBuilder.setSmallIcon(R.drawable.joda); 
    resultIntent = new Intent(this, NotifActiv.class); 
    id = (EditText)findViewById(R.id.id); 
    but_notif = (Button)findViewById(R.id.but_notif); 
    but_notif.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
       resultIntent.putExtra("id", Integer.valueOf(id.getText(). 
         toString())); 
       pIntent = PendingIntent.getActivity(getApplicationContext(), 
         req_code++, resultIntent, PendingIntent 
           .FLAG_UPDATE_CURRENT); 
       mBuilder.setContentIntent(pIntent); 
       mBuilder.setContentTitle(id.getText().toString()); 
       mNotificationManager.notify(Integer.valueOf(id.getText(). 
         toString()),mBuilder.build()); 
       mBuilder.setContentText(Integer.valueOf(mNotificationManager 
         .getActiveNotifications().length).toString()); 
       mNotificationManager.notify(Integer.valueOf(id.getText(). 
         toString()),mBuilder.build()); 

      } 
     } 
    }); 
    but_cancel = (Button)findViewById(R.id.but_cancel1); 
    but_cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mNotificationManager.cancel(Integer.valueOf(id.getText(). 
        toString())); 
     } 
    }); 
} 
} 

そして、これは私が通知をクリックしたときに作成活動からのonCreateメソッドです:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_notif); 
    Intent intent = getIntent(); 
    id = intent.getIntExtra("id",id); 
    mNotificationManager = (NotificationManager)getSystemService(Context 
      .NOTIFICATION_SERVICE); 
    but_exit = (Button)findViewById(R.id.but_exit); 
    but_exit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 

// This is the button that must cancel the notification that created 
// the activity 
    but_cancel = (Button)findViewById(R.id.but_cancel2); 

    but_cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mNotificationManager.cancel(id); 
     } 
    }); 
} 

どうもありがとうございました。

答えて

1

SOLVED !!!解決策は、それぞれのPedingIntentに異なるrequestCodeを与えることです。これに代えて

PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),req_code++, resultIntent,PendingIntent.FLAG_UPDATE_CURRENT); 

PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

これを行います

関連する問題