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

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

Войти
Регистрация
Восстановить пароль
 
justjew
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 45
#1

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

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

Как "отлавливать" уведомления всех приложений?
Хочу сделать приложение, которое будет на ПК уведомлять об уведомлениях на андройде
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2016, 13:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приложение, которое будет на ПК уведомлять об уведомлениях на телефоне (Программирование Android):

Можно ли сделать приложение, которое будет брать RSS-ленту с моего сайта? - Программирование Android
Можно ли сделать приложение, Которое будет брать Rss ленту с моего сайта, И возможно ли, Что оно будет От туда Картинки брать?

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

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

Приложение, которое будет выводить изображения (фотографии) как в галерее - C#
Пишу приложение, которое будет выводить изображения(фотографии) как в галерее... Как лучше все это реализовать? Помогите кодом, может у...

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

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

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

...но если серьезно... это было первое что я написал в первые месяцы изучения андроида!
1) написать сервер на языке под Win. Я избрал Делфи. Работало криво, но работало...
2) найти исходники простого клиента на яве-андроиде, способном отправлять строки.
Проблема была в том что не знал как удерживать сокет и приходилось после каждого сообщения переконективаться, но система РАБОТАЛА! Это было до того как я узнал о ЛогКэт-е...
justjew
0 / 0 / 0
Регистрация: 27.10.2015
Сообщений: 45
08.01.2016, 12:54  [ТС] #4
Я решил взять c#. Как отправлять разберусь.
Нужно пока что просто отловить уведомления на андройде и где-нибудь сохранить их содержимое.
Pablito
2472 / 1917 / 595
Регистрация: 12.05.2014
Сообщений: 6,741
Завершенные тесты: 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
Дальше самостоятельно )
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
08.01.2016, 17:30 #6
Цитата Сообщение от Паблито Посмотреть сообщение
оставлю тут куски кода, вдруг кому-то пригодится.
У меня чой-то не сработало!
Или руки кривые... или не полный код...
Не особо представляю себе зачем подобное нужно, но хотел "поймать"!
может доступ дополнительный нужен?
И можете подробнее что КОНКРЕТНО сервис должен ловить?
Pablito
2472 / 1917 / 595
Регистрация: 12.05.2014
Сообщений: 6,741
Завершенные тесты: 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"
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
08.01.2016, 17:45 #8
Цитата Сообщение от Паблито Посмотреть сообщение
Надо перезапустить сервис в настройках телефона. И что бы он был после этого ON.
У меня 4.03... Не нашел кнопку "перезапустить". Могу убить... Могу перезапустить программу (после кила в хоуме). Сервис востанавливается...

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

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

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

Не по теме:

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

InessaSuper
97 / 4 / 0
Регистрация: 09.05.2015
Сообщений: 61
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.

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

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

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

Можно вас попросить выложить где-нибудь архив с исходниками этого вашего тестового проекта, чтобы я могла сравнить, что у меня не так с моим проектом?
Pablito
2472 / 1917 / 595
Регистрация: 12.05.2014
Сообщений: 6,741
Завершенные тесты: 1
25.05.2017, 18:26 #15
https://github.com/PablitoUA/HelloAccessibilityService
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2017, 18:26
Привет! Вот еще темы с ответами:

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

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

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

Как написать приложение которое будет обращаться к веб серверу? - C#
Как написать приложение которое будет выглядеть в виде winforms но будет обращаться через интернет к серверу Дело в том что тема моей...


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

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

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