2010-12-03 32 views
13

Durum çubuğu bildirim için etkinliği tıklayın: Bildirim tıklandığında, ben preferrably erişimi olan bir yöntemi çağırmak istiyorumAndroid: Bir durum çubuğu bildirim oluşturmak için aşağıdaki kodu var

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

bildirimin kimliği. peşin

sayesinde

Tim

(Düzeltme: Ben ilk cevabı okuduktan sonra kodumu güncellenen, ama yine de niyet dinlemek için nasıl bilmiyorum)

+0

Üzgünüm, cevabımı birkaç gün önce güncellediğimi söylemeyi unutmuşum. Hala sorularınız varsa lütfen bize bildirin. – McStretch

+0

Ah, teşekkürler. Orada bazı şeyler okudum, ama bu çoğunlukla nesnelerle ilgili teknik özelliklerden biriydi. Bu sayfa çok kullanışlıdır. –

cevap

16

bence Bildirimdeki bir tıklamanın üstesinden gelmenin en iyi yolu (belki de tek yol?), PendingIntent çağrılarınızdaki bir yöntemi tanımlamaktır (bu durumda MainActivity). Sen bildirimin kimliği içerecek şekilde getActivity() içine geçirmeden önce niyet değiştirebilirsiniz:

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

Sonra bildirim işlemek için sınıfta tanımlanan yöntem MainActivity içinde bu niyet izlemek ve arayın. Kimliği gelen Niyet'ten ayırabilirsiniz.

Güncelleme:

bildirim işlemek için Aktivitesi amacıyla, öncelikle gereken herhangi niyet filtreler dahil, sizin AndroidManifest.xml dosyasında Aktivite tanımlamak gerekir. Ardından, Aktivitenizin onStart() 'ında ekstraları gelen amaçtan çıkarabilir ve bu verilere göre hareket edebilirsiniz. Bu yüksek düzeyde bir genel bakış, bu yüzden Dev Guide'ın bölümlerini okumaya karar vermenizi tavsiye ederim.

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

Ayrıca "yourpackage" örneğin "com.project.foo" olarak, sizin Class içeren paketin adını değiştirilmelidir: Aşağıdaki sayfa başlamak için iyi bir yerdir. Benim gibi mankenleri için

+0

Teşekkür ederim, Android geliştirmede oldukça yeniyim ve daha önce hiç niyet göstermedim. Bir dinleyiciyi nasıl kurarım? –

+0

Formumun, 'packgename' olmadan, işe yaradı. Teşekkür ederim! :) –

+1

Çok sayıda farklı bildirim türünüz varsa, ilk önce boş olanı tıklattıktan sonra bir dizi sağlayarak hayatı kolaylaştırabilirsiniz. Bu 3. parametre Intent [] olmalıdır. – slott

2

: MainActivity bu yourpackage.notifyId alınıyor: Benim durumumda

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 
     } 

} 

- Benim MainActivity, kullanıcı veya GcmIntentService tarafından cteated bildirimin bir çağrı, açıyor kim olduğunu belirlemek için kullandı. .. PS "Youpackage" olmadan isimler kullandım, gayet iyi çalışıyor.

+1

"Yourpackage" öneki olmadan isimleri kullanmak çalışır, ancak diğer amaçların ekstraları muhtemelen daha sonra yanlış davranışa yol açabilecek eşit bir anahtar içerebileceğinden bu bir risk olduğunu unutmayın ... Bu yüzden bir paket ad alanı kullanın. – sjkm

İlgili konular