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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 138
#1

Автозапуск приложения после его закрытия - Программирование Android

04.12.2014, 21:07. Просмотров 1871. Ответов 16
Метки нет (Все метки)

Всем привет. Хочу сделать автозапуск приложения после его закрытия или сворачивания через некоторое время, как можно реализовать? возможно через сервисы, но не знаю как создать команду на запуск приложения из сервиса. Подскажите куда копать??? спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2014, 21:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Автозапуск приложения после его закрытия (Программирование Android):

Service автозапуск после закрытия родителя - Программирование Android
Такой вопрос назрел несущей. Есть актвити и сервис. и подружить бы мне б их хотелось. но есть проблема везкая. дружбу дружбою...

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

AlarmManager не работает после закрытия приложения - Программирование Android
Всем привет, сделал ресивер + нацепил туда alarm вот код в классе ресивера public void SetAlarm(Context context) { AlarmManager...

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

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

После закрытия приложения пользователем код в таймере продолжает выполняться - Программирование Android
Если запустить таймер в android с периодом в пять секунд выполнения действия и в функции run() накодить какой то процесс. То после закрытия...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kirawa
33 / 33 / 1
Регистрация: 12.11.2013
Сообщений: 336
05.12.2014, 07:03 #2
broadcast receiver
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
05.12.2014, 09:00 #3
Цитата Сообщение от mercooliy Посмотреть сообщение
Подскажите куда копать???
Еще не до конца освоил технологию(не добился полностью безглючности), но:
Назначаете таймер на отправку сообщения.
Делаете глобальный ресивер (в манифесте) для отлова этого сообщения и туда прописываете действия (открытие активити или запуск сервиса).
Таймер можно сделать одноразовый (через 10 минут) или многоразовый (каждые 10 минут).
С многоразовым аккуратнее (я на этом обломался) - если такой назначать при каждом "срабатывании" и запустить его 30 раз, получите 30кратное "ускорение" и занятость памяти. Я добивался того что "ура - все работает", но через час-три мобилка перегружалась от переполнения памяти...
Теоретически (до этого не добрался - отложил проект) многоразовый можно "остановить".
0
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 138
17.12.2014, 10:30  [ТС] #4
Да я придумал как сделать, черещ сервис запускаю открытие приложения, но есть два момента - я не могу запустить сервис при закрытии приложения, и почему то сервис тухнет при закрытии приложения, дааже есди запустить его при старте проги. То есть вопрос терь такой : как сервис запускать при закрытии или сворачивании приложения?
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
17.12.2014, 11:50 #5
Я же вроде довольно подробно описал...
1) ресивер запускает сервис или прямо твою форму/активити
2) назначаешь таймер (например каждые 5 минут или через 5 минут), который отсылает системе сигнал, который ловит ресивер.
3) таймер можно запускать на некоторые действия "сворачивания".
УЧТИ! не все способы закрытия программы можно "отловить" - например лонг-хоум и "закрыть" там не обрабатывается.
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
17.12.2014, 12:05 #6
Цитата Сообщение от Tester64 Посмотреть сообщение
не все способы закрытия программы можно "отловить" - например лонг-хоум и "закрыть" там не обрабатывается.
У всех активити которые на тот момент были в памяти вызывается onDestroy(). Можно попробовать в этом методе запускать сервис, который сразу же запустит активити обратно. Если придерживаться советов гугла, в частности о том, что должна быть единая точка входа и выхода в приложении т.е. какой-то экран, который запускается при запуске приложения и при нажатии на нем кнопки "Назад" приложение закрывается, - можно добавить код на перезапуск только в эту активити т.к. она всегда будет в стеке и при выгрузке всего приложения у нее вызовется метод onDestroy().
0
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 138
17.12.2014, 12:06  [ТС] #7
))пришли пжл код где ресивер работает, я прост не пойму что это за штука, я у ся сделал какой то ресивер broadcast receiver , но он на запуск работает при включении. мне бы тоже самое но каждый 10 минут к примеру
0
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
17.12.2014, 15:40 #8
Цитата Сообщение от mercooliy Посмотреть сообщение
пришли пжл код где ресивер работает, я прост не пойму что это за штука
Основы здесь: http://startandroid.ru/ru/uroki/vse-...treceiver.html
От себя добавлю - можно задавать прямо внутри активити или регистрировать глобальную в манифесте
Можно натравить НА ЛЮБУЮ (разумную) строку - например "com.my.helloworld.receiver123". Главное что-бы не сработало случайно на чужую программу.
Можно отсылать любые сообщения (у меня где-то есть примеры, но искать надо)
Нельзя отсылать системные имена (ресивер на звонок, смс) - их блокирует ОС.
Тебе нужен глобальный в манифесте.
Сообщения может отсылать таймер даже при закрытой программе. Если система поймает такое сообщение и обнаружит что у тебя в манифесте есть ресивер с ловушкой на это сообщение, оно разбудит ресивер, а тот уж сам решит что делать - сервис запускать или сразу активити.

Сегодня сам весь день изучаю таймеры, ресиверы и сервисы... у самого каша в голове (но в основном по таймерам - с ресиверами разобрался).
0
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 138
18.12.2014, 16:43  [ТС] #9
привет) вроде сделал ресивер в манифесте, создал класс для ресивера, потом сделал типа Intent intent = new Intent(MainActivity.BROADCAST_ACTION); это как я понял для запуска ресивера - когда эта команда будет, тогда зарабоатет ресивер?
терь вопрос вставяю вот такой код

Java
1
2
3
4
5
6
7
8
9
10
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
 
        Intent intent = new Intent();
        String pkg = "com.example.merch_v01";
        String cls = "com.example.merch_v01.MainActivity";
        intent.setClassName(pkg, cls); 
        startActivity(intent);
    }
а он ругается на startActivity , типа нету тут такого метода))), что я делаю не так и как правильно)) спасибо

Добавлено через 3 часа 48 минут
нашел в чем причина, теперь ресивер запускается, только толку от него всё равно мало, если сделать что то в этом духе
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
Timer timer;
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
 
            timer=new Timer();
            timer.schedule(new TaskMy(), 100000);
            context.startService(new Intent(context, runs.class)); 
            
       /////////////////////////
    }
 
       
      // Intent dialogIntent = new Intent(context, Player.class);
       //   dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
       //   context.startActivity(dialogIntent);    
        
    }
    class TaskMy extends TimerTask
       {       
 
        @Override
        public void run() {
            
            Intent intent = new Intent();
            String pkg = "com.example.merch_v01";
            String cls = "com.example.merch_v01.MainActivity";
            intent.setClassName(pkg, cls); 
           //    startActivity(intent);
    
            // TODO Auto-generated method stub
            
        }
       }
то ничего не запускается после закрытия программы (именно закрытия, а не сворачивания)
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
18.12.2014, 16:51 #10
mercooliy, в качестве контекста вы конечно же передаете активити? Как вы хотите чтобы работал код, который ссылается на активити, которой нет? Я выше писал как можно сделать без ресивера, но если хотите именно так - вам нужен сервис, но это все равно не поможет, если приложение принудительно будет выгружено из памяти. Сам не пробовал, но видел в некоторых приложениях в т.ч. в плеерах - в строке уведомлений всегда висит уведомление от приложения и если его закрыть приложение через некоторое время будет выгружено. Даже в справке пишут, что уведомление нужно для запрета выгрузки приложения и без него никак. Хотя это было еще во времена андроида версии 2.3. Может сейчас есть что-то проще.
0
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 138
18.12.2014, 16:55  [ТС] #11
спасибо что откликнулся))) да я сначала делал сервисом и работало в методе onPause () (onDestroy() ваще не хотел ничего запускать) есть два но
1. он почему то не всегда срабатывал даже когда я не убивал прогу, то есть если просто свернут и смотреть он запустится, а если жестко лазить всё подряд открывать, то он как то про это дело забывает)))
2. сервис по непонятным мне причинам при закрытии прогу убивается вместе с ней, что для меня новость, потому что я точно помню как делал для себя примерчик сервисом который никуда не уходил даже после закрытия проги, хотя версия дроида там была другая
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
18.12.2014, 16:59 #12
Я особо не разбирался с сервисами, но по-моему там есть какие то параметры (в манифесте вроде) с помощью которых можно "отделить" сервис от приложения.
0
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 138
18.12.2014, 17:02  [ТС] #13
а может подскажешь как можно узнать какие проги сейчас запущены в андроиде?
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
18.12.2014, 17:16 #14
Если сток: настройки-приложения-работающие.

Добавлено через 43 секунды
можно еще через DDMS смотреть в ide.
0
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 138
18.12.2014, 17:16  [ТС] #15
)))не, программно, получить массив запущенных прог
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2014, 17:16
Привет! Вот еще темы с ответами:

Как создать массив который сохраняет свои значение даже после закрытия приложения - Программирование Android
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Как создать массив который сохраняет свои значение даже после...

Автозапуск приложения - Программирование Android
Автозапуск не срабатывает.. Android 4.1.2 Android 5.0.2 <?xml version="1.0" encoding="utf-8"?> <manifest...

Функция закрытия приложения - Программирование Android
Подскажите пожалуйста как правильно должен выглядеть метод для закрытия приложения при нажатии на кнопку? public class MainActivity...

Не освобождаются ресурсы после закрытия Activity - Программирование Android
Очередная непонятная проблема. Делаю в активити setContentView() с большим количеством ImageView. В результате когда запускаю новую, а для...


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

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

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