5

Temelde bir web görüntülemesi ve GCM bildirimleri olan bir uygulamam var. Aşağıdaki şeyi elde etmek istiyorum: Kullanıcı uygulamadaysa ve bir bildirim alırsa, bildirimi tıklattığında, web görünümünün bildirimde sağlanan URL'yi yüklemesini istiyorum.Bildirim üzerine yayın gönder Bildirime tıkla

Bunu yayın alıcısı kullanarak gerçekleştirmeye çalışıyorum ama işe yaramıyor.

Dinamik MainActivity alıcıyı kayıt

: Ben PendingIntent.getBroadast() kullanıyorum

private void registerNotificationReceiver() { 
     final IntentFilter filter = new IntentFilter(); 
     filter.addAction(ACTION_LOAD_URL_FROM_NOTIFICATION); 
     Log.i(TAG, "registerNotificationReceiver()"); 
     this.receiver = new BroadcastReceiver() { 

      @Override 
      public void onReceive(Context context, Intent intent) { 
       Log.d(TAG, "notification received"); 

      } 
     }; 

     super.registerReceiver(this.receiver, filter); 
    } 

Ve GCM İşleyici içinde:

final Intent broadcastIntent = new Intent(MainActivity.ACTION_LOAD_URL_FROM_NOTIFICATION); 
     PendingIntent intent = PendingIntent.getBroadcast(getApplicationContext(), 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     notificationBuilder.setContentIntent(intent); 

     notification = notificationBuilder.build(); 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     NotificationManager mNotificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(1, notification); 

ben neden OnReceive anlamıyorum MainActivity sınıfı çağrılmıyor. "Bildirim alındı" mesajı görüntülenmiyor. Bana yardım edebilir misin? Teşekkürler.

cevap

4

Şu anda bir neden bulamıyorum ama bir güvenlik nedeni var. En son Android sürümleri, açık bir şekilde "türden" uzak bir süreçten bir dinleyiciyi tetiklemenize izin vermez.

Kullanacağınız yayın, çalışması için açık olmalıdır. Açık, niyetle (alıcı) ilgilenecek bileşeni açıkça çağırmanız gerektiği anlamına gelir. Dolayısıyla bu alıcının kendi sınıfında ve bildiride <receiver> olarak beyan edilmesi gerekir.

bu bölümde Explicit Broadcast Intentshttp://codetheory.in/android-broadcast-receivers/ örneğe guy's izleyin ve senin alıcı bildirim tanımlanan zaman

+1

Evet, şimdi çalışıyor yapılacaktır. Teşekkür ederiz :) Hedefime ulaşmak için, URL'yi yüklediğim MainActivity'de başka bir alıcı kullanmam gerekiyordu. Bu yayın ilk alıcıdan (bildiride tanımladığımdan) gönderilir. Şimdi çalışıyor, ama ben bu yaklaşımı sevmiyorum. Bana kötü bir uygulama olarak bakıyor ... – definera

+0

bu * zorunlu * uygulama ... Tanrı google diyor ki ... – eduyayo

İlgili konular