Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,701
Записей в блоге: 3
#1

Как остановить сервис по нажатию на Notification - Программирование Android

14.07.2016, 16:56. Просмотров 385. Ответов 4
Метки нет (Все метки)

в сервисе создаю сообщение:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentTitle(getResources().getString(R.string.app_name));
        builder.addAction(R.drawable.ic_action_action_search, getResources().getString(R.string.destroy), null);
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            builder.setSmallIcon(R.drawable.ic_action_1);
        } else {
            builder.setSmallIcon(R.mipmap.ic_launcher);
        }
 
        Notification notification;
 
        if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
            notification = builder.getNotification();
        else
            notification = builder.build();
        startForeground(777, notification);
как сделать так что бы при нажатии на сообщение

Java
1
builder.addAction(R.drawable.ic_action_action_search, getResources().getString(R.string.destroy), null);
сервис останавливался и сообщение убиралось?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2016, 16:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как остановить сервис по нажатию на Notification (Программирование Android):

Как остановить запущеный процес (сервис)? - Программирование Android
Здравствуйте! Есть код класса, наследующего Servise public int onStartCommand(Intent intent, int flags, int startId) { tTask = new...

Остановить сервис при выходе из приложения - Программирование Android
Начал делать сервис для приложения и сразу возник костыль. Стартую сервис в onCreate активити, сервис постоянно должен работать на...

Как вызвать Notification в Broadcast Receiver? - Программирование Android
нужно чтобы по событию в классе Broadcast Receiver, а точнее в методе onReceive() запустить метод уведомления например такое...

Как убрать маленькую иконку в правом нижнем углу notification? - Программирование Android
Здравствуйте! Как убрать маленькую иконку в правом нижнем углу notification? Добавлено через 13 часов 51 минуту То есть нужно...

Как остановить таймер по нажатию кнопки? - C++ Builder
Сделал эффект вращение детали на нажатие Button5. Как сделать чтобы при повторном нажатии Button5 таймер останавливался? ...

Как остановить цикл по нажатию Escape - Delphi
Есть бесконечный цикл. В этом цикле то минимизируются, то максимизируются разные окна (много окон). Этот цикл бесконечный. нужно...

4
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,578
14.07.2016, 19:52 #2
ILNAR_93, сообщение при нажатии само уйдет если при создании сообщения билдеру сказать
Java
1
builder.setAutoCancel(true);
что касается остановки сервиса - наверное надо в билдере сделать что то такое
Java
1
2
3
4
5
        Intent i = new Intent(ctx, xxx.class); //xxx-фильтр при вызове останавливает наш сервис
        
        PendingIntent pi = PendingIntent.getBroadcast(ctx, id, i, PendingIntent.FLAG_UPDATE_CURRENT);
...
        builder.setContentIntent(pi);
0
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,701
Записей в блоге: 3
15.07.2016, 13:12  [ТС] #3
vxg,

Не завершает сервис:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class ConnectedService extends Service {
 
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }
 
    @Override
    public void onCreate() {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        Intent i = new Intent(this, ConnectedService.class); //xxx-фильтр при вызове останавливает наш сервис
        PendingIntent pi = PendingIntent.getBroadcast(this, 777, i, PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentTitle(getResources().getString(R.string.app_name));
        builder.addAction(R.drawable.ic_action_action_search, getResources().getString(R.string.destroy), pi);
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            builder.setSmallIcon(R.drawable.ic_action_1);
        } else {
            builder.setSmallIcon(R.mipmap.ic_launcher);
        }
        Notification notification;
 
        if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
            notification = builder.getNotification();
        else
            notification = builder.build();
        startForeground(777, notification);
    }
 
}
0
vxg
Модератор
3169 / 1972 / 221
Регистрация: 13.01.2012
Сообщений: 7,578
15.07.2016, 13:28 #4
ILNAR_93, разве ваш сервис это ресивер? +ресивер должен быть объявлен в манифесте
0
Pablito
2477 / 1961 / 611
Регистрация: 12.05.2014
Сообщений: 6,866
Завершенные тесты: 1
15.07.2016, 19:54 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
вобщем я проверил - у меня работает вот так
манифест
XML
1
2
3
4
<service
            android:name=".MyService"
            android:exported="false">
        </service>
в активити
Java
1
2
3
4
        Intent intent = new Intent(this, MyService.class);
        intent.setAction("START_PLEASE");
        startService(intent);
//        finish();
класс MyService
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import android.app.Notification;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.support.v4.app.NotificationCompat;
 
public class MyService extends Service {
    private static final String START_PLEASE = "START_PLEASE";
    private static final String STOP_PLEASE = "STOP_PLEASE";
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        if (intent != null) {
            final String action = intent.getAction();
            if (START_PLEASE.equals(action)) initSomething();
            else if (STOP_PLEASE.equals(action)) stopSelf();
        }
        return super.onStartCommand(intent, flags, startId);
    }
 
    private void initSomething() {
        final Intent intent = new Intent(getBaseContext(), MyService.class);
        intent.setAction(STOP_PLEASE);
        PendingIntent pi = PendingIntent.getService(getBaseContext(), 42, intent, 0);
        //
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentTitle(getResources().getString(R.string.app_name));
        builder.addAction(R.drawable.ic_search, "LOL STOP", pi);
        builder.setSmallIcon(R.drawable.ic_star__24px);
        Notification notification = builder.build();
        startForeground(777, notification);
    }
 
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}
ну названия самих Action's заменить на более мудреные, но для теста пойдет
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2016, 19:54
Привет! Вот еще темы с ответами:

Остановить цикл по нажатию enter - C#
Здравствуйте.Цикл.Программа печатает текст,мне нужно остановить цикл по нажатию enter.

Остановить рисование по нажатию на правею кнопку мыши - C++ Builder
Помогите остановить рисование линий по нажатию правой кнопки мыши void __fastcall TForm1::Image1MouseDown(TObject *Sender, ...

Остановить работу какого-либо кода по нажатию кнопки - Visual Basic .NET
Здравствуйте Уважаемые! Подскажите, как быть в такой ситуации: По нажатию кнопки выполняется некий код, после этого программа ждет...

debugger exception notification - как с ним бороться? - Delphi
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
15.07.2016, 19:54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru