【问题标题】:Open activity by clicking on the push notification from Parse通过单击 Parse 的推送通知打开活动
【发布时间】:2014-04-03 15:41:31
【问题描述】:

我想从 Parse 接收推送通知并打开一个 List 活动并在开始活动之前使用 intent.putextra("dataFromParse")。 我能够接收推送,但只能通过以下方式打开 MainActivity:

PushService.setDefaultPushCallback(this, MainActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();

我希望将此作为默认设置,但也应该能够启动 List 活动。 我也尝试过使用客户接收器,但是我只能在收到推送时直接打开活动,而不是点击它。

manifest.xml:

<receiver android:name="com.example.Push android:exported="false">
    <intent-filter>
        <action android:name="com.example.UPDATE_STATUS" />
    </intent-filter>
</receiver>

推送.java:

public class Push extends BroadcastReceiver {

  @Override
  public void onReceive(Context context, Intent intent) {
      //Start activity
     }
}

我不确定的是我应该如何在后台捕获推送,并说它应该在用户单击通知时以特定的 intent.putExtra("dataFromParse") 打开 List 活动。我应该在哪里编码以及如何编码?在 MainActivity 中,在 List 活动中,还是对客户接收器做其他事情?

【问题讨论】:

  • 面临同样的问题,有什么解决办法吗?

标签: android notifications push-notification broadcastreceiver parse-platform


【解决方案1】:

已解决,默认活动为 MainActivity,但检查意图,如果“com.parse.Data”中有内容,我将启动一个新意图。

Intent intent = getIntent();
Bundle extras = intent.getExtras();
String jsonData = extras.getString("com.parse.Data");
JSONObject json = new JSONObject(jsonData);
String pushStore = json.getString("data");
if(pushStore!=null) {
    Intent pushIntent = new Intent();
    pushIntent.setClassName(MainActivity.this, "package.name.List");
    pushIntent.putExtra("store", pushStore);
    startActivity(pushIntent);
}           

然后只需发送带有 json 的推送:{ "alert" : "Test", "data" : "store1" }

@arvindwill 希望这会有所帮助。

【讨论】:

  • 太棒了。我唯一建议的是检查extras 是否为空。否则,这将完美运行。谢谢!
  • @stianboe 你能告诉我如果我传递 user_id 指针来向特定用户发送通知,那么它就不能正常工作,而它对于所有类型为 android 和 channel =“channel”的用户都可以正常工作,如何发送到具体的
  • 我需要在 MainActivity 中添加这段代码吗?在 onCreate 里面?
  • 您在哪里添加此代码 sn-p..请发布您的自定义广播接收器的完整源代码。我想在通知点击时打开一个片段。现在我只能打开 MainActivity。谢谢!
【解决方案2】:

试试这个……效果很好……

try {
        Intent intent = getIntent();
        Bundle extras = intent.getExtras();
        if (extras != null) {
            String jsonData = extras.getString("com.parse.Data");
            JSONObject json;
            json = new JSONObject(jsonData);
            String pushStore = json.getString("alert");
            data.setText(pushStore);
        }
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

【讨论】:

    【解决方案3】:

    根据https://www.parse.com/docs/android/guide#push-notifications-customizing-notifications 上的官方 Parse 文档:

    如果您的推送没有“uri”参数,onPushOpen 将调用您应用程序的启动器活动。

    因此,当前接受的答案仅考虑了您的推送没有“uri”并打开您的 MainActivity 的情况。如果您想打开一个具体的 Activity,您可以为该 Activity 定义一个 intent-filter,并在您的推送中发送该意图过滤器 uri。

    【讨论】:

      【解决方案4】:

      您应该在接收器类中覆盖 onPushOpen(...) 方法:

      import com.parse.ParsePushBroadcastReceiver;
      
      public class PushIntentReceiver extends ParsePushBroadcastReceiver {
      
          @Override
          protected void onPushOpen(Context context, Intent intent) {
              JSONObject pushData = null;
      
              try {
                  pushData = new JSONObject(intent.getStringExtra(KEY_PUSH_DATA));            
                  Intent pushIntent = new Intent(context, YourActivity.class);        
                  pushIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                  pushIntent.putExtra("store", pushData.getString("data"));
                  context.startActivity(pushIntent);
      
              } catch (JSONException e) {
                  e.printStackTrace();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多