2010-12-03 5 views
13

상태 표시 줄의 알림 이벤트를 클릭하여 알림을 클릭하면, 내가, 양호하게받는 액세스, 메소드를 호출 할안드로이드 : 나는 상태 표시 줄의 알림을 만들려면 다음 코드를 가지고

public void txtNotification(int id, String msg){ 
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(android.R.drawable.sym_action_email, msg, System.currentTimeMillis()); 

    // The PendingIntent will launch activity if the user selects this notification 
    Intent intent = new Intent(this, MainActivity.class) 
    intent.putExtra("yourpackage.notifyId", id); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 0); 

    notification.setLatestEventInfo(this, "title", msg, contentIntent); 

    manager.notify(id, notification); 
} 

통지의 ID. 사전에

감사합니다,

(편집 : 나는 첫 번째 대답을 읽은 후 내 코드를 업데이트,하지만, 난 여전히 의도를 수신하는 방법을 모른다)

+0

미안 내가 며칠 전에 내 대답을 업데이 트 언급 잊어 버렸습니다. 아직 궁금한 점이 있으면 알려주세요. – McStretch

+0

아, 고마워. 거기에 몇 가지 내용을 읽었지만 대부분 객체에 대한 기술 사양이었습니다. 이 페이지는 매우 유용합니다. –

답변

16

나는 생각한다 알림 (아마도 유일한 방법?) 클릭을 처리하는 가장 좋은 방법은 PendingIntent가 호출하는 클래스 (이 경우 MainActivity) 내에서 메소드를 정의하는 것입니다. 당신은 통지의 ID를 포함 getActivity()에 전달하기 전에 당신의 의도를 수정할 수 있습니다

// The PendingIntent will launch activity if the user selects this notification 
Intent intent = new Intent(this, MainActivity.class) 
intent.putExtra("yourpackage.notifyId", id); 
PendingIntent contentIntent = PendingIntent.getActivity(this, 1, intent, 0); 

그런 통지를 처리하기 위해 당신은 클래스 내에서 정의 된 방법을 MainActivity에서이 의도에 대한보고 호출합니다. 들어오는 인 텐트에서 ID를 추출 할 수 있습니다.

업데이트 :

통지를 처리하기 위해 활동 위해서는, 먼저 당신이 필요로하는 모든 인 텐트 필터를 포함하여 AndroidManifest.xml 파일의 활동을 정의해야합니다. 그런 다음 액티비티의 onStart()에서 들어오는 의도로부터 엑스트라를 추출하고 해당 데이터를 처리 할 수 ​​있습니다. 이것은 고차원적인 개요이므로 Dev Guide의 일부를 읽으면서 개념을 익히는 것이 좋습니다.

http://developer.android.com/guide/topics/fundamentals.html

는 또한 "yourpackage은"예 : "com.project.foo"로, 당신의 클래스를 포함하는 패키지의 이름으로 바꿔야합니다 다음 페이지를 시작하기에 좋은 장소입니다. 자신과 같은 인형에 대한

+0

고맙습니다. 안드로이드 개발에 상당히 익숙합니다. 이전에는 의도를 실제로 사용하지 않았습니다. 청취자를 어떻게 설정합니까? –

+0

폼팩 날,'packagename'없이 작동했습니다. 고맙습니다! :) –

+1

다른 알림 유형이 많은 경우 먼저 인 텐트가 빈칸 인 빈 애셋이있는 경우 배열을 제공하여 편리하게 만들 수 있습니다. 세 번째 매개 변수는 Intent []이어야합니다. – slott

2

: MainActivity에서이 yourpackage.notifyId 얻기 : 내 경우

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Bundle intent_extras = getIntent().getExtras(); 
     if (intent_extras != null && intent_extras.containsKey("yourpackage.notifyId")) 
     { 
      //Do the codes 
     } 

} 

- 내 mainactivity, 사용자 또는 GcmIntentService에 의해 cteated 통지에서 전화를 열어 누가 결정하는 데 사용된다. .. PS 나는 "youpackage"없이 이름을 사용했고, 잘 작동합니다.

+1

"yourpackage"접두사없이 이름을 사용하는 것은 효과가 있지만 다른 의도의 엑스트라가 같은 키를 포함 할 수 있으므로 위험 할 수 있음을 알고 있어야합니다. 그러면 같은 행동이 잘못된 행동으로 이어질 수 있습니다 ... 따라서 패키지 네임 스페이스를 사용하는 것이 좋습니다. – sjkm

관련 문제