Откройте действие, нажав на push-оповещение из Parse

Я хочу получить push-уведомление из Parse и открыть операцию List и использовать aim.putextra( "dataFromParse" ) перед началом действия. Я могу получить push, но только откройте 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>

Push.java:

public class Push extends BroadcastReceiver {

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

Вещь, о которой я не уверен, заключается в том, как я должен зафиксировать нажатие в фоновом режиме и сказать, что он должен открыть действие "Список" с помощью специального намерения .putExtra( "dataFromParse" ), когда пользователь нажимает уведомление. Где я должен его кодировать и как? В MainActivity, в активности List или сделать что-то другое с приемником клиента?

Ответ 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);
}           

Затем просто отправьте push с json: { "alert": "Test", "data": "store1" }

@arvindwill Надеюсь, это поможет.

Ответ 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

Согласно официальной документации Parse по https://www.parse.com/docs/android/guide#push-notifications-customizing-notifications:

Если ваш push не имеет параметра "uri", onPushOpen будет вызывать активность запуска вашего приложения.

Итак, текущий принятый ответ учитывает только тот случай, когда ваш push не имеет "uri", и он открывает вашу MainActivity. Если вы хотите открыть конкретную Деятельность, вы можете определить intent-filter для этого Действия и отправить uril url намерения в свой push.

Ответ 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();
        }
    }
}