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