Гость
Форумы / Android [игнор отключен] [закрыт для гостей] / BroadcastReceiver - как не дать его остановить? / 21 сообщений из 21, страница 1 из 1
18.11.2014, 16:59
    #38809865
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
В приложении зарегистрирован BroadcastReceiver, у приложения есть разрешение RECEIVE_BOOT_COMPLETED. Получается что устанавливаю приложение, запускаю его и оно может слушать системные оповещения, перегружаю устройство - тоже все хорошо - приложение попрежнему слушает. Но это все до тех пор пока в системных настройках на моем приложении не нажать кнопку "Остановить" -после этого приложение уже не "слушает" и перезагрузка ничего не меняет. Что можно сделать чтобы "слушатель" убивался только удалением приложения?
...
Рейтинг: 0 / 0
19.11.2014, 09:17
    #38810328
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Пытался "запустить" сервисом с параметрами START_STICKY, START_REDELIVER_INTENT так этот сервис тоже останавливается навечно.
Но у меня на смарте установлено приложение AccuWeather - там вот его остановить не удается - через 5 сек после остановки оно снова запущено. Как это сделано?
...
Рейтинг: 0 / 0
19.11.2014, 09:25
    #38810334
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола ПитерскийКак это сделано?
Разбери его, посмотри, какие приемники и какие права у него?

П.С. Оно случаем не системное?
...
Рейтинг: 0 / 0
19.11.2014, 09:30
    #38810336
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
wadmanМикола ПитерскийКак это сделано?
Разбери его, посмотри, какие приемники и какие права у него?

П.С. Оно случаем не системное?

Да системное - я его удалить не смог - только отключить (деактивировать). А что для системных такое можно сделать?

Еще - я умею смотреть исходники с помощью dex2jar.bat + jd-gui.exe но не знаю чем можно просмотреть манифест и каталог res\values - чем это можно смотреть?
...
Рейтинг: 0 / 0
19.11.2014, 09:40
    #38810347
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
...
Рейтинг: 0 / 0
19.11.2014, 09:45
    #38810351
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола ПитерскийА что для системных такое можно сделать?
Не знаю точную технологию, но вполне (и я такое встречал) это приложение подписано не только на загрузку, но еще на десяток других событий и проверяет/восстанавливает убитые подписки...
...
Рейтинг: 0 / 0
19.11.2014, 10:47
    #38810438
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Вот что у него в манифесте, относящееся к системе:

Код: 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.
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />

<activity 
<intent-filter>                
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.EMBED" />
<action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />

<receiver
<intent-filter>                
 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
 <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="com.android.vending.INSTALL_REFERRER" />
<action android:name="android.intent.action.ACTION_SHUTDOWN" />
<action android:name="android.intent.action.BOOT_COMPLETED" />



Вроде как эти вещи подозрительные - погуглил но вобще непонятно что они делают:
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.EMBED" />
...
Рейтинг: 0 / 0
19.11.2014, 10:59
    #38810450
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола Питерский<category android:name="android.intent.category.DEFAULT" />
Дефолтная активити, ничего странного.

Микола Питерский<category android:name="android.intent.category.EMBED" />
String EMBED_CATEGORY categories: the ability to run at the higher level (parent) Activity. "Android.intent.category.EMBED" - тоже ничего необычного.

Микола ПитерскийНо это все до тех пор пока в системных настройках на моем приложении не нажать кнопку "Остановить" -после этого приложение уже не "слушает" и перезагрузка ничего не меняет.
Вообще странная ситуация, не помню, чтоб у меня слушатель прибивался. Только если насильно его отписать программой типа Autostarts. Смотри в логах, что происходит.
...
Рейтинг: 0 / 0
19.11.2014, 11:03
    #38810458
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола Питерский<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.EMBED" />

это к интентам, фильтрам относится.
...
Рейтинг: 0 / 0
19.11.2014, 11:05
    #38810462
Джибс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
у меня, кстати, RECEIVE_BOOT_COMPLETED

нормально слушается и после прибивания проги.

подозреваю, что для этого рессивера и запущенный сервис не обязателен, ведроид сам найдет по интент фильтрам и запустит
...
Рейтинг: 0 / 0
19.11.2014, 11:41
    #38810514
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
wadmanВообще странная ситуация, не помню, чтоб у меня слушатель прибивался. Только если насильно его отписать программой типа Autostarts. Смотри в логах, что происходит.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class Receiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("NP", "intent.getAction() "+ intent.getAction());

       <receiver android:name="Receiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />  
                <action android:name="android.intent.action.PHONE_STATE" />
            </intent-filter>
        </receiver>



Слушатель подписан к событиям через манифест. Все работает замечательно даже после перезагрузки устр-ва (программу не нужно повторно запускать), но если запустить системную прогу "настройки\приложения" выбираем это приложение и нажать кнопку "остановить", которая рядом с "удалить" - то слушатель уже не работает и после перезагрузки тоже не работает, а вот если там же ниже нажать кнопку "запуск" то слушатель начинает работать. Проверил это уже на нескольких устройствах 4.2 - 5 версии андроида. Не понимаю - почему у вас он попрежнему работает ???
...
Рейтинг: 0 / 0
19.11.2014, 11:44
    #38810519
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола ПитерскийНе понимаю - почему у вас он попрежнему работает ???
Вон о чем речь. логично же, приложение отключается СОВСЕМ. А системные не все можно отключить.
...
Рейтинг: 0 / 0
19.11.2014, 11:52
    #38810540
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
т.е. выхода из этой ситуации нет? Или надо 2 разных приложения чтоб они друг друга запускали, но как тогда отловить событие "остановки" приложения, а нельзя ли в этом же приложении запустить сервис с другим URL и в другом процессе - тогда при остановке приложения такой сервис не остановится?
...
Рейтинг: 0 / 0
19.11.2014, 12:17
    #38810590
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола Питерскийт.е. выхода из этой ситуации нет?
Нет, отключено, значит отключено. И даже старания другими приложениями тут ни к чему не приведут, т.к. они не смогут запустить отключенное приложение. Даже если системное приложение пытается запустить обычное отключенное, оно все равно не запустится.
...
Рейтинг: 0 / 0
19.11.2014, 12:37
    #38810629
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
wadmanМикола Питерскийт.е. выхода из этой ситуации нет?
Нет, отключено, значит отключено. И даже старания другими приложениями тут ни к чему не приведут, т.к. они не смогут запустить отключенное приложение. Даже если системное приложение пытается запустить обычное отключенное, оно все равно не запустится.

Я понимаю что по этой кнопке "Остановить" приложение не "Отключается" а просто выгружается из памяти, т.к. такое "отключенное" приложение можно потом успешно запустить его же ярлычком из рабочего стола. А если приложение не запущено - то его слушатель в очереди на получение сообщений не стоит. То же самое - если установить приложение, но не запустить - слушатель также "глухой".
...
Рейтинг: 0 / 0
19.11.2014, 13:22
    #38810696
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола ПитерскийЯ понимаю что по этой кнопке "Остановить" приложение не "Отключается" а просто выгружается из памяти, т.к. такое "отключенное" приложение можно потом успешно запустить его же ярлычком из рабочего стола.
Может от перевода зависит... Но если только останавливается и его можно запустить, то все равно без дебаггера и логов ничего не скажешь.
...
Рейтинг: 0 / 0
19.11.2014, 13:53
    #38810748
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
wadmanМикола ПитерскийЯ понимаю что по этой кнопке "Остановить" приложение не "Отключается" а просто выгружается из памяти, т.к. такое "отключенное" приложение можно потом успешно запустить его же ярлычком из рабочего стола.
Может от перевода зависит... Но если только останавливается и его можно запустить, то все равно без дебаггера и логов ничего не скажешь.

Так есть и кнопка "отключение" приложения - тогда, как я понял, такое приложение переносится в отдельную песочницу вместе с его файлами и там ждет когда его обратно восстановят и ярлык такого приложения исчезает с рабочих столов и естественно что эти приложения не запущены и их невозможно запустить.

А я именно про кнопку "Остановить" вел речь и чесно говоря удивлен что она слушателей прибивает, правда наверное никто не пробовал выгружать приложение по finish() и поэтому приложения всегда в памяти остаются и "слушают".
...
Рейтинг: 0 / 0
19.11.2014, 13:58
    #38810753
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола ПитерскийА я именно про кнопку "Остановить" вел речь и чесно говоря удивлен что она слушателей прибивает, правда наверное никто не пробовал выгружать приложение по finish() и поэтому приложения всегда в памяти остаются и "слушают".
Видимо не знаком с механизмом слушателей? Тогда хотя-бы предположи, как слушатель работает после рестарта смарта? Ведь приложение еще не запускалось.
...
Рейтинг: 0 / 0
19.11.2014, 14:09
    #38810770
Микола Питерский
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
wadmanМикола ПитерскийА я именно про кнопку "Остановить" вел речь и чесно говоря удивлен что она слушателей прибивает, правда наверное никто не пробовал выгружать приложение по finish() и поэтому приложения всегда в памяти остаются и "слушают".
Видимо не знаком с механизмом слушателей? Тогда хотя-бы предположи, как слушатель работает после рестарта смарта? Ведь приложение еще не запускалось.

Я раньше думал что при установке приложения система смотрит какие слушатели объявлены в приложении и при наступлении какого-то конкретного события в системе она запускает все приложения, у которых объявлен этот слушатель и по цепочке по приоритетам или всем одновременно передает это оповещение.

А теперь я вообще запутался и понятия не имею как это происходит...
...
Рейтинг: 0 / 0
19.11.2014, 14:14
    #38810780
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола ПитерскийЯ раньше думал что при установке приложения система смотрит какие слушатели объявлены в приложении и при наступлении какого-то конкретного события в системе она запускает все приложения, у которых объявлен этот слушатель и по цепочке по приоритетам или всем одновременно передает это оповещение.
Именно так и происходит. И потому как из троих ты первый с таким столкнулся, придется тебе исследовать этот вопрос. :)
wadmanбез дебаггера и логов ничего не скажешь.
Может у тебя там исключение вываливается...
...
Рейтинг: 0 / 0
02.12.2014, 11:29
    #38822317
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
BroadcastReceiver - как не дать его остановить?
Микола Питерский, кое-что накопал, посмотри http://developer.android.com/intl/ru/reference/android/content/Intent.html#FLAG_INCLUDE_STOPPED_PACKAGES
...
Рейтинг: 0 / 0
Форумы / Android [игнор отключен] [закрыт для гостей] / BroadcastReceiver - как не дать его остановить? / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]