Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
ILNAR_93
Android
236 / 236 / 49
Регистрация: 19.01.2013
Сообщений: 1,855
Записей в блоге: 3
#1

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

14.07.2016, 16:56. Просмотров 557. Ответов 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):

Как остановить запущеный процес (сервис)?
Здравствуйте! Есть код класса, наследующего Servise public int...

Остановить сервис при выходе из приложения
Начал делать сервис для приложения и сразу возник костыль. Стартую сервис в...

Как вызвать Notification в Broadcast Receiver?
нужно чтобы по событию в классе Broadcast Receiver, а точнее в методе...

Как убрать маленькую иконку в правом нижнем углу notification?
Здравствуйте! Как убрать маленькую иконку в правом нижнем углу notification? ...

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

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

4
vxg
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
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
236 / 236 / 49
Регистрация: 19.01.2013
Сообщений: 1,855
Записей в блоге: 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
Модератор
3231 / 2034 / 319
Регистрация: 13.01.2012
Сообщений: 7,885
15.07.2016, 13:28 #4
ILNAR_93, разве ваш сервис это ресивер? +ресивер должен быть объявлен в манифесте
0
Pablito
2652 / 2134 / 726
Регистрация: 12.05.2014
Сообщений: 7,450
Завершенные тесты: 1
15.07.2016, 19:54 #5
Лучший ответ Сообщение было отмечено ILNAR_93 как решение

Решение

вобщем я проверил - у меня работает вот так
манифест
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
15.07.2016, 19:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2016, 19:54
Привет! Вот еще темы с решениями:

Как по нажатию кнопки остановить все потоки?
Есть программа которая считает файлы в указанной директории public class...

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

Остановить рисование по нажатию на правею кнопку мыши
Помогите остановить рисование линий по нажатию правой кнопки мыши void...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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