2016-10-20 3 views
1

버튼을 클릭하면 상태 표시 줄에 알림이 생성됩니다.다른 활동에서 알림 취소 - Android

이 알림을 클릭하면 활동이 만들어집니다.

이 액티비티의 레이아웃에는 버튼이 있습니다.

이 단추를 클릭하면 단추가있는 활동을 작성한 알림을 취소해야합니다.

하나 이상의 알림을 만들 수 있기 때문에 문제가 발생합니다. 다른 ID를 부여하기 때문입니다.

그러나 상태 표시 줄을 열면 알림이 표시되고 하나를 선택하면 활동이 만들어지고 버튼을 클릭하여 활동을 취소합니다.

취소 된 알림은 내가 선택한 것보다 항상 마지막으로 만들어집니다.

알림이 생성되는 주요 활동에서 코드입니다 :

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

는이 작업을 수행

관련 문제