6

Pracuję nad moją pierwszą aplikacją na Androida, która będzie korzystać z usługi Google Cloud Messaging (GCM) do wysyłania powiadomień. Doszedłem do punktu, w którym mogę wysłać wiadomość z mojej aplikacji serwera i zalogować treść wiadomości w zdarzeniu onMessage w mojej klasie GCMIntentService w aplikacji klienckiej. Jednak nie widzę żadnego wizualnego wskazania na urządzeniu, że odebrano wiadomość. Oczekiwałem, że wiadomość pojawi się na liście powiadomień w telefonie, tak jak na telefonie iPhone. Czy to musi być kodowane ręcznie? Czy istnieje również powszechna metoda wyświetlania komunikatu niezależnie od tego, która aktywność jest aktualnie aktywna i czy aplikacja jest bezczynna w tle? Każda pomoc doceniona.Android - powiadomienia wypychania GCM nie pojawiają się na liście powiadomień

Odpowiedz

7

Ten kod wygeneruje powiadomienie na pasku systemu Android u góry ekranu. Ten kod utworzy nową intencję, która przekieruje użytkownika do "Home.class" po kliknięciu powiadomienia na górnym pasku. Jeśli chcesz zrobić coś konkretnego na podstawie bieżącego działania, możesz wysyłać żądania transmisji z GCMIntentService do innych działań.

Intent notificationIntent=new Intent(context, Home.class); 
generateNotification(context, message, notificationIntent); 

private static void generateNotification(Context context, String message, Intent notificationIntent) { 
    int icon = R.drawable.icon; 
    long when = System.currentTimeMillis(); 
    NotificationManager notificationManager = (NotificationManager) 
      context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(icon, message, when); 
    String title = context.getString(R.string.app_name); 

    // set intent so it does not start a new activity 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
      Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent intent =PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.setLatestEventInfo(context, title, message, intent); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notificationManager.notify(0, notification); 
} 

Zauważ, że ten przykład wykorzystuje zasoby w R.drawable i R.String, które będą musiały być obecne do pracy, ale powinno dać wam pomysł. Zobacz więcej informacji na temat powiadomień o stanie http://developer.android.com/guide/topics/ui/notifiers/index.html i dotyczących odbiorników transmisji. http://developer.android.com/reference/android/content/BroadcastReceiver.html

+0

To fantastyczne, wielkie dzięki. –

+0

Witam, użyłem tej wtyczki https://github.com/marknutter/GCM-Cordova i postępowałem zgodnie ze wszystkimi instrukcjami. Mogę jednak otrzymywać wiadomości tylko w aplikacji, ale nie mogę wyświetlać powiadomień w obszarze powiadomień androidów. proszę doradź. Używam tej wtyczki, ponieważ używam phonegap @Zachary Moshansky –

+0

Przykro mi, ale nigdy nie korzystałem z Phonegapa i nie jestem w stanie skomentować, jak sprawić, aby powiadomienia działały z nim –

1

Jeśli używasz GcmListenerService można użyć tego kodu, dodać do swojej onMessageReceived na sendNotification()

@Override 
public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     sendNotification(message); 
} 

private void sendNotification(String message) { 
     Intent intent = new Intent(this, YOURCLASS.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
     PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_park_notification) 
       .setContentTitle("Ppillo Message") 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
Powiązane problemy