0

Я довольно новичок в Android GCM и уведомлении. Теперь, я застрял на том, как обновление SQLite при закладке пользователь кнопки в уведомленииPendingIntent для обновления sqlite

Сценарий

  1. Мой сервер будет отправлять GCM на GCM сервер
  2. GCM сервер отправить сообщение на устройство
  3. После того, как IntentService получил сообщение, создайте новую запись сообщения в локальном sqlite.
  4. Создать новый вид уведомления в панели уведомлений с 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 никогда не дозвонились.

Любое предложение приветствуется, спасибо!

ответ

0

Я делаю это работает следующим образом

A. Создание BroadcastReceiver

public class NotificationReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.i("Dev", "Received"); 
    } 
} 

B. Регистрация получить на объект Application **

<application 
    android:name="com.example.app" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/application_name" 
    android:theme="@android:style/Theme.Holo.NoActionBar" 
    android:hardwareAccelerated="true" > 

    <activity 
     android:name="com.example.app.MainActivity" /> 

    <receiver android:name="com.example.NotificationReceiver" /> 
</application> 

C. создают в ожидании намерения следующим образом и добавить до уведомления

Intent i = new Intent(this, NotificationReceiver.class); 
PendingIntent pi = PendingIntent.getActivity(this, UNIQUE_ID, i, PendingIntent.FLAG_ONE_SHOT); 

notification.addAction(R.drawable.button_icon, "Do something", pi); 

Теперь, когда пользователь наберет кнопку, будет вызван OnReceive NotifiationReceiver, после чего я смогу обновить db, запустить активность или базу на параметре комплекта намерений.

Надеется, что это поможет

+0

Если вы хотите отправить намерение вещательного приемника, вы должны использовать метод PendingIntent.getBroadcast и не PendingIntent.getActivity –

Смежные вопросы