如何从json数据设置推送通知的setContentTitle和setContentText

时间:2016-07-02 09:37:15

标签: java android json push-notification

我收到了来自服务器的响应,我在android中解析了该响应,现在我必须从该响应中设置通知标题和文本。我的意思是来自那个特定的功能。

这里我将ParseList()函数放在我解析响应的位置。

 private void parseList(Bundle bundle) {

        String id,name,photo,updates;

          try {
              JSONObject json = new JSONObject();
              Set<String> keys = bundle.keySet();
              for (String key : keys) {
                 try {
                     json.put(key, bundle.get(key)); 
                 } catch (JSONException e) {
                     e.printStackTrace();
                 }
              }

              JSONArray jsonarray = new JSONArray(json.getString("response"));
             Log.e("","Hi"+jsonarray);
              for (int i = 0; i < jsonarray.length(); i++) {
                  JSONObject jsonObjectmain = jsonarray .getJSONObject(i);

                  JSONArray array = jsonObjectmain.getJSONArray("updates");

                  for (int j = 0; j < array.length(); j++) {
                       JSONObject jsonObject = array.getJSONObject(j);
                         id = jsonObject.getString("id").toString();
                        name = jsonObject.getString("name").toString();
                        photo = jsonObject.getString("photo").toString();
                        updates = jsonObject.getString("updates").toString();

                  }      
              }
          } catch (Exception e) {
           e.printStackTrace();
          }
         }

有一个名为name,updates和photo的参数。现在我必须从这个响应设置通知标题我如何设置那个东西..?

我有onMessage()方法,但我怎样才能将这些值放入其中。 ??

这是我的通知的onMessage()方法......

@Override
    protected void onMessage(Context context, Intent data) {

        String message; 

         message = data.getExtras().getString("name");


        Intent intent = new Intent(this, MyActivity.class);
        parseList(data.getExtras());

        PendingIntent pIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);

        Notification notification = new Notification.Builder(this)
                .setSmallIcon(R.drawable.ic_launcher)
                .setWhen(System.currentTimeMillis())
                .setContentTitle(message)
                .setContentText(message).setContentIntent(pIntent)
                .getNotification();

        notification.defaults |= Notification.DEFAULT_SOUND;
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.notify(R.string.app_name, notification);

        {

            PowerManager pm = (PowerManager) context
                    .getSystemService(Context.POWER_SERVICE);
            final PowerManager.WakeLock mWakelock = pm.newWakeLock(
                    PowerManager.FULL_WAKE_LOCK
                            | PowerManager.ACQUIRE_CAUSES_WAKEUP, "GCM_PUSH");
            mWakelock.acquire();
            notification.defaults|=Notification.DEFAULT_VIBRATE;


            Timer timer = new Timer();
            TimerTask task = new TimerTask() {
                public void run() {
                    mWakelock.release();
                }
            };
            timer.schedule(task, 5000);
        }

    }

2 个答案:

答案 0 :(得分:0)

首先,您的通知消息必须包含不同键中的值。

array( "title" => $title, "message" => $message )

上面的代码是php服务器端示例数组数据,它实际上被添加到'data'密钥,然后使用不同的服务器将数据发送到应用程序。我使用过GCM,从服务器消息接收数据时从bundle获取上述密钥数据。

Notification notification = new Notification.Builder(this)
            .setSmallIcon(R.drawable.ic_launcher)
            .setWhen(System.currentTimeMillis())
            .setContentTitle(title)
            .setContentText(message).setContentIntent(pIntent)
            .getNotification();

在这里,您可以检查setContentTitle是否用于添加“标题”,setContentText是“subTitle”或消息

答案 1 :(得分:-1)

您应该使用NotificationCompat.Builder来设置通知的标题,图标,内容等。这是一个例子:

private NotificationCompat.Builder mBuilder;
mBuilder = new NotificationCompat.Builder(
                    this).setSmallIcon(R.drawable.whitelogo)
                    .setLargeIcon(anImage)
                    .setContentTitle(title); //set smallIcon,largeIcon, contentTitle for your notification.

并添加通知:

Notification.Builder notification = new Notification.Builder(this)
                          .setSmallIcon(R.drawable.ic_launcher)
                          .setWhen(System.currentTimeMillis())
                          .setContentTitle(message)
                          .setContentText(message)
                          .setContentIntent(pIntent); 

notificationManager.notify(NOTIFICATION_ID_NOTIF, notification.build());

<强>更新

它不适用于您的情况,因为String中没有name密钥bundle,因此这将返回null:

message = data.getExtras().getString("name");

所以请在parseList方法中移动您的通知代码,因为您已经提取了所有值(ID,名称,照片,更新)。