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