как отключить вопрос (хотите игнорировать оптимизацию батареи?) android studio - PullRequest
0 голосов
/ 25 сентября 2018

У меня были проблемы с Android Media Player, потому что, когда я выключаю экран, система переходит в спящий режим и останавливает его, и я этого не хотел, потому что никто не хочет слушать музыку и включать экран (кто это делает?).

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

Я пытался с большим количеством возможностей исправить это (чтение документации Android и пробовать все, что я нашел в сети), но работал следующий код:

public void doPower() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        String packageName = getActivity().getPackageName();
        PowerManager pm = (PowerManager) getActivity().getSystemService(Context.POWER_SERVICE);
        if (!pm.isIgnoringBatteryOptimizations(packageName)) {
            try {
                //some device doesn't has activity to handle this intent
                //so add try catch
                Intent intent = new Intent();
                intent.setAction(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
                intent.setData(Uri.parse("package:" + packageName));
                startActivity(intent);
            } catch (Exception e) {
            }
        }
    }
} 

Проблема здесьэто: приложение в начале показывает предупреждение, запрашивающее у пользователя отключить оптимизацию батареи, и я этого не хочу, потому что некоторые пользователи могут подумать, что «это плохо» или «почему его спрашивают об этом?»Потому что приложение вроде spotify не делает этого.

Как мне избежать предупреждения?Если я не могу, как я могу добавить что-то еще к сообщению?(что-то вроде этого: «Так что вы сможете слушать радио с выключенным экраном»)

Заранее спасибо и наилучшими пожеланиями.

1 Ответ

0 голосов
/ 25 сентября 2018

Вы не можете избежать этого диалога, и просьба избегать оптимизации батареи абсолютно не нужна.

Для этого требуется wakelock, как описано в документации MediaPlayer Using wake locks :

При разработке приложений, воспроизводящих мультимедиа в фоновом режиме, устройство может переходить в спящий режим во время работы службы.Поскольку система Android пытается сэкономить заряд батареи, когда устройство находится в спящем режиме, она пытается отключить все ненужные функции телефона, в том числе процессор и оборудование WiFi.Однако, если ваша служба воспроизводит или воспроизводит музыку, вы хотите, чтобы система не мешала вашему воспроизведению.

Для того, чтобы ваша служба продолжала работать в таких условиях, вы должны использовать «пробуждения»«.Блокировка от пробуждения - это способ сообщить системе, что ваше приложение использует некоторую функцию, которая должна оставаться доступной, даже если телефон не используется.

Если вы используете MediaPlayer, для этого требуется толькоВы используете setWakeMode() метод:

mMediaPlayer.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);

(Обратите внимание на дополнительное примечание на странице документации о блокировке Wi-Fi при потоковой передаче мультимедиаиз сети.)

...