11

我想要从Parse接收推送通知并打开List活动,并在开始活动前使用intent.putextra(“dataFromParse”)。 我能够通过使用该接收推,但只开在MainActivity:通过单击解析的推送通知打开活动

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> 

Push.java:

public class Push extends BroadcastReceiver { 

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

我不知道是我应该怎么捕捉在后台推送,并说,它应该打开的事当用户单击通知时,具有特定intent.putExtra(“dataFromParse”)的List活动。我应该在哪里编码以及如何编码?在MainActivity中,在List活动中,或者与客户接收者做其他事情?

+0

面临着同样的问题,因为任何解决办法吗? – arvindwill

回答

13

解决它,默认活动为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”}

@arvindwill希望这将有助于。

+0

太棒了。唯一我建议的是检查'extras'是否为空。否则,这是完美的。谢谢! – Charx

+0

@stianboe可以告诉,如果即时通讯user_id指针发送通知给特定用户,那么它不工作,而它工作正常的所有用户的类型android和通道=“通道”如何发送到特定的 – Erum

+3

我需要吗?在MainActivity中添加此代码?在onCreate里面? –

2

https://www.parse.com/docs/android/guide#push-notifications-customizing-notifications尝试......它完美....

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

按照官方解析文档:

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

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

0

你应该在你的接收机类重写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(); 
     } 
    } 
}