Откройте действие, нажав на 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();
}
}
}