Headertab

Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

Friday, 12 July 2019

BattreyDozeMode white list in android


How to app white list in Battery doze mode


MainActivity.java

public class MainActivity extends AppCompatActivity {
    private AppCompatButton btncheck;
    private AppCompatTextView tvmsg;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btncheck=findViewById(R.id.btncheck);
        tvmsg=findViewById(R.id.tvmsg);


        tvmsg.setText("This app is " +DozeHelper.getisBatteryOptimizations(this,getPackageName().toString()));
        btncheck.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View view) {
                Intent intent= DozeHelper.prepareBatteryOptimization(MainActivity.this,getPackageName(),true);
                startActivity(intent);

            }
        });





    }
}



DozeHelper.java
  

    public class DozeHelper {


        public enum PowerSaveState {
            ON, OFF, ERROR_GETTING_STATE, IRRELEVANT_OLD_ANDROID_API      
     }

        public enum WhiteListedInBatteryOptimizations {
            WHITE_LISTED, NOT_WHITE_LISTED, ERROR_GETTING_STATE, 
            UNKNOWN_TOO_OLD_ANDROID_API_FOR_CHECKING, IRRELEVANT_OLD_ANDROID_API      
      }

        public enum DozeState {
            NORMAL_INTERACTIVE, DOZE_TURNED_ON_IDLE, NORMAL_NON_INTERACTIVE,
           ERROR_GETTING_STATE, IRRELEVANT_OLD_ANDROID_API, UNKNOWN_TOO_OLD_ANDROID_API_FOR_CHECKING 
       }

        @NonNull
        public static DozeState getDozeState(@NonNull Context context) {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
                return DozeState.IRRELEVANT_OLD_ANDROID_API;
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
                return DozeState.UNKNOWN_TOO_OLD_ANDROID_API_FOR_CHECKING;
            }
            final PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            if (pm == null)
                return DozeState.ERROR_GETTING_STATE;
            return pm.isDeviceIdleMode() ? DozeState.DOZE_TURNED_ON_IDLE : pm.isInteractive() ? 
                   DozeState.NORMAL_INTERACTIVE : DozeState.NORMAL_NON_INTERACTIVE;
        }

        @NonNull
        public static PowerSaveState getPowerSaveState(@NonNull Context context) {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
                return PowerSaveState.IRRELEVANT_OLD_ANDROID_API;
            final PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            if (pm == null)
                return PowerSaveState.ERROR_GETTING_STATE;
            return pm.isPowerSaveMode() ? PowerSaveState.ON : PowerSaveState.OFF;
        }


        @NonNull
        public static WhiteListedInBatteryOptimizations getisBatteryOptimizations(
         @NonNull Context context, @NonNull String packageName) {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
                return WhiteListedInBatteryOptimizations.IRRELEVANT_OLD_ANDROID_API;
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
                return WhiteListedInBatteryOptimizations.UNKNOWN_TOO_OLD_ANDROID_API_FOR_CHECKING;
            final PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
            if (pm == null)
                return WhiteListedInBatteryOptimizations.ERROR_GETTING_STATE;
            return pm.isIgnoringBatteryOptimizations(packageName) ? 
            WhiteListedInBatteryOptimizations.WHITE_LISTED : WhiteListedInBatteryOptimizations.NOT_WHITE_LISTED;
        }

        @TargetApi(Build.VERSION_CODES.M)
        @RequiresPermission(Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS)
        @Nullable
        public static Intent prepareBatteryOptimization(
        @NonNull Context context, @NonNull String packageName, boolean alsoWhenWhiteListed) {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)
                return null;
            if (ContextCompat.checkSelfPermission(
           context, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) == PackageManager.PERMISSION_DENIED)
                return null;
            final WhiteListedInBatteryOptimizations ispowersave = getisBatteryOptimizations(context, packageName);
            Intent intent = null;
            switch (ispowersave) {
                case WHITE_LISTED:
                    if (alsoWhenWhiteListed)
                        intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);
                    break;
                case NOT_WHITE_LISTED:
                    intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).
                             setData(Uri.parse("package:" + packageName));
                    break;
                case ERROR_GETTING_STATE:
                case UNKNOWN_TOO_OLD_ANDROID_API_FOR_CHECKING:
                case IRRELEVANT_OLD_ANDROID_API:
                default:
                    break;
            }
            return intent;
        }

        /**         * registers a receiver to listen to power-save events. 
          returns true if succeeded to register the broadcastReceiver.         */     
   @TargetApi(Build.VERSION_CODES.M)
        public static boolean registerPowerSaveReceiver(
          @NonNull Context context, @NonNull BroadcastReceiver receiver) {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
                return false;
            IntentFilter filter = new IntentFilter();
            filter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
            context.registerReceiver(receiver, filter);
            return true;
        }


    }