Как работать с существующими кнопками действий
Я получаю уведомления от пользователя с помощью actionButtons, отправленных из сервиса. Как я могу иметь дело с этими кнопками и обрабатывать их события?
protected boolean onNotificationProcessing(final OSNotificationReceivedResult receivedResult) {
OverrideSettings overrideSettings = new OverrideSettings();
// here I am getting the data sent thtough oneSignal
final JSONObject additionalData = receivedResult.payload.additionalData;
// here I am getting my buttons
final List<OSNotificationPayload.ActionButton> actionButtons = receivedResult.payload.actionButtons;
overrideSettings.extender = new NotificationCompat.Extender() {
@Override
public NotificationCompat.Builder extend(NotificationCompat.Builder builder) {
try {
// Here I am creating my own button and adding it to the notification
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:" + phoneNumber));
PendingIntent pendingIntentCall = PendingIntent.getActivity(MyService.this, 12345, intent, PendingIntent.FLAG_UPDATE_CURRENT);
builder.addAction(R.drawable.phone_notif,getString(R.string.call),pendingIntentCall);
} catch (Exception e) {
}
return builder;
}
};
return true
}
Как я могу обработать событие для actionButtons, которые получены от одного сигнала? Они появляются, но когда я нажимаю на них, они действуют так, как будто я нажимаю на уведомление...
1 ответ
Android SDK OneSignal предоставляет обработчики для получения уведомлений. Вы должны установить идентификаторы для ваших кнопок, чтобы отличать одну от другой. Вы также можете отправить дополнительные данные (например, URL для посещения или некоторые другие метаданные) в виде хэша под data
ключ. Из их документации:
class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler {
// This fires when a notification is opened by tapping on it.
@Override
public void notificationOpened(OSNotificationOpenResult result) {
OSNotificationAction.ActionType actionType = result.action.type;
JSONObject data = result.notification.payload.additionalData;
String customKey;
if (data != null) {
customKey = data.optString("customkey", null);
if (customKey != null)
Log.i("OneSignalExample", "customkey set with value: " + customKey);
}
if (actionType == OSNotificationAction.ActionType.ActionTaken)
Log.i("OneSignalExample", "Button pressed with id: " + result.action.actionID);
// The following can be used to open an Activity of your choice.
// Replace - getApplicationContext() - with any Android Context.
// Intent intent = new Intent(getApplicationContext(), YourActivity.class);
// intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
// startActivity(intent);
// Add the following to your AndroidManifest.xml to prevent the launching of your main Activity
// if you are calling startActivity above.
/*
<application ...>
<meta-data android:name="com.onesignal.NotificationOpened.DEFAULT" android:value="DISABLE" />
</application>
/*
}
}