package Ġcom . call hh . ab tool . helper Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Power Manager Ċ import Ġandroid . provider . Settings Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroid . widget . Toast Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠEmail : Ġthe bit it min @ outlook . com Ċ Ġ* ĠBlog : ĠBit min . tech Ċ Ġ* Ġ åį ± éĻ© æĿĥéĻĲ å¤ĦçĲĨ è¾ ħ åĬ© ç±» Ċ Ġ*/ Ċ object ĠPermission Helper Ġ{ ĊĊĠĠĠ Ġconst Ġval ĠNAME Ġ= Ġ" Request Battery Optim izations " ĊĠĠĠ Ġconst Ġval ĠIS _ NEED Ġ= Ġ" is Need " ĊĊĠĠĠ Ġprivate Ġvar Ġneed Request Battery Optim izations : ĠBoolean ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġun Granted Permissions : ĠArrayList < String > Ġby Ġlazy Ġ{ ĠArrayList < String >() Ġ} Ġ// è®°å½ķ æľª éĢļè¿ĩ çļĦ æĿĥéĻĲ ĊĊĠĠĠ Ġfun Ġcheck Permission ( activity : ĠActivity , Ġpermission : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPackage Manager . PERMISSION _ GRAN TED Ġ== ĠContext Compat . check Self Permission ( activity , Ġpermission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Is Need Request Battery Optim izations ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( need Request Battery Optim izations Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= Ġcontext . get SharedPreferences ( NAME , ĠContext . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġneed Request Battery Optim izations Ġ= Ġpreferences . getBoolean ( IS _ NEED , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġneed Request Battery Optim izations !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĶ³è¯· æĿĥéĻĲ ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ å·²ç»ı çĶ³è¯· éĢļè¿ĩ çļĦ æĿĥéĻĲ ä¸į åĨį çĶ³è¯· ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġrequest Permissions ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠActivity , ĊĠĠĠĠĠĠĠ Ġvar arg Ġpermissions : ĠString , ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠ Ġrequest Prompt : ĠString Ġ= Ġ"" ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġun Granted Permissions . clear () ĊĠĠĠĠĠĠĠ Ġpermissions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// çĶ¨æĪ· ä¸Ĭ æ¬¡ çĤ¹åĩ» æĭ Ĵ ç»Ŀ æĿĥéĻĲ ï¼Į ä¸º Ġtrue ï¼Į çĶ¨æĪ· çĤ¹åĩ» ä¸į åľ¨ æıĲç¤º ï¼Į è¿ĶåĽŀ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Activity Compat . should Show Request Permission R ationale ( activity , Ġit )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Prompt . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġrequest Prompt , ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( PackageManager . PERMISSION _ GRAN TED Ġ!= ĠContext Compat . check Self Permission ( activity , Ġit )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun Granted Permissions . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( un Granted Permissions . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( activity , Ġun Granted Permissions . toArray ( empty Array ()), Ġrequest Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĶ³è¯· çĶµ æ±ł çĻ½ åĲį åįķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrequest Battery Optim izations ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! getIs Need Request Battery Optim izations ( context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġåľ¨ Android Ġ 6 . 0 åıĬ ä»¥ä¸Ĭ ç³»ç»Ł ï¼Į èĭ¥ å®ļ åĪ¶ æīĭæľº ä½¿çĶ¨ åĪ° do ze æ¨¡å¼ı ï¼Į è¯·æ±Ĥ å°Ĩ åºĶçĶ¨ æ·»åĬł åĪ° çĻ½ åĲį åįķ ãĢĤ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠpackageName Ġ= Ġcontext . application Context . packageName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpower Manager Ġ= Ġcontext . getSystem Service ( Context . POWER _ SERVICE ) Ġas ĠPower Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Ign oring Ġ= Ġpower Manager . is Ign oring Battery Optim izations ( packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Ign oring ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Settings . ACTION _ REQUEST _ IGNORE _ B ATTER Y _ OPTIMI Z ATIONS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse (" package :$ packageName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġex . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Location Permissions ( activity : ĠActivity , Ġrequest Code : ĠInt Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . INTER NET , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ NETWORK _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ WIFI _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ PHONE _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ LOCATION _ EXTRA _ COMMAND S , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CHANGE _ WIFI _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Code Ġ= Ġrequest Code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Prompt Ġ= Ġ" ä¸º ä½¿çĶ¨ åľ° åĽ¾ åĬŁèĥ½ ï¼Į è¯· åħģè®¸ å¿ħè¦ģ æĿĥéĻĲ " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }