0

Всем привет! Создаю свое уведомление

Файл разметрки:

    <ImageView
        android:id="@+id/notify_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/str_empty"
        android:src="@drawable/icon_notify_config" />

    <TextView
        android:id="@+id/notify_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="4dp"
        android:layout_marginTop="2dp"
        android:layout_toRightOf="@+id/notify_image"
        android:singleLine="true"
        android:textStyle="bold"
        android:text="" />

    <Button
        android:id="@+id/btnBtnClearNotify"
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/notify_title"
        android:layout_marginRight="2dp"
        android:gravity="center_vertical|center_horizontal"
        android:text="@string/clear" />

    <TextView
        android:id="@+id/notify_text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/notify_image"
        android:layout_marginLeft="2dp"
        android:layout_marginTop="2dp"
        android:layout_toLeftOf="@+id/btnBtnClearNotify"
        android:layout_marginRight = "3dp"          
        android:singleLine="false"
        android:text="" />

Код:

private void SetSrvcNotification(String title, String msg){

    notifyMgr = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |  Intent.FLAG_ACTIVITY_NEW_TASK);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);      
    stackBuilder.addParentStack(MainActivity.class);
    stackBuilder.addNextIntent(intent);

    contentIntent = stackBuilder.getPendingIntent(0,
                PendingIntent.FLAG_UPDATE_CURRENT);

    RemoteViews contentView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notify_view);      
    contentView.setTextViewText(R.id.notify_title, title);
    contentView.setTextViewText(R.id.notify_text, msg);
    contentView.setImageViewResource(R.id.notify_image, R.drawable.icon_notify_config);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this);

        mBuilder.setSmallIcon(R.drawable.icon_notify_config);    
        mBuilder.setContentIntent(contentIntent);
    notify = mBuilder.build();

        notify.contentView = contentView;

    notify.flags |=  Notification.FLAG_NO_CLEAR;

    notifyMgr.notify(NOTIFY_ID, notify);

}

Уведомление запускается из сервиса и висит постоянно в процессе его работы. Сервис в него выкидывает некую инфу о своем состоянии. Загвоздка в том что не получается назначить отдельный обработчик на кнопку btnBtnClearNotify. По нажатию на которой хотелось бы чистить строку notify_text. Т.е. чтобы, например, из обработчика слалось бы удведомление, которое сервис ловит и обновляет уведомление.

Подскажите как сделать (навесить отдельный обработчик на кнопку!). Сейчас что на кнопку кликаешь что на всё уведомление, результат один - старт родительской активности.

1
  • Короче всё в топку!!!! Опять два дня убиты фиг знает на что! Вся эта хрень с кнопками и прочей порнографией работает только в высших версиях андроида. Т.е. формально на 2.м андроиде вы можете добавить и кнопку и чо угодно ы уведосление, оно отобразится там, но использовать хрен что получится. Я просто в бешенстве!!! :( Единственное что вроде бы можно адекватно использовать в custom notify для 2го андроида - прогресс бар ну и вывод текста. Поубивал бы!!!!!!!!
    – Demon051
    9 апр 2014 в 11:15

1 ответ 1

2

Слушатель нажатия на кнопку в нотификации надо регистрировать в манифесте и оформлять в виде перехватчика бродкаста:

<receiver android:name="MyActivity$MyButtonListener" />

public static class MyButtonListener extends BroadcastReceiver {
   @Override
   public void onReceive(Context context, Intent intent) {
   }

Нотификацию оформляем так:

Intent myIntent = new Intent(this, myButtonListener.class);
PendingIntent pendingMyIntent = PendingIntent.getBroadcast(this, 0, myIntent, 0);
notificationView.setOnClickPendingIntent(R.id.myButton, pendingMyIntent);
5
  • а имя "MyActivity$MyButtonListener" каким образом получается? ну т.е. MyActivity - это зачем и к чему, что-то не врубаюсь... :( и какое событие в рисивере ловить, на что его подписывать?
    – Demon051
    8 апр 2014 в 10:50
  • наверное все же не так что-то делаю значит сделал отдельный класс рисивера. оформил как сказано нотификацию. в итоге - нажатие на кнопку равно нажатию на панель уведомления. никакого события в рисивер не приходит. но на экране появляется главная активити приложения. чего не так делаю? :)
    – Demon051
    8 апр 2014 в 11:17
  • @Demon051 я вам только наметил путь решения, а дальше вы уж сами (надеялся). Погуглите что ли - например здесь. Обратите внимание, что вызов бродкаста зависит от версии Аndroid'а
    – Barmaley
    8 апр 2014 в 13:04
  • честное слово, гуглил и яндексил весь день перепробовал кучу вариантов. пока ни один не прокатил :( буду дальше пытаться...
    – Demon051
    8 апр 2014 в 13:16
  • В общем пробовал и это. Не знаю что там и как имел в виду автор. Но у меня кнопка как бы не выделяется из состава всего View, помещенного в уведомление. Она не может получить фокус. Поэтому нажать на нее не представляется возможным, а следовательно и послать от нее какой-то броадкаст-интент. Странное что-то происходит. Возможно я неправильно xml-формирую для custom intent или неверно его запихиваю в notification...
    – Demon051
    9 апр 2014 в 6:50

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.