Android 通过单击Parse中的推送通知打开活动

Android 通过单击Parse中的推送通知打开活动,android,notifications,push-notification,broadcastreceiver,parse-platform,Android,Notifications,Push Notification,Broadcastreceiver,Parse Platform,我想从Parse接收推送通知并打开一个列表活动,并在开始活动之前使用intent.putextra(“dataFromParse”)。 我可以接收推送,但只能通过以下方式打开主活动: PushService.setDefaultPushCallback(this, MainActivity.class); ParseInstallation.getCurrentInstallation().saveInBackground(); 我想将其作为默认设置,但也应该能够启动列表活动。 我也尝试过使用

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

PushService.setDefaultPushCallback(this, MainActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
我想将其作为默认设置,但也应该能够启动列表活动。 我也尝试过使用客户接收器,但是我只能在接收推送时直接打开活动,而不是单击它

manifest.xml:

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

我不确定的是,我应该如何在后台捕获推送,并在用户单击通知时说它应该打开具有特定意图的列表活动。putExtra(“dataFromParse”)。我应该在哪里编码,如何编码?在MainActivity中,在List activity中,或者对客户接收者执行其他操作?

解决了此问题,将默认活动设置为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发送推送:{“警报”:“测试”,“数据”:“存储1”}


@阿文德希望这会有所帮助。

试试这个。。。它工作得很好

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();
    }

根据以下方面的官方文件:

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


因此,当前接受的答案只考虑推送没有“uri”并且打开MainActivity的情况。如果您想打开一个具体的活动,可以为该活动定义一个
意向筛选器
,并在推送时发送该意向筛选器uri。

您应该在receiver类中重写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();
        }
    }
}

面对同样的问题,有什么解决办法吗?太棒了。我唯一的建议是检查
extras
是否为空。否则,这将非常有效。谢谢@stianboe请告诉我,如果我正在传递用户id指针以向指定用户发送通知,那么它不工作,而对于所有类型的android用户和channel=“channel”如何发送到指定用户我是否需要在MainActivity中添加此代码?在onCreate内部?您在哪里添加了此代码段..请发布自定义广播接收器的完整源代码。我想在单击通知时打开一个片段。现在我只能打开MainActivity。非常感谢。
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();
        }
    }
}