2011-07-26 8 views
4

나는 알림을 호출하는 프로그램이 있습니다. 알림을 끌어 내면 새로운 활동이 시작됩니다.Android Refresh 알림의 활동

mNotificationManager = (NotificationManager) getSystemService(ns); 

int icon = R.drawable.stat_sys_secure_green; 
CharSequence tickerText = "Browser Security Enabled"; 
long when = System.currentTimeMillis(); 

notification = new Notification(icon, tickerText, when); 

Context context = getApplicationContext(); 
CharSequence contentTitle = "Browser Security"; 
CharSequence contentText = "Security Vulnerability Detected"; 
Intent notificationIntent = new Intent(this, PrivacyMessage.class); 

//Test Extra 
notificationIntent.putExtra("Primary Key", "Primary Text"); 

PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 

mNotificationManager.notify(HELLO_ID, notification); 

문제는 나중에 보조 활동을 새로 고침하고 싶을 때 코드에 나타납니다. 주요 활동은 동적으로 엑스트라를 변경할 수 있어야합니다. 나는 새로운 의도를 시작하여 이것을 시도했다. 내가 그 코드를 실행할 때

CharSequence contentTitle = "Browser Security"; 
CharSequence contentText = "Test New Notification"; 
Intent intent = new Intent(this, PrivacyMessage.class); 
notification.icon = R.drawable.stat_sys_secure_orange; 

intent.putExtra("Test Thing", "Test Value"); 
//intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
//intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

PendingIntent cI = PendingIntent.getActivity(this, 0, intent, 0); 
notification.setLatestEventInfo(getApplicationContext(), "New Title", "NewText", cI); 
mNotificationManager.notify(HELLO_ID, notification); 

지금, 새로운 알림 제목, 아이콘의 색상 변경을 팝업하고, 풀다운는 새로운 제목과 추가 정보를 반영한다. 그러나 그것을 클릭하면 새로운 의도로 활동을 시작하지 않습니다. 대신, 그것은 단지 옛날 엑스트라로 옛날 활동을 끌어냅니다. FLAG_ACTIVITY_CLEAR_TOP 및 FLAG_ACTIVITY_NEW_TASK를 모두 시도했지만 어느 것도 이전 보조 활동을 지우고 새 활동을 작성하는 것 같습니다. 내가 어떻게 할 수 있는지에 대한 생각은?

+0

실례합니다. 오해의 여지가 있지만 기록없이 새로운 활동을 시작 하시겠습니까? 아니면 이전 활동을 포 그라운드에두고 상태를 새로 고치시겠습니까? – mdelolmo

+0

알림을 누르면 이전 활동이 포 그라운드로 이동하지만 새 인 텐트로 업데이트됩니다. – Lark

+0

내 문제도 도와 줄 수 있니? http://stackoverflow.com/questions/20149685/android-notification-refresh-activity –

답변

10

분명히 이것은 실제로 안드로이드 환경의 버그/기능입니다. 고유 한 requestCode와 함께 pendingIntent()가 전달되지 않으면, 원래 그 번호와 함께 전달 된 이전 인 텐트를 검색하기 만하면됩니다.

자세한 내용은 여기를 찾을 수 있습니다 http://groups.google.com/group/android-developers/browse_thread/thread/ad855bb57042c2bd/e84c8d6fececf6e4?lnk=gst&q=notification#e84c8d6fececf6e4

그들은 단순히 때마다 pendingIntent.getActivity(Context context, int requestCode, Intent intent, int flags)가 호출되는 requestCode가를 증가하고, 플래그에게 내가

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
에 원래 일을했던 방법을 설정했다 해낸 솔루션

완벽한 솔루션 인 것처럼 보이지는 않지만 작동합니다. 도와 주셔서 감사합니다!

+3

또는 PendingIntent.getActivity()를 사용하여 PendingIntent.FLAG_CANCEL_CURRENT 플래그를 더 잘 사용하십시오. – OferR

+1

PendingIntent.getActivity()가있는 PendingIntent.FLAG_CANCEL_CURRENT 플래그가 나를 위해 작동합니다 – varghesekutty

0

나는 먼저 FLAG_ACTIVITY_NEW_TASK에 대해 잊어야한다고 생각합니다. 이전에 열어 본 항목을 지우지 않고 새 작업 (활동 그룹)을 열어야하기 때문입니다. FLAG_ACTIVITY_CLEAR_TOP은 당신에게도 유용하지 않을 것입니다. 왜냐하면 내가 시나리오를 올바르게 이해한다면 당신의 택은 두 가지 활동만을 가지고 있고 당신의 목표 활동은 보조 활동이기 때문입니다.

여기 내 질문에 ... 코드의 두 번째 부분이 Activity 컨텍스트 내에서 실행되는 경우 startActivity에 새 추가 기능을 호출하면 어떨까요? 이렇게하면 보조 활동에 대한 onStart 메소드의 새로운 추가 기능을 처리 할 수 ​​있습니다.

감사합니다.

+0

startActivity에 대한 내 이해는 즉시 새로운 활동을 시작한다는 것입니다. 내가 원하는 것은 알림 드롭 다운에서 활동을 시작하게하는 것이지만 그 시점에서 업데이트 된 버전이되도록하는 것입니다. 나는 그것을 시험해보고 그것을 시도하고 즉시 새로운 활동을 시작하지만, android.app를 던집니다.SuperNotCalled 예외입니다. – Lark

0

새로운 의도를 잡으려면 onNewIntent()을 무시하거나 getIntent()를 호출 하시겠습니까? onNewIntent() 문서는 setIntent()를 onNewIntent()에서 호출하지 않는 한 getIntent()가 활동을 시작하는 데 사용 된 원래 의도를 계속 반환한다고 말합니다.

+0

저는 실제로 getIntent를 호출했습니다. 나는 방금 단순하게 추가하려고했다. 'public void onNewIntent (의도 의도) { this.setIntent (intent); } ' 하지만 아무 것도하지 않은 것처럼 보입니다. 나 또한 onNewIntent 메서드로 변경 내용을 서식 화하는 onCreate 메서드를 복사하려고했습니다. 어느 쪽도하지 않았다. 더 이상의 생각? – Lark