2016-01-06 3 views
0

У меня есть адаптер синхронизации, который выполняет некоторую операцию в фоновом режиме. Чтобы сообщить основную информацию о состоянии синхронизации, я использовал широковещательные приемники, поэтому моя активность способна принимать сообщения от адаптера синхронизации. Он работает нормально. Тем не менее, мне также нужно отображать уведомление о строке состояния Android, что указывает на некоторые результаты синхронизации.Системное уведомление от SyncAdapter: onPerformSync

Так что я написал простой метод ответственн для disaply уведомления системы:

private void sendNotification(Context ctx, String message) 
    { 
     Intent intent = new Intent(ctx, this.getClass()); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       PendingIntent.FLAG_ONE_SHOT); 

     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(ctx) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle("Mobile Shopping") 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setDefaults(Notification.DEFAULT_SOUND | Notification.FLAG_SHOW_LIGHTS) 
       .setLights(0xff00ff00, 300, 100) 
       .setPriority(Notification.PRIORITY_DEFAULT); 
       //.setContentIntent(pendingIntent); 

     NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 , notificationBuilder.build()); 
    } 

Тогда выше метод вызывается в onPerform синхронизации:

@Override 
    public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) 
    { 
     ................. 
     sendNotification(context, message); 
    } 

Контекст извлекается из конструктора. Он работает без каких-либо проблем, показывается уведомление.

Однако мне также необходимо показать основное действие после того, как пользовательский указатель на уведомлении. Поэтому я считаю, что мне нужно создать PendingIntent и передать его моему строителю уведомлений (как он комментируется в моем коде). Но передать основной объект активности моему адаптеру синхронизации? Уведомление может также отображаться после завершения автоматической синхронизации.

Любые советы?

+0

Если вы показываете уведомление, пользователь должен иметь возможность взаимодействовать с ним, открывая приложение, иначе показ уведомления не является полезным и не должен отображаться вообще. – Aegis

ответ

0

Итак, я понял. Решение состоит в том, чтобы создать ожидающие намерения таким образом:

Intent notificationIntent = new Intent(ctx, MainActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, 0, notificationIntent, 0); 

Так после того, как пользователь нажмет на уведомление, основное действие будет показано.

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