Уведомления Android с кнопками на нем

Я пытаюсь сделать уведомление с 2 кнопками на нем:

  • один возвращает меня к деятельности
  • другой закрывает его

Кто-нибудь получил представление о том, как поймать событие нажатия кнопки (помните, что действие приостановлено)?

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

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. Код предназначен для личного использования, поэтому не ожидайте, что прочитайте великолепный код с большим количеством комментариев. https://github.com/BILLyTheLiTTle/AndroidProject_Shortcuts

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

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

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

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

Что касается ICS, вопрос прост ответить, потому что требуемое поведение отражает уведомление по умолчанию: вы можете закрыть уведомление, прокручивая его вправо, и вы можете определить, какую активность отправлять пользователю, когда он нажимает его просто используя PendingIntent :

 // The PendingIntent to launch our activity if the user selects this // notification. Note the use of FLAG_CANCEL_CURRENT so that, if there // is already an active matching pending intent, cancel it and replace // it with the new array of Intents. PendingIntent contentIntent = PendingIntent.getActivities(this, 0, makeMessageIntentStack(this, from, message), PendingIntent.FLAG_CANCEL_CURRENT); 

код, взятый из http://developer.android.com/guide/topics/ui/notifiers/notifications.html

Если вы хотите назначить определенное намерение кнопке:

 views.setOnClickPendingIntent(R.id.your_button_id, pendingIntent); 

Я полагаю, что вам нужно только одно намерение отправляться при нажатии кнопки, поэтому вам нужно ИЗБЕЖАТЬ настройки основного уведомления

 notification.contentIntent = yourPendingIntent; 

В противном случае (если вы установите «notification.contentIntent = pendingIntent;», как обычно) будут вызваны оба намерения, которые могут быть не такими, которые вы хотите / ожидаете от пользователя.

Если вы все еще хотите, чтобы другие части уведомления вызывали это общее намерение (или любое другое), вы можете использовать один и тот же метод назначения назначения за просмотр, как указано выше. Не забудьте установить

 android:clickable="true" 

на любую точку зрения, на которую вы хотите отслеживать onClick ().

Вы можете отслеживать эти намерения своими дополнительными функциями в своей деятельности. Если вы вызываете свою основную / ракетную деятельность, вы будете отслеживать их здесь (как это происходит из javadoc для этого метода):

 @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Bundle data = intent.getExtras(); if (data != null && data.containsKey(YOUR_INTENT_KEY_SOURCE_CONSTANT)) { // process your notification intent } // go on with smth else } 

Вы можете просто добавить кнопки действий в своем Notification , установив действие на свой Notification.Builder и определяя PendingIntent для каждого действия

ниже приведен пример кода:

  NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("My notification") .setContentText("Hello World!") .addAction(R.drawable.action_posetive,"posetive",PendingIntent.getActivity(0,intent,0)) .addAction(R.drawable.action_clear,"clear",PendingIntent.getActivity(0,intent,0)); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(0, mBuilder.build()); 

Здесь есть полный пример.

  //Add this code to onCreate or some onclick Buttton NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()); long when = System.currentTimeMillis(); builder.setSmallIcon(R.drawable.ic_notification); Intent notificationIntent = new Intent(getApplicationContext(), notificationActivity.class).putExtra("notification", "1"); PendingIntent contentIntent = PendingIntent.getActivity(getApplicationContext(), 1, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(contentIntent); Notification notification = builder.getNotification(); notification.when = when; RemoteViews remoteViews = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notification_view); remoteViews.setTextViewText(R.id.tvName, "New Name"); listener(remoteViews,getApplicationContext()); notification.contentView = remoteViews; notification.flags |= Notification.FLAG_AUTO_CANCEL; manager.notify(1, notification); 

а затем вы можете определить метод слушателя:

  public void listener(RemoteViews remoteViews, Context context) { // you have to make intetns for each action (your Buttons) Intent intent = new Intent("Accept"); Intent intent2 = new Intent("Reject"); PendingIntent pendingIntent = PendingIntent.getBroadcast(context,1,intent,0); PendingIntent pendingIntent2 = PendingIntent.getBroadcast(context,1,intent2,0); // add actions here ! IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("Accept"); intentFilter.addAction("Reject"); BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("Accept")){ Toast.makeText(context, "Accepted !!", Toast.LENGTH_SHORT).show(); } else if(intent.getAction().equals("Reject")) { Toast.makeText(context, "Rejected !!", Toast.LENGTH_SHORT).show(); } } }; context.registerReceiver(receiver,intentFilter); remoteViews.setOnClickPendingIntent(R.id.ivRequest,pendingIntent); remoteViews.setOnClickPendingIntent(R.id.ivReject,pendingIntent2); } 

и вот макет notification_view, чтобы окупить ваше уведомление.

         
  • Android Notification Sound
  • Откройте приложение после нажатия кнопки «Уведомление»
  • Истекает ли идентификатор регистрации GCM?
  • Несколько уведомлений о том же действии
  • Обнаруживать новое уведомление для Android
  • Проверьте, включены ли локальные уведомления в IOS 8
  • Извлечение текста извещных, contentView или contentIntent
  • я хочу показать уведомление в 8:00 ежедневно
  • Как реализовать устаревшие методы уведомления
  • Уведомления с несколькими линиями в Интернете, такие как приложение Gmail
  • проблема с уведомлением о намерении андроида
  • Давайте будем гением компьютера.