下面列出了android.provider.Settings#ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void onResume() {
super.onResume();
// Doze
Boolean ignoring = true;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
PackageManager pm = getContext().getPackageManager();
if (intent.resolveActivity(pm) != null) { // system whitelisted
ignoring = Helper.isIgnoringOptimizations(getContext());
if (ignoring == null)
ignoring = true;
}
}
btnDoze.setEnabled(!ignoring);
// https://issuetracker.google.com/issues/37070074
//ignoring = (ignoring || Build.VERSION.SDK_INT != Build.VERSION_CODES.M);
tvDozeDone.setText(ignoring ? R.string.title_setup_done : R.string.title_setup_to_do);
tvDozeDone.setTextColor(ignoring ? textColorPrimary : colorWarning);
tvDozeDone.setCompoundDrawablesWithIntrinsicBounds(ignoring ? check : null, null, null, null);
// https://developer.android.com/training/basics/network-ops/data-saver.html
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
ConnectivityManager cm = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
int status = cm.getRestrictBackgroundStatus();
grpDataSaver.setVisibility(
status == ConnectivityManager.RESTRICT_BACKGROUND_STATUS_ENABLED
? View.VISIBLE : View.GONE);
}
}
}
@TargetApi(Build.VERSION_CODES.M)
private void startBatteryOptimizationsSystemActivity() {
try {
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
startActivityForResult(intent, BATTERY_OPTIMIZATIONS_ACTIVITY_RESULT);
} catch (ActivityNotFoundException ex) {
Timber.w(ex, "startBatteryOptimizationsSystemActivity(): Could not open Settings to change battery optimizations");
MyApplication.handleSilentException(ex);
showCannotOpenAndroidSettingsDialog();
}
}
/**
* Go to ignore battery optimization settings.
*/
@RequiresApi(api = Build.VERSION_CODES.M)
public static void gotoIgnoreBatteryOptimizationSettings(Context context) {
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
context.startActivity(intent);
}
/**
* Go to ignore battery optimization settings.
*/
@RequiresApi(api = Build.VERSION_CODES.M)
public static void gotoIgnoreBatteryOptimizationSettings(Context context) {
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
context.startActivity(intent);
}
static private void showNotification(Context context, String title, String text) {
String nTitle = title;
String nText = text;
if (Build.VERSION.SDK_INT < 24) {
nTitle = context.getString(R.string.ppp_app_name);
nText = title+": "+text;
}
PPApplication.createExclamationNotificationChannel(context);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, PPApplication.EXCLAMATION_NOTIFICATION_CHANNEL)
.setColor(ContextCompat.getColor(context, R.color.notificationDecorationColor))
.setSmallIcon(R.drawable.ic_exclamation_notify) // notification icon
.setContentTitle(nTitle) // title for notification
.setContentText(nText) // message for notification
.setAutoCancel(true); // clear notification after click
mBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(nText));
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pi = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(pi);
mBuilder.setPriority(NotificationCompat.PRIORITY_MAX);
//if (android.os.Build.VERSION.SDK_INT >= 21)
//{
mBuilder.setCategory(NotificationCompat.CATEGORY_RECOMMENDATION);
mBuilder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
//}
mBuilder.setOnlyAlertOnce(true);
/*
Intent disableIntent = new Intent(IGNORE_BATTERY_OPTIMIZATION_NOTIFICATION_DISABLE_ACTION);
PendingIntent pDisableIntent = PendingIntent.getBroadcast(context, 0, disableIntent, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Action.Builder actionBuilder = new NotificationCompat.Action.Builder(
R.drawable.ic_action_exit_app_white,
context.getString(R.string.ignore_battery_optimization_notification_disable_button),
pDisableIntent);
mBuilder.addAction(actionBuilder.build());
*/
NotificationManagerCompat mNotificationManager = NotificationManagerCompat.from(context);
try {
mNotificationManager.notify(
PPApplication.IGNORE_BATTERY_OPTIMIZATION_NOTIFICATION_TAG,
PPApplication.IGNORE_BATTERY_OPTIMIZATION_NOTIFICATION_ID, mBuilder.build());
} catch (Exception e) {
//Log.e("IgnoreBatteryOptimizationNotification.showNotification", Log.getStackTraceString(e));
PPApplication.recordException(e);
}
}
/**
* Dozeモードの設定画面を開きます.
* <p>
* Dozeモードの解除には必ずユーザの許諾が必要になります。<br>
* Android M 以前の OS の場合には、このメソッドは処理を行いません。
* </p>
*
* @param context コンテキスト
*/
public static void startDozeModeSettingActivity(final Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}