5

Mam aplikację, która jest w zasadzie powiadomieniem o wyświetleniu i GCM. Chcę osiągnąć następujące rzeczy: jeśli użytkownik jest w aplikacji i otrzymuje powiadomienie, po kliknięciu powiadomienia chcę, aby przeglądarka internetowa załadowała adres URL podany w powiadomieniu.Wysyłaj transmisję po powiadomieniu kliknij

Próbuję to osiągnąć, używając odbiornika transmisji, ale to nie działa.

dynamicznie zarejestrować słuchawkę w główną działalność:

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

A w GCM Listener Używam PendingIntent.getBroadast():

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

Nie rozumiem dlaczego w onReceive klasa MainActivity nie jest wywoływana. Komunikat "Otrzymano powiadomienie" nie jest wyświetlany. Czy możesz mi pomóc? Dziękuję :)

Odpowiedz

4

Nie mogę znaleźć teraz powodu, ale jest powód bezpieczeństwa. Najnowsze wersje Androida nie pozwalają na uruchomienie detektora z "rodzaju" zdalnego procesu bez wyraźnego.

Nagłówek MUSI być wyraźny, aby zadziałał. Wyraźny oznacza, że ​​musisz jawnie wywołać komponent, który będzie obsługiwał zamiar (odbiornik). Tak więc odbiornik musi być zadeklarowany we własnej klasie i w manifeście jako <receiver>.

Śledź ten guy's przykład w sekcji Explicit Broadcast Intentshttp://codetheory.in/android-broadcast-receivers/ i bądź wola Twoja

+1

Tak, to działa teraz, gdy odbiornik jest zdefiniowana w manifeście. Dziękuję :) Aby osiągnąć mój cel, musiałem użyć innego odbiornika w MainActivity, gdzie ładuję adres URL. Emisja do niego jest wysyłana z pierwszego odbiorcy (tego, który zdefiniowałem w manifeście). Działa teraz, ale nie lubię tego podejścia. Wygląda mi to na złą praktykę ... – definera

+0

to jest * obowiązkowa * praktyka ... God google mówi tak ... – eduyayo

Powiązane problemy