Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
#1

Приложение, которое будет на ПК уведомлять об уведомлениях на телефоне - Программирование Android

07.01.2016, 13:56. Просмотров 893. Ответов 17
Метки нет (Все метки)

Как "отлавливать" уведомления всех приложений?
Хочу сделать приложение, которое будет на ПК уведомлять об уведомлениях на андройде
http://www.cyberforum.ru/android-dev/thread1146086.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2016, 13:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Приложение, которое будет на ПК уведомлять об уведомлениях на телефоне (Программирование Android):

Создать приложение, которое будет запускать Word
Помогите с работой в Word. Задание следующее: Создать приложение, которое...

Консольное приложение. Создать меню, которое будет располагаться по середине
Всем привет. Как всегда курсовая :wall: Нужно создать меню, которое будет...

PHP приложение которое будет собират информация с других сайтов
Доброе утро! Люди, дайте совет: как написать php приложение которое будет...

Создать консольное приложение, которое будет считывать числа из файла
Помогите разобраться в чём дело, программа должна работать, а при запуске...

Как сделать WPF приложение которое будет открываться в браузере?
Доброго времени суток, не подскажете как сделать WPF приложение которое будет...

17
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 1
07.01.2016, 15:23 #2
А ты уверен что сможешь его написать?
Отлавливать оповещения на телефоне - это одно. Их потом как-то надо на ПК передавать.
На ПК что-то должно принимать это все, то есть надо будет писать свой сервис и на компе.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
07.01.2016, 18:47 #3
Цитата Сообщение от Паблито Посмотреть сообщение
надо будет писать свой сервис и на компе
Не просто сервис, а клиент-серверную систему! Некие PUSH уведомления...

...но если серьезно... это было первое что я написал в первые месяцы изучения андроида!
1) написать сервер на языке под Win. Я избрал Делфи. Работало криво, но работало...
2) найти исходники простого клиента на яве-андроиде, способном отправлять строки.
Проблема была в том что не знал как удерживать сокет и приходилось после каждого сообщения переконективаться, но система РАБОТАЛА! Это было до того как я узнал о ЛогКэт-е...
1
justjew
0 / 0 / 3
Регистрация: 27.10.2015
Сообщений: 51
08.01.2016, 12:54  [ТС] #4
Я решил взять c#. Как отправлять разберусь.
Нужно пока что просто отловить уведомления на андройде и где-нибудь сохранить их содержимое.
0
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 1
08.01.2016, 16:10 #5
Я оставлю тут куски кода, вдруг кому-то пригодится.
1. заводим accessibility service, назовем его для примера NotificationCatcher
Кликните здесь для просмотра всего текста
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
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
 
public class NotificationCatcher extends AccessibilityService {
 
    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
        if (event.getEventType() == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) {
            final String packagename = String.valueOf(event.getPackageName());
            Log.i("***", "onAccessibilityEvent " + packagename);
        }
    }
 
    @Override
    public void onInterrupt() {
    }
 
    @Override
    protected void onServiceConnected() {
        Log.i("***", "onServiceConnected ");
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED;
        info.notificationTimeout = 100;
        info.feedbackType = AccessibilityEvent.TYPES_ALL_MASK;
        setServiceInfo(info);
    }
}


2. Прописываем его в манифест
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
        <service
            android:name=".NotificationCatcher"
            android:label="Notification catch service"
            android:enabled="true"
            android:exported="false"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>
            <meta-data
                android:name="Any.Unique.Name"
                android:resource="@xml/notif_catcher" />
        </service>


3. в папке res/xml создаем файл notif_catcher.xml
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeNotificationStateChanged"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:notificationTimeout="100" />


4. в onCreate() главной активити запускаем сервис
Кликните здесь для просмотра всего текста
Java
1
2
        Intent intent = new Intent(MainActivity.this, NotificationCatcher.class);
        startService(intent);


После запуска приложения на телефоне в Setting - Accessibility появится новая служба с названием "Notification catch service" (которое мы прописали в манифесте).
Эту службу надо ручками запустить. Наверняка есть способ стартовать ее из проложения, но мне было лень копать дальше. Я удовлетворился вариантом с ручным стартом.

Все. Теперь после старта приложения оно будет следить за нотификациями.
По прибытии уведомления в сервисе будет срабатывать метод onAccessibilityEvent()

PROFIT
Дальше самостоятельно )
5
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
08.01.2016, 17:30 #6
Цитата Сообщение от Паблито Посмотреть сообщение
оставлю тут куски кода, вдруг кому-то пригодится.
У меня чой-то не сработало!
Или руки кривые... или не полный код...
Не особо представляю себе зачем подобное нужно, но хотел "поймать"!
может доступ дополнительный нужен?
И можете подробнее что КОНКРЕТНО сервис должен ловить?
0
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 1
08.01.2016, 17:42 #7
Надо перезапустить сервис в настройках телефона. И что бы он был после этого ON.
После этого можно еще раз запустить программу.

Он ловит событие когда приходит новое оповещение.

Добавлено через 9 минут
Я ж говорю - сделал чисто принципиально, что бы знать на будущее что такое существует.
Метод очень сырой, надо дотачивать. Делал по ресурсам:
http://developer.android.com/intl/ru...y/service.html
http://developer.android.com/intl/ru...tyService.html
Важно! Настройки сервиса прописываются дважды - в методе onServiceConnected() и в манифесте строкой android:resource="@xml/notif_catcher"
1
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
08.01.2016, 17:45 #8
Цитата Сообщение от Паблито Посмотреть сообщение
Надо перезапустить сервис в настройках телефона. И что бы он был после этого ON.
У меня 4.03... Не нашел кнопку "перезапустить". Могу убить... Могу перезапустить программу (после кила в хоуме). Сервис востанавливается...

Открываю чужую прогу - заставляю ее добавить и убрать нотиф - сообщение в логкэт не доходит!

я так понимаю - по этому принципу PushBullet сообщения в хром отсылает...
0
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 1
08.01.2016, 18:00 #9
Я тестировал на эмуляторе с версией 4.1.1 (API 16) и на самсунге с 5-й версией.
Перезапустить, имелось ввиду нажать в настройках этого сервиса кнопку ON/OFF

У меня после запуска приложения с этим сервисом, сам сервис приходится запускать из настроек. Я прочитал что надо именно ручками, ибо это "Специальные возможности".
Вот после запуска сервиса из настроек я стартую другую программу, которая по клику генерирует уведомление и сервис срабатывает нормально. В моем примере он в лог пишет название пакета, который создал уведомление. Тег в Log.i свой надо поставить.
1
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
08.01.2016, 18:16 #10
Цитата Сообщение от Паблито Посмотреть сообщение
нажать в настройках этого сервиса кнопку ON/OFF
Похоже в настройках 4.03 просто нет кнопки ON/OFF...
может позже попробую на эмуляторах... Спасибо за код!
(про тег в Log я догадался! )
0
Pablito
08.01.2016, 18:26
  #11

Не по теме:

у меня это выглядит так
Приложение, которое будет на ПК уведомлять об уведомлениях на телефоне
И еще раз
- запускаю программу
- стартую сервис ручками в настройках
- снова запускаю программу, смотрю запущен ли сервис (у меня он оказывается отключенным) и включаю ео снова
- переключаюсь или стартую другую прогу с уведомлениями и тыкаю там кнопку "отправить уведомление"
- оно приходит и тут же в логе я вижу как сработал метод onAccessibilityEvent() в сервисе

0
InessaSuper
97 / 4 / 11
Регистрация: 09.05.2015
Сообщений: 70
24.05.2017, 09:27 #12
Мне удалось воспроизвести корректную работу со службой Accessibility Service с помощью кода, предложенного в 5-м сообщении.

Единственное, что у меня не получилось - это вывести свое описание (description), задаваемое в меню Спецвозможности для созданной мною службы.


Вот файлы notif_catcher.xml и string. xml в папке res/xml, которые я использую:

notif_catcher.xml
XML
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service>
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeWindowStateChanged"
    android:accessibilityFeedbackType= "feedbackAllMask"
    android:notificationTimeout="100" 
    android:canRetrieveWindowContent="true"
    android:description="@string/accessibility_service_description"    
</accessibility-service>
string. xml
XML
1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="accessibility_service_description">The service is used for game interaction with other apps.</string>
</resources>
В опциях настроек для созданной мной службы в меню Спецнастройки по-прежнему выводится сообщение по-умолчанию "No description provided" вместо заданного мной описания accessibility_service_description.

Подскажите, пожалуйста, что еще нужно сделать, чтобы заданное мной описание корректно выводилось в опциях меню Спецнастройки для созданной мной службы?
0
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 1
24.05.2017, 17:22 #13
вобщем час копания в исходниках и интернетах дал следующий результат
XML
1
2
3
            <meta-data
                android:name="android.accessibilityservice"
                android:resource="@xml/notif_catcher" />
атрибут name должен быть именно такой и тогда описание появится
0
InessaSuper
97 / 4 / 11
Регистрация: 09.05.2015
Сообщений: 70
25.05.2017, 10:43 #14
Я поправила в своем манифесте атрибут android:name, но описание для созданной мною службы почему-то так и не появилось.

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

Насколько я поняла, у вас при запуске этого тестового проекта при запуске приложения на устройстве описание появляется для создаваемой службы.

Можно вас попросить выложить где-нибудь архив с исходниками этого вашего тестового проекта, чтобы я могла сравнить, что у меня не так с моим проектом?
0
Pablito
2646 / 2128 / 726
Регистрация: 12.05.2014
Сообщений: 7,439
Завершенные тесты: 1
25.05.2017, 18:26 #15
https://github.com/PablitoUA/HelloAccessibilityService
1
InessaSuper
97 / 4 / 11
Регистрация: 09.05.2015
Сообщений: 70
21.08.2017, 11:56 #16
Подскажите, пожалуйста, как можно для запущенной мной службы в обработчике onAccessibilityEvent() отследить, что в данный момент была нажата кнопка Home на устройстве?
0
rainboww1988
4 / 4 / 0
Регистрация: 28.11.2016
Сообщений: 24
21.08.2017, 15:37 #17
Мне вообще кажется такая вещь бесполезной. Телефон - это мобильность, наоборот все оповещения приходят на него, а что бы с телефона приходили на ПК..не знаю. Тем более мне кажется не так просто это реализуется
0
konsul777
3 / 3 / 2
Регистрация: 13.11.2012
Сообщений: 253
30.11.2017, 00:37 #18
данное приложение "отлавливает" события получения новых уведомлений, и кроме того определяет пакет-адресат.
А непосредственно к самим сообщениям можно получить доступ?
0
30.11.2017, 00:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2017, 00:37
Привет! Вот еще темы с решениями:

Создать приложение, которое будет работать точно как Т-триггер
Нужно создать приложение,которое будет работать точно как Т-триггер. T-триггер...

Разработать приложение, которое будет автоматически выдавать случайные фразы
Помогите пожалуйста решить задачи по php, завтра екзамен!!!(наброски,...

Создайте приложение которое будет менять шрифт, размер. Delphi 10
По нажатию на соответствующие кнопки (шрифт, размер, начертание, цвет)...

Приложение, которое будет выводить изображения (фотографии) как в галерее
Пишу приложение, которое будет выводить изображения(фотографии) как в...


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

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

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