使用系统自带定位,不难,难的是后台持续定位。最难解决的就是后台定位的持续性。
先理解一下进程的优先级:前台进程>可见进程>服务进程>后台进程>空进程。
当按下Home键或者打开其他应用时,就涉及到一个问题,APP从前台进程转变成了后台进程,即使做再多的事情(比如:添加一个悬浮框,或者使用Notification,或者开启一个Service,或者定时唤醒,或者电源管理方案等)也改变不了它是一个后台进程的事实,都是无用功。
其实我们要做的事情只有一件,就是将我们的app添加到系统白名单中,网上也有许多针对各个品牌手机跳转到设置界面的代码,这些其实都不需要,只要两步就可以解决了。
第一步:判断是否已打开省电策略白名单
@RequiresApi(api = Build.VERSION_CODES.M) public boolean isIgnoring(Activity activity) { boolean isIgonring = false; PowerManager manager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE); if (null != manager) { isIgonring = manager.isIgnoringBatteryOptimizations(activity.getPackageName()); } return isIgonring; }
第二步:弹出打开省电策略白名单的选项,确定就好了
public void goSetting(Context mContext) { Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);//ACTION_APPLICATION_DETAILS_SETTINGS Uri uri = Uri.fromParts("package", mContext.getPackageName(), null); intent.setData(uri); mContext.startActivity(intent); }
最后经过测试,只要不息屏,定位功能可以长时间在后台运行。