2013-05-09 2 views
1

Мое приложение и сервер Android настроены на получение и отправку push-уведомлений. Мое приложение прекрасно получает уведомление, и в LogCat отображается, открыто ли мое приложение в фоновом режиме или не работает так, как должно. Тем не менее, у меня проблемы с отображением. Независимо от того, что я делаю, я не могу заставить его появляться в центре уведомлений или заходить в качестве предупреждения, которое вибрирует в телефоне или делает звук.Уведомление GCM получено, но не отображается

Что мне не хватает? Я использую плагин GCM отсюда: https://github.com/marknutter/GCM-Cordova

Я попытался получить его, чтобы отправить уведомление с помощью NotificationCompat, но я не увенчался успехом.

-> JSON из GCM в этой функции ...

@Override 
protected void onMessage(Context context, Intent intent) { 
    Log.d(TAG, "onMessage - context: " + context); 

    // Extract the payload from the message 
    Bundle extras = intent.getExtras(); 
    if (extras != null) { 
     try 
     { 
      Log.v(ME + ":onMessage extras ", extras.getString("message")); 

      JSONObject json; 
      json = new JSONObject().put("event", "message"); 

      // My application on my host server sends back to "EXTRAS" variables message and msgcnt 
      // Depending on how you build your server app you can specify what variables you want to send 

      json.put("message", extras.getString("message")); 
      json.put("msgcnt", extras.getString("msgcnt")); 

      Log.v(ME + ":onMessage ", json.toString()); 

      GCMPlugin.sendJavascript(json); 
      NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.notification_icon) 
       .setContentTitle("TEST") 
       .setContentText("TEST"); 
      // Send the MESSAGE to the Javascript application 
     } 
     catch(JSONException e) 
     { 
      Log.e(ME + ":onMessage", "JSON exception"); 
     } 
    } 
} 
+0

Цель, очевидно, чтобы получить тестовое уведомление для отображения, а затем раздеться сообщение из JSON. – centree

ответ

3

Вы довольно близко, но вам не хватает одного шага. Ваш код готовит уведомление, но на самом деле его не показывает. Поместите эти строки после того, как ваш NotificationCompat.Builder код:

final int notificationId = 1; 
NotificationManager nm = (NotificationManager) getApplicationContext() 
     .getSystemService(Context.NOTIFICATION_SERVICE); 
nm.notify(notificationId, mBuilder.build()); 

Идентификатор уведомления произвольное число, которое вы можете использовать, чтобы получить уведомление, если вам нужно обновить или удалить его позже.

+0

Это просто сейчас, без шума или чего-то еще. И когда я нажимаю на него, ничего не происходит – centree

+0

Все это контролируется через конструктор уведомлений. Проверьте [полный api] (http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html), чтобы понять, что поддерживается. Чтобы получить обработку кликов, вам нужно использовать 'setContentIntent()' (что может потребовать, чтобы вы углубились в особенности Android, чем Кордова бы вы думали). Чтобы получить звук, вам нужно вызвать 'setSound()' и передать Uri в звуковой файл в каталоге 'res/raw' (не включать расширение файла в Uri). – Barend

+0

Я вижу, что вы заметили плагиат npocmaka в тегах wikis при просмотре предлагаемых изменений тоже, к сожалению, многие люди не замечают :(Как вы думаете, что мы должны делать? Я отправил флаг модератора «other» – Doorknob

0

Используйте этот код! Надеюсь код поможет вам

`

Intent resultIntent = new Intent(this, MainActivity.class); 

    resultIntent.putExtra("msg", msg); 

    PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, 
      resultIntent, PendingIntent.FLAG_ONE_SHOT); 

    NotificationCompat.Builder mNotifyBuilder; 
    NotificationManager mNotificationManager; 

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

    mNotifyBuilder = new NotificationCompat.Builder(this) 
      .setContentTitle("Alert") 
      .setContentText("You've received new message.") 
      .setSmallIcon(R.mipmap.ic_launcher); 
    // Set pending intent 
    mNotifyBuilder.setContentIntent(resultPendingIntent); 

    // Set Vibrate, Sound and Light 
    int defaults = 0; 
    defaults = defaults | Notification.DEFAULT_LIGHTS; 
    defaults = defaults | Notification.DEFAULT_VIBRATE; 
    defaults = defaults | Notification.DEFAULT_SOUND; 

    mNotifyBuilder.setDefaults(defaults); 
    // Set the content for Notification 
    mNotifyBuilder.setContentText("New message from Server"); 
    // Set autocancel 
    mNotifyBuilder.setAutoCancel(true); 
    // Post a notification 
    mNotificationManager.notify(notifyID, mNotifyBuilder.build()); 
` 
Смежные вопросы