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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 130
04.12.2014, 21:07     Автозапуск приложения после его закрытия #1
Всем привет. Хочу сделать автозапуск приложения после его закрытия или сворачивания через некоторое время, как можно реализовать? возможно через сервисы, но не знаю как создать команду на запуск приложения из сервиса. Подскажите куда копать??? спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2014, 21:07     Автозапуск приложения после его закрытия
Посмотрите здесь:

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

Сегодня сам весь день изучаю таймеры, ресиверы и сервисы... у самого каша в голове (но в основном по таймерам - с ресиверами разобрался).
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 130
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
            
        }
       }
то ничего не запускается после закрытия программы (именно закрытия, а не сворачивания)
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.12.2014, 16:51     Автозапуск приложения после его закрытия #10
mercooliy, в качестве контекста вы конечно же передаете активити? Как вы хотите чтобы работал код, который ссылается на активити, которой нет? Я выше писал как можно сделать без ресивера, но если хотите именно так - вам нужен сервис, но это все равно не поможет, если приложение принудительно будет выгружено из памяти. Сам не пробовал, но видел в некоторых приложениях в т.ч. в плеерах - в строке уведомлений всегда висит уведомление от приложения и если его закрыть приложение через некоторое время будет выгружено. Даже в справке пишут, что уведомление нужно для запрета выгрузки приложения и без него никак. Хотя это было еще во времена андроида версии 2.3. Может сейчас есть что-то проще.
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 130
18.12.2014, 16:55  [ТС]     Автозапуск приложения после его закрытия #11
спасибо что откликнулся))) да я сначала делал сервисом и работало в методе onPause () (onDestroy() ваще не хотел ничего запускать) есть два но
1. он почему то не всегда срабатывал даже когда я не убивал прогу, то есть если просто свернут и смотреть он запустится, а если жестко лазить всё подряд открывать, то он как то про это дело забывает)))
2. сервис по непонятным мне причинам при закрытии прогу убивается вместе с ней, что для меня новость, потому что я точно помню как делал для себя примерчик сервисом который никуда не уходил даже после закрытия проги, хотя версия дроида там была другая
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.12.2014, 16:59     Автозапуск приложения после его закрытия #12
Я особо не разбирался с сервисами, но по-моему там есть какие то параметры (в манифесте вроде) с помощью которых можно "отделить" сервис от приложения.
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 130
18.12.2014, 17:02  [ТС]     Автозапуск приложения после его закрытия #13
а может подскажешь как можно узнать какие проги сейчас запущены в андроиде?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.12.2014, 17:16     Автозапуск приложения после его закрытия #14
Если сток: настройки-приложения-работающие.

Добавлено через 43 секунды
можно еще через DDMS смотреть в ide.
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 130
18.12.2014, 17:16  [ТС]     Автозапуск приложения после его закрытия #15
)))не, программно, получить массив запущенных прог
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
18.12.2014, 17:22     Автозапуск приложения после его закрытия #16
http://stackoverflow.com/a/3479710 Насколько понял вот этот код возвращает массив процессов:
Java
1
2
ActivityManager activityManager = (ActivityManager) context.getSystemService(ACTIVITY_SERVICE);
List<RunningAppProcessInfo> runningAppProcesses = activityManager.getRunningAppProcesses();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2014, 09:45     Автозапуск приложения после его закрытия
Еще ссылки по теме:

Кнопки удаляются после закрытия приложения Android
Как создать массив который сохраняет свои значение даже после закрытия приложения Android
Android Не удается остановить воспроизведение потока после закрытия и открытия приложения
Как реализовать автозапуск приложения при включении устройства? Basic4Android
Android Автозапуск приложения

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

Или воспользуйтесь поиском по форуму:
mercooliy
6 / 6 / 0
Регистрация: 12.05.2013
Сообщений: 130
23.12.2014, 09:45  [ТС]     Автозапуск приложения после его закрытия #17
спс, правда всё равно проблема в том что сервис не работает при закрытом приложении (это бы всё решало) , то есть и ресивер не работает если выключить приложение. У кого нить работает сервис отдельно то приложения?
Yandex
Объявления
23.12.2014, 09:45     Автозапуск приложения после его закрытия
Ответ Создать тему
Опции темы

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