0

我正在构建一个支持使用 phonegap/cordova 和这个插件推送通知的 android 应用程序。该插件有一个 onMessage() 方法,只要收到推送通知就会触发该方法,该方法将一个 json 对象返回给我的 javascript 插件。但是,我希望此方法仅在单击状态栏上的通知时返回 json。

这是我的 onMessage() 方法:

protected void onMessage(Context context, Intent intent) {
    String message = "", title = "", type = "";
    int msgctn = 0, schoolid = 0, studentid = 0, contentid = 0;

    // Extract the payload from the message
    Bundle extras = intent.getExtras();
    if (extras != null) {
      try
      {
          message = extras.getString("message");
          title = extras.getString("title");
          type = extras.getString("type");
          msgctn = Integer.parseInt(extras.getString("msgctn"));
          schoolid = Integer.parseInt(extras.getString("schoolid"));
          studentid = Integer.parseInt(extras.getString("studentid"));
          contentid = Integer.parseInt(extras.getString("contentid"));

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

        json.put("message", message);
        json.put("type", type);
        json.put("contentid", contentid);
        json.put("schoolid", schoolid);
        json.put("studentid", studentid);

        GCMPlugin.sendJavascript( json );
        // Send the MESSAGE to the Javascript application
      }
      catch( JSONException e)
      {
        Log.e(ME + ":onMessage", "JSON exception");
      }

      Intent notificationIntent = new Intent(context, App4.class);
      notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
      PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

      NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
          .setContentText(message)
          .setContentTitle(title)
          .setSmallIcon(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? R.drawable.icon : android.R.drawable.ic_dialog_info)
          .setAutoCancel(true)
          .setContentIntent(contentIntent)
          .setWhen(System.currentTimeMillis())
          //.setDefaults(Notification.DEFAULT_ALL)
          .setLights(-16711681, 2000, 1000)
          .setNumber(msgctn)
          .setSound(Uri.parse("android.resource://"+ getPackageName() + "/" + R.raw.notifsound));

      Notification notification = builder.build();
      NotificationManager notificationManager = getNotificationManager(context);
      notificationManager.notify(1, notification);

    }

我必须创建一个通知对象才能在状态栏上显示它。单击通知时,它会调用 Intent App4,这会显示我的应用程序的 index.html,但我想执行一些 javascript 函数或使用有效负载将一些 json 对象返回到我的应用程序。也许我可以调用其他函数来执行此操作,而不是意图,但我是 android 世界的新手,不知道该怎么做。

任何人都可以帮助我吗?

4

1 回答 1

1

您可以做的是将 JSON 数据作为附加内容放入您正在创建的 notificationIntent Intent 中。您可以通过调用您的 notificationIntent 的putExtras()方法来执行此操作,或者手动执行此操作。无论您采用哪种方式,您都需要将您想要的数据作为附加信息输入到 notificationIntent 中。

然后,当您的 App4 活动开始时,您需要在onNewIntent()onCreate()中捕获 Intent并检查 Intent 或 Bundle 是否具有您想要的附加功能。如果是,那么您创建 JSON 对象并将其传递给您的 JavaScript 应用程序,就像您在粘贴的 onMessage() 方法中所做的那样。

您还必须在 onMessage() 方法中删除将 JSON 对象发送到您的 javascript 应用程序的代码。

我希望这会有所帮助,它应该可以工作,但我不在我的电脑旁,无法实际测试代码。

于 2013-01-05T20:18:55.797 回答