Оптимизирован сервис Bluetooth, Android

У меня есть приложение, которое использует BLE для обмена данными с устройством с поддержкой BLE.
Раньше я разрабатывал и тестировал его с помощью Asus Zenfone Max 3 (Android 8.1), и у меня не было проблем.
Затем я получил Asus Zenfone Max Pro M1 (Android 8.1). Приложение подключается к устройству, но не может обмениваться данными.
После долгих расследований выясняется, что мне пришлось зайти в Оптимизация батареи в настройках смартфона и изменить Bluetooth. strong> и Bluetooth MIDI Service на Неоптимизировано, после чего мое приложение заработало нормально.
Я не знаю, связана ли эта настройка по умолчанию с ОС (Android One ) или к модели телефона. Но это действительно дерьмовая вещь, потому что я не должен говорить каждому клиенту сделать это (в настройках своего телефона), чтобы приложение работало!
Итак, мой вопрос в том, есть ли у них способ узнать, от код, оптимизированы ли эти службы или нет, и могу ли я изменить эти настройки с помощью кода или любых других идей, которые могли бы лучше решить эту проблему.


person MMasmoudi    schedule 07.12.2018    source источник
comment
У меня была такая же проблема с Bluetooth и уведомлением при использовании оптимизации батареи для телефона asus, и речь идет об ОС и настройках пользователя, поэтому я закончил показом диалогового окна с просьбой отключить его, если возникла какая-либо проблема.   -  person Oussema Aroua    schedule 07.12.2018
comment
А как узнать, что блютуз оптимизирован в этом случае? Можете ли вы проверить это по коду?   -  person MMasmoudi    schedule 07.12.2018


Ответы (1)


Добавьте это разрешение в файл манифеста:

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

и протестировать так:

Intent intent = new Intent();
String packageName = context.getPackageName();
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (pm.isIgnoringBatteryOptimizations(packageName))
    intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
else {
    intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
    intent.setData(Uri.parse("package:" + packageName));
}
context.startActivity(intent);

ссылка

person Oussema Aroua    schedule 07.12.2018