Я довольно новичок в Android GCM и уведомлении. Теперь, я застрял на том, как обновление SQLite при закладке пользователь кнопки в уведомленииPendingIntent для обновления sqlite
Сценарий
- Мой сервер будет отправлять GCM на GCM сервер
- GCM сервер отправить сообщение на устройство
- После того, как IntentService получил сообщение, создайте новую запись сообщения в локальном sqlite.
- Создать новый вид уведомления в панели уведомлений с 2 кнопки «Запустить приложение», «Отметить как прочитанное» и «Отклонить»
Кнопка «Запуск приложения» проста, каждый учебник покажет, как начать новую активность с помощью PendingIntent. Но для «Mark as read» и «Dismiss» я не знаю, как его реализовать (а английский не мой родной язык, я не могу найти ключевое слово для поиска ответа ... Итак, извините, если этот вопрос был спросить раньше)
- для «Пометить как прочитанные» кнопку, я хочу вызвать службу или приложение подкласса обновить SQLite, а затем отменить уведомление без необходимости запуска деятельность
- для «Отклонить» кнопку, я хочу, чтобы просто отменить уведомление
Это код, который имеет
@Override
protected void onHandleIntent(Intent intent)
Notification.Builder builder = new Notification.Builder(this);
builder.setContentTitle("Title of the notification");
builder.setSmallIcon(R.drawable.notification_icon);
builder.setStyle(new Notification.BigTextStyle().bigText("The message that I want to show"));
builder.setAutoCancel(true);
Intent i1 = new Intent(this, MainActivity.class);
PendingIntent pi1 = PendingIntent.getActivity(this, UNIQUE_ID, i1, PendingIntent.FLAG_ONE_SHOT);
PendingIntent pi2 = null; // To mark as read, I don't how to write it yet.
PendingIntent pi3 = null; // To dismiss, I don't how to write it yet.
builder.addActon(R.drawable.launch_app_icon, "Launch app", pi1);
builder.addActon(R.drawable.mark_as_read_icon, "Mark as read", pi2);
builder.addActon(R.drawable.dismiss_icon, "Dismiss", pi3);
Notification notification;
if (DeviceHelper.getAndroidSDK() < 16) {
notification = builder.getNotification();
} else {
notification = builder.build();
}
NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(UNIQUE_ID, notification);
}
Я также попытался установить PI2, чтобы быть, как это
Intent i2 = new Intent(MyApp.USER_DISMISS_NOTIFICATION);
PendingIntent pi2 = PendingIntent.getBroadcast(this, UNIQUE_ID, i2, PendingIntent.FLAG_ON_SHOT);
А потом слушать местного вещания в заявке подкласса
public final class MyApp extends Application {
public static final USER_DISMISS_NOTIFICATION = "UserDismissNotification";
public void onCreate() {
super.onCreate();
LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Local broadcast received, update database
}
}, new IntentFilter(USER_DISMISS_NOTIFICATION));
}
}
Но OnReceive в BroadcastReceiver никогда не дозвонились.
Любое предложение приветствуется, спасибо!
Если вы хотите отправить намерение вещательного приемника, вы должны использовать метод PendingIntent.getBroadcast и не PendingIntent.getActivity –