• 0
x11

Специальные разрешения

Вопросы

Как оказалось, на китайских смартфонах типа Сяоми, Мейзу и даже в Самсунг есть специальный менеджер, который принудительно прибивает приложения и даже службы, чтобы те не пожирали заряд АКБ.

Но я заметил, что там уже есть какие-то приложение в списке разрешенных. т.е. они сами как-то туда попадают.

Я так понимаю, что это что-то своё, фирменное, а не Андроида.

Внимание, вопрос. Как туда добавить своё приложение/службу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 ответ на этот вопрос

  • 0

Такое поведение на Андроиде с 5 версии.

function GetPowerManager: JPowerManager;
var
  PowerServiceNative: JObject;
begin
  PowerServiceNative := TAndroidHelper.Context.getSystemService
    (TJContext.JavaClass.POWER_SERVICE);
  if not Assigned(PowerServiceNative) then
    raise Exception.Create('Could not locate Power Service');
  Result := TJPowerManager.Wrap((PowerServiceNative as ILocalObject)
    .GetObjectID);
  if not Assigned(Result) then
    raise Exception.Create('Could not access Power Manager');
end;

//Intent: JIntent;
if TJBuild_VERSION.JavaClass.SDK_INT >= 23 then
begin
	pw := GetPowerManager;
	if Assigned(pw) then
	  if not pw.isIgnoringBatteryOptimizations
		(StringToJString('ВАШ ПАКЕТ')) then
	  begin
		Intent := TJIntent.Create;
		try
		  Intent.setAction
			(TJSettings.JavaClass.
			ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
		  Intent.setData(TJnet_Uri.JavaClass.parse
			(StringToJString('package:ВАШ ПАКЕТ')));
		  TAndroidHelper.Context.startActivity(Intent);
		except
		  on e: Exception do
			fgToast(e.Message, 3);
		end;
	  end;
end;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В 5ой версии приложение не закрывается. А вот начиная с 6ой...

Дело в том, что у разных производителей это всё живёт в разных пунктах меню даже и там настройки разные и по разному обзываются.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

r@di0, спасибо, а куда эту функцию вставлять, где и как правильно использовать? В какой момент, в каком событии?

При старте приложения? Один раз при первом запуске или постоянно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

И ещё вопрос. Нужны ли какие-то доп. разрешения указывать в настройках проекта для этой функции?

WAKELOCK (Wake lock) - это оно?

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Uses_Permissions

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В общем.... r@di0, это не совсем то или даже совсем не то, что нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
4 часа назад, x11 сказал:

В общем.... r@di0, это не совсем то или даже совсем не то, что нужно.

Пожалуйста, поясните почему не то, и что всё же Вам действительно нужно. Надеюсь ответ займет менее 10 дней )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Потому что разрешение WAKELOCK - это для того, чтобы приложение не давало устройству заснуть, а не для того, чтобы устройство не прибивало приложение.

И вот ещё ответ на др. форуме: http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1299268&msg=21591594

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Может я не совсем точно описал проблему. Речь идёт о Диспетчере питания и защищенный приложениях - это у Huawey

Screenshot_2.png

Screenshot_1.png

Screenshot_3.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

или вот ещё: Настройки/Батарея/Фоновый режим/Приложения/Выбрать приложение/Не ограничивать

Screenshot_4.png

Screenshot_5.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Вы вообще пробовали приведенный код? Он не имеет отношения к WakeLock, а как раз добавляет приложение в WhiteList.
Если Вы хотите сделать "неубиваемое" приложение, то Вам не получится обойтись каким-то легким решением. Особенно если приложению необходимо использовать сеть. Почитайте про doze mode.
Можете ещё посмотреть эту статью: http://delphiworlds.com/2018/01/monitoring-location-updates-on-android/
Там предпринята попытка сделать подобное "неубиваемое" приложение.

Изменено пользователем r@di0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
1 минуту назад, r@di0 сказал:

Вы вообще пробовали приведенный код? Он не имеет отношения к WakeLock, а как раз добавляет приложение в WhiteList.

Ещё не пробовал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 22.07.2018 в 13:08, r@di0 сказал:

Надеюсь ответ займет менее 10 дней )

 

мне на почту перестали приходить уведомления из этой темы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 12.07.2018 в 09:50, r@di0 сказал:

(StringToJString('ВАШ ПАКЕТ')) then

 

В 12.07.2018 в 09:50, r@di0 сказал:

(StringToJString('package:ВАШ ПАКЕТ')));

 

Сразу задам ещё вопрос.

Если вышеуказанную процедуру нужно вставлять в DataModule службы, то какой пакет прописывать: пакет основного приложения или пакет службы? У них ведь разные названия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Здесь

https://stackoverflow.com/questions/40640352/dialog-for-intent-settings-action-request-ignore-battery-optimizations

написано, что нужно добавлять такое разрешение:

<uses-permission-sdk-23 android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>

 

и здесь похожая проблема

https://forums.embarcadero.com/thread.jspa?messageID=896940

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

К вашему примеру нужно ещё добавить USES

Androidapi.JNI.Provider,

Androidapi.JNI.Os,

Androidapi.JNI.Net,

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 21.07.2018 в 18:45, x11 сказал:

r@di0, спасибо, а куда эту функцию вставлять, где и как правильно использовать? В какой момент, в каком событии?

При старте приложения? Один раз при первом запуске или постоянно? 

 

Я понял. Нужно в приложении где-нибудь создать кнопку/меню. Эта функция будет вызывать системное окно Андроида, где и нужно выбрать один из двух пунктов: "Экономия заряда батареи".

Там 2 одинаковых, но значки разные. Я сперва выбрал то, что с зелёной иконкой и получил ошибку - приложение "Экономия заряда батареи" вызвало ошибку и будет закрыто.

А вот выбрав второе, я получил ещё запрос: Не ограничивать расход батареи? И там выбрал Да. И моё приложение только после этого попало в "белый список". Т.е. всё равно надо пользователю что-то выбирать.

Screenshot_1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 22.07.2018 в 08:15, x11 сказал:

В общем.... r@di0, это не совсем то или даже совсем не то, что нужно.

 

Установил приложение на Сяоми с Андроид 7.0.

Выполнил код и Андроид выдал запрос, где я ответил Да.

Потом полез в настройки Андроида, а там всё равно "Стандартное ограничение".

Получается, что это какое-то своё собственное ограничение или совмещённое с Андроидом?

 

Если смотреть на картинку, то, по идее, после выполнения твоей процедуры должно быть "Без ограничений".

Или в процедуре нужно применить/передать какую-то другую константу?

Screenshot_10.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

а за "<uses-permission-sdk-23 android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>"

могут забанить в Гул-маркете :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

В общем, я создал новую тему с целю переписать немного принцип запуска службы

http://fire-monkey.ru/topic/5168-процедура-в-сервисе-через-broadcastreceiver/

 

Изменено пользователем x11

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу