最后更新时间:2025-03-14
A: 根据Android系统的策略,如果需要在后台能正常的导航,App需要额外的策略来保持App页面在后台也能及时获得准确的定位更新。
从Android 10开始,必须在Manifest里声明ACCESS_BACKGROUND_LOCATION权限,以便App能在后台运行时访问位置信息。
<manifest ... >
<!-- Required only when requesting background location access on
Android 10 (API level 29) and higher. -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
从Android 8开始,后台应用在有后台定位的权限下,也只能获得每小时几次的定位信息更新,要解除这一限制,需要将Activity保持在前台运行。
或者显示的启动一个前台服务,声明location的前台服务类型,并调用 startForegroundService() 启动应用中某个location类型的前台服务。此前台服务处于活动状态后,会以通知的形式持续显示在通知区域。
<service
android:name="MyNavigationService"
android:foregroundServiceType="location" ... >
<!-- Any inner elements would go here. -->
</service>
详细的Android位置信息系统策略可参考Google的官方文档
A. 由于Android系统的电池策略,手机在锁屏后,如果没有活跃的应用,手机可能进入休眠模式,这可能导致应用获取不到GPS定位点或所有定位点。
如果你希望你的导航应用在导航过程中不自动锁屏,你可以使用FLAG_KEEP_SCREEN_ON,或为布局添加android:keepScreenOn节点。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
...
</RelativeLayout>
向用户倡议不要在需要频繁更新定位的场景下(比如导航)锁定屏幕电源。
如果业务需要,可以将你的应用申请加入后台运行白名单,并引导用户允许并开启。
关于Android系统电池优化设置相关可参考
有帮助
没帮助