Я создаю календарь задач конфиденциальности.
Он использует диспетчер сигналов тревоги и уведомления. Когда приложение закрыто, служба сигнализации, по-видимому, работает и вызывает уведомления. Уведомление имеет два действия — «установить как выполненное» и «отменить». Когда я нажимаю "установить как выполненное" в диспетчере задач, в списке задач ничего нет, потому что память освободилась, потому что приложение закрыто. Возникает исключение нулевого указателя.
Нормально ли использовать постоянно работающую службу для хранения данных, в которой можно пометить задачу как выполненную?
Правильно ли я понимаю, что WhatsApp использует постоянно работающий сервис с прослушивателем входящих сообщений?
P.S. Извините за мой плохой английский. Это Google Translate.
Я не могу использовать базу данных, так как она зашифрована. Только когда я открываю приложение, оно расшифровывается, и список задач загружается в оперативную память.
Я не могу использовать общие настройки, так как есть вероятность утечки информации при подключении к ПК.
UPD: Насколько я понимаю, нужно внести изменения в Action BroadcastReceiver
TaskManager
public Task getTaskById(int id) {
Log.d("TaskCalendarLog", "Task manager getByID: task id = " + id);
int index = 0;
Log.d("TaskCalendarLog", "Task list = " + taskList);
for (Task task:taskList) {
Log.d("TaskCalendarLog", "Task manager for: id = " + id);
if (task.getId() == id) {
return taskList.get(index);
}
index++;
}
return null;
}
TaskAlarmReciever
Intent setDoneIntent = new Intent(context, ActionSetTaskDoneBroadcastReceiver.class);
setDoneIntent.putExtra("id", taskId);
PendingIntent setDonePendingIntent = PendingIntent.getBroadcast(context, 0, setDoneIntent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Action cancel = new NotificationCompat.Action(R.drawable.ic_cancel, "Cancel", cancelPendingIntent);
NotificationCompat.Action setDone = new NotificationCompat.Action(R.drawable.ic_done, "Set done", setDonePendingIntent);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, "TaskNotificationChannel")
.setSmallIcon(R.drawable.ic_alarm)
.setContentTitle("Task is now")
.setContentText(taskText)
.setGroup(GROUP_KEY_ALARM)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setFullScreenIntent(taskAlarmPendingIntent, true)
.setChannelId("TaskAlarmChannel")
.addAction(cancel)
.addAction(setDone)
.setVibrate(new long[] {100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 400, 400, 300, 300, 200, 200, 100})
.setAllowSystemGeneratedContextualActions(true)
.setStyle(new NotificationCompat.BigTextStyle().bigText(taskText))
.setCategory(NotificationCompat.CATEGORY_CALL)
.setAutoCancel(true);
ActionSetTaskDoneBroadcastReciever
public void onReceive(Context context, Intent intent) {
int id = intent.getIntExtra("id", 0);
TaskManager taskManager = TaskManager.getInstance();
Log.d("TaskCalendarLog", "Action: task id = " + id);
taskManager.getTaskById(id).setIsDone("true");
TaskApplication.getInstance().restartAllTaskAlarm();
Intent taskRintoneServiceIntent = new Intent(context, RingtoneService.class);
context.stopService(taskRintoneServiceIntent);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Log.d("TaskCalendarLog", "Notification id: " + id);
notificationManager.cancel(id);
}
Подробнее здесь: https://stackoverflow.com/questions/789 ... in-android
Использование службы постоянного запуска в Android ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1726589508
Anonymous
Я создаю календарь задач конфиденциальности.
Он использует диспетчер сигналов тревоги и уведомления. Когда приложение закрыто, служба сигнализации, по-видимому, работает и вызывает уведомления. Уведомление имеет два действия — «установить как выполненное» и «отменить». Когда я нажимаю "установить как выполненное" в диспетчере задач, в списке задач ничего нет, потому что память освободилась, потому что приложение закрыто. Возникает исключение нулевого указателя.
Нормально ли использовать постоянно работающую службу для хранения данных, в которой можно пометить задачу как выполненную?
Правильно ли я понимаю, что WhatsApp использует постоянно работающий сервис с прослушивателем входящих сообщений?
P.S. Извините за мой плохой английский. Это Google Translate.
Я не могу использовать базу данных, так как она зашифрована. Только когда я открываю приложение, оно расшифровывается, и список задач загружается в оперативную память.
Я не могу использовать общие настройки, так как есть вероятность утечки информации при подключении к ПК.
UPD: Насколько я понимаю, нужно внести изменения в Action BroadcastReceiver
TaskManager
public Task getTaskById(int id) {
Log.d("TaskCalendarLog", "Task manager getByID: task id = " + id);
int index = 0;
Log.d("TaskCalendarLog", "Task list = " + taskList);
for (Task task:taskList) {
Log.d("TaskCalendarLog", "Task manager for: id = " + id);
if (task.getId() == id) {
return taskList.get(index);
}
index++;
}
return null;
}
TaskAlarmReciever
Intent setDoneIntent = new Intent(context, ActionSetTaskDoneBroadcastReceiver.class);
setDoneIntent.putExtra("id", taskId);
PendingIntent setDonePendingIntent = PendingIntent.getBroadcast(context, 0, setDoneIntent, PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Action cancel = new NotificationCompat.Action(R.drawable.ic_cancel, "Cancel", cancelPendingIntent);
NotificationCompat.Action setDone = new NotificationCompat.Action(R.drawable.ic_done, "Set done", setDonePendingIntent);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, "TaskNotificationChannel")
.setSmallIcon(R.drawable.ic_alarm)
.setContentTitle("Task is now")
.setContentText(taskText)
.setGroup(GROUP_KEY_ALARM)
.setPriority(NotificationCompat.PRIORITY_MAX)
.setFullScreenIntent(taskAlarmPendingIntent, true)
.setChannelId("TaskAlarmChannel")
.addAction(cancel)
.addAction(setDone)
.setVibrate(new long[] {100, 100, 200, 200, 300, 300, 400, 400, 500, 500, 400, 400, 300, 300, 200, 200, 100})
.setAllowSystemGeneratedContextualActions(true)
.setStyle(new NotificationCompat.BigTextStyle().bigText(taskText))
.setCategory(NotificationCompat.CATEGORY_CALL)
.setAutoCancel(true);
ActionSetTaskDoneBroadcastReciever
public void onReceive(Context context, Intent intent) {
int id = intent.getIntExtra("id", 0);
TaskManager taskManager = TaskManager.getInstance();
Log.d("TaskCalendarLog", "Action: task id = " + id);
taskManager.getTaskById(id).setIsDone("true");
TaskApplication.getInstance().restartAllTaskAlarm();
Intent taskRintoneServiceIntent = new Intent(context, RingtoneService.class);
context.stopService(taskRintoneServiceIntent);
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Log.d("TaskCalendarLog", "Notification id: " + id);
notificationManager.cancel(id);
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78986916/using-permament-running-service-in-android[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия