Как проверить, что функция экономии заряда аккумулятора включена в 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