2015-09-22 3 views
1

Я пытаюсь создать уведомление с кнопкой отмены, но когда я нажимаю на него, ничего не происходит. Это мой код:Android: Как создать уведомление с кнопкой отмены?

private NotificationCompat.Builder notificationBuilder; 

public void createNotification() { 
    notificationBuilder = new NotificationCompat.Builder(service); 
    notificationBuilder.setProgress(100, 0, false); 
    notificationBuilder.setAutoCancel(true); 
    Intent intent = OrderProcessingService_.intent(service).actionCancelUpload(basket.getPhotobook_id()).get(); 
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent pendingIntent = PendingIntent.getService(service, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); 
    notificationBuilder.setContentIntent(pendingIntent); 
    notificationBuilder.setSmallIcon(R.drawable.ic_action_file_cloud_upload); 

    NotificationCompat.Action cancelAction = new NotificationCompat.Action(R.drawable.ic_action_navigation_close, service.getString(R.string.cancel_upload), pendingIntent); 
    notificationBuilder.setContentTitle(service.getString(R.string.notification_upload_title)); 
    notificationBuilder.setContentText(service.getString(R.string.notification_uploading_subtext, Util.getTitle(basket.getPhotobook()))); 
    notificationBuilder.addAction(cancelAction); 
    addBigPicture(notificationBuilder); 
service.startForeground(1, notificationBuilder.build()); 
} 
+0

Изменить эту строку notificationBuilder.addAction (cancelAction); to notificationBuilder.setDeleteIntent (cancelAction); и скажите мне, что вы получите – penta

+0

Если изменение notificationBuilder.addAction (cancelAction); to notificationBuilder.setDeleteIntent (cancelAction); У меня больше нет кнопки отмены. И я не добавил событие onClick() к кнопке, я думал, что это не обязательно с флагом autoCancel = true. – IrApp

+0

Извините, что я отредактировал свои вопросы, потому что я не включил последнюю строку. Я думаю, проблема в том, что уведомление отменяется, но на переднем плане намерение все еще работает, как я могу вызвать stopForeground, когда нажата кнопка отмены? – IrApp

ответ

0

Вы должны будете держать ID уведомления, а затем вызвать

NotificationManager nMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    nMgr.cancel(notification); 
+0

Это не сработало. Похоже, что уведомление отменяется, но в фоновом режиме все еще запущено, служба не останавливается. – IrApp

0

Я рад разместить его! После работы всю ночь я что-то нашел. Итак, вот мы идем!

  1. Создайте файл макета xml для вашего уведомления.

  2. Создайте уведомление, используя Notification.Builder. После добавления все, что вы хотите (иконки, звуки и т.д.) это сделать:

    //R.layout.notification_layout is from step 1 
    
    RemoteViews contentView=new RemoteViews(ctx.getPackageName(), R.layout.notification_layout); 
    
    setListeners(contentView);//look at step 3 
    
    notification.contentView = contentView; 
    
  3. Создать метод setListeners. Внутри этого метода вы должны написать следующее:

    //HelperActivity will be shown at step 4 
    
    Intent radio=new Intent(ctx, packagename.youractivity.class); 
    radio.putExtra("AN_ACTION", "do");//if necessary 
    
    PendingIntent pRadio = PendingIntent.getActivity(ctx, 0, radio, 0); 
    //R.id.radio is a button from the layout which is created at step 2 
    view.setOnClickPendingIntent(R.id.radio, pRadio); 
    
    //Follows exactly my code! 
    Intent volume=new Intent(ctx, tsapalos11598712.bill3050.shortcuts.helper.HelperActivity.class); 
    volume.putExtra("DO", "volume"); 
    
    //HERE is the whole trick. Look at pVolume. I used 1 instead of 0. 
    PendingIntent pVolume = PendingIntent.getActivity(ctx, 1, volume, 0); 
    view.setOnClickPendingIntent(R.id.volume, pVolume); 
    
  4. Для моих требований я использовал HelperActivity, который реагирует на намерения. Но для вас я не думаю, что это необходимо.

Если вы хотите получить полный исходный код, вы можете просмотреть его или загрузить с моего git repo. Код предназначен для личного использования, поэтому не ожидайте, что прочитайте великолепный код с большим количеством комментариев. https://github.com/BILLyTheLiTTle/AndroidProject_Shortcuts

ВСЕ ВЫШЕ, ОТВЕТЫ НА ВОПРОС ОБ УТВЕРЖДЕНИИ СОБЫТИЙ ИЗ РАЗНЫХ КНОПКОВ.

об отмене уведомления перенаправить вас здесь

Как очистить уведомления в Android

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

Источник: Android notification with buttons on it

+0

Это не сработало, наконец, я удалил кнопку в данный момент :(Как я уже сказал, прогресс уведомления остановлен, но передний план все еще работает. – IrApp

+0

с помощью кнопки отмены вам нужно использовать ожидающие намерения и перенаправить на какую-либо активность где вам нужно отменить уведомление с идентификатором уведомления. – KishuDroid

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