Как проверить, что функция экономии заряда аккумулятора включена в Android API <21

Сегодня я создаю приложение на карте, но оно падает, когда включена функция экономии заряда батареи.

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

я пытаюсь это, но не работает в API <21:

                PowerManager powerManager = (PowerManager)
                        this.getSystemService(Context.POWER_SERVICE);
                if ( powerManager.isPowerSaveMode()) {
                    // Animations are disabled in power save mode, so just show a toast instead.
                    Toast.makeText(customer_textReport.this, "Vui lòng tắt chế độ tiết kiệm pin", Toast.LENGTH_SHORT).show();
                }
                else {

                    Intent intentvitri = new Intent(customer_textReport.this, CustomerGetLocation.class);
                    startActivityForResult(intentvitri, 111);
                }

5 ответов

Решение

Хм. Это проверка высокоточного режима в GPS. Это проверка:

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    try {
                        if (getLocationMode(getApplicationContext()) != 3) {
                            tvmessage.setText("Please turn on GPS high Acurary");
                            btcancel_Dialog.setText("OK");
                            btcancel_Dialog.setOnClickListener(new OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
                                    dlg.dismiss();
                                }
                            });
                            dlg.show();
                        } else {

                            Intent intentvitri = new Intent(customer_textReport.this, CustomerGetLocation.class);
                            startActivityForResult(intentvitri, 111);
                        }
                    } catch (Settings.SettingNotFoundException e) {
                        e.printStackTrace();
                    }
                }

и метод getLocationMode возвращает режим GPS:

 private int getLocationMode(Context context) throws Settings.SettingNotFoundException {
    return Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE);

}

Я закончил с этой функцией.

Примечание: это не равно isPowerSaveMode(). Это больше похоже на isRunningOutOfPower() или canBePowerSaveMode()

Он проверяет, если SDK >= 21, тогда доступна функция isPowerSaveMode. если нет, то проверьте, не установлен ли режим GPS HIGH_ACCURACY, а уровень заряда батареи меньше 15%, тогда это может быть powerSaveMode.

public static boolean couldBePowerSaveMode(Context context) {
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  if (powerManager != null) {
    return powerManager.isPowerSaveMode();
  }
}

if (getLocationMode(context) != Settings.Secure.LOCATION_MODE_HIGH_ACCURACY) {
  return getBatteryPercentage(context) <= 15;
}
return getBatteryPercentage(context) <= 15;

}

Проверьте Google Developer: PowerManager

В левой верхней части вы можете изменить уровень API.

Как видите, isPowerSaveMode() добавлен в API 21(Lollipop).

Так что это не будет работать на старых устройствах.

Попробуйте это (готово для копирования / вставки):

/**
 * Checks if device is in power save mode. For older versions that do not support this API, returns false.
 * @return true if it is, false otherwise.
 */
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private static boolean isPowerSaveMode(Context context)
{
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    {
        PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        return powerManager.isPowerSaveMode();
    }

    // For older versions, we just say that device is not in power save mode
    return false;
}

На мобильных устройствах с версией Android ниже 5.0 (Lollipop) режим энергосбережения отличается для каждого производителя. Однако, если ваша целевая версия 5.0 и выше, вы можете использовать PowerManager, как описано в Android Developer

Другие вопросы по тегам