2012-09-20 3 views
6

클릭하면 활동을 시작해야하는 전경 서비스 알림이 있습니다. 이 활동은 finish()를 호출하기 전에 매우 짧습니다.알림 pendingIntent content activity가 finish() 호출시 실패합니다.

Sending contentIntent failed: android.app.PendingIntent$CanceledException 

내 코드에서 전경 서비스 통지를 생성 할 때, 나는 randomActivity.class을 변경했습니다 :

작동 통지를 클릭 할 때 처음, 두 번째 및 그 이후 나는 오류 finish를 호출하지 않고 모든 클릭에 대해 완벽하게 작동하는 또 다른 Activity 클래스입니다. 에서 :

Intent notificationIntent = new Intent(this, RandomActivity.class); 

에 :

Intent notificationIntent = new Intent(this, HomeActivity.class); 

잘 작동 ...

나는 알림 빌더를 사용하여 테스트뿐만 아니라, Android 개발자 웹 사이트에서 표준 알림 코드를 사용했습니다. 나는 상관없이 같은 결과를 얻는다. Activity가 finish()를 호출하지 않으면 완벽하게 작동합니다.

이 동작이나 버그 또는 뭔가 누락되었습니다.

도움을 주신 데 대해 미리 감사드립니다.

참고 : 사용하는 알림 코드는 완전히 표준이므로 게시하지 않았습니다. RandomActivity는 finish()를 호출합니다. onCreate에서 볼 수있는 특별한 것은 없습니다.

답변

9

내가 할 수있는 모든 것을 시도한 후에 결국 해결책을 찾았습니다. 누구든지이 문제를 놓고 비틀 거릴 경우 게시하십시오.

int requestCode를 알림 ID와 일치시켜야했습니다. 왜? 절대적으로 아무 생각이 ... 나는 그것이 의도 데이터가 null이되거나 재사용하는 것을 막을 수 있다고 가정 할 수 있습니까?

private static int ONGOING_NOTIFICATION_ID = 76; 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 
    ONGOING_NOTIFICATION_ID, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

startForeground에 통지 ID와 동일

:이 사람을 도움이

this.startForeground(ONGOING_NOTIFICATION_ID, not); 

희망.

+0

나는 @brandall에 동의합니다. 작업 버튼을 사용하는 경우 notificationID는 actionIntent의 requestCode를 사용하고 액션 인 텐트는 사용하지 않아야합니다. – fahmad6

2

내가 제안한 알림 ID를 확인하지 않아도되었지만 FLAG_ONE_SHOT이 아닌 FLAG_UPDATE_CURRENT으로 플래그를 변경해야했습니다.

FLAG_ONE_SHOT으로 보류중인 인 텐트는 배달 된 후 취소되며 그 이후에는 알림을 두드리지 않으면 동일한 보류중인 의도가 다시 배달 될 수 없으므로 예외가 발생합니다.

이것은 나를위한 문제였습니다.

관련 문제