从Android 8.0开始系统为实现降低功耗,对后台应用获取用户位置信息频率进行了限制,每小时只允许更新几次位置信息,详细信息请参考官方说明。按照官方指引,如果要提高位置更新频率,需要后台应用提供一个前台服务通知告知。如果您需要自己参考官方指引来完成设置,可以参考之前我们提供的github示例。

从定位SDK v3.8.0版本开始,我们将这一操作封装到了定位SDK中,您在使用过程中只需要调用一个接口就可以为您的应用创建一个前台服务通知,当您的应用切换到后台后仍然有一个前台服务通知存在,以此规避Android 8.0对后台定位的限制。这部分内容将对这一功能进行介绍。

第一步,创建一个通知栏

您需要创建一个通知栏,下面的代码是一个简单示例,具体请您根据自己的业务进行相关修改。

private static final String NOTIFICATION_CHANNEL_NAME = "BackgroundLocation";

private NotificationManager notificationManager = null;

boolean isCreateChannel = false;

@SuppressLint("NewApi")

private Notification buildNotification() {

Notification.Builder builder = null;

Notification notification = null;

if(android.os.Build.VERSION.SDK_INT >= 26) {

//Android O上对Notification进行了修改,如果设置的targetSDKVersion>=26建议使用此种方式创建通知栏

if (null == notificationManager) {

notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

}

String channelId = getPackageName();

if(!isCreateChannel) {

NotificationChannel notificationChannel = new NotificationChannel(channelId,

NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);

notificationChannel.enableLights(true);//是否在桌面icon右上角展示小圆点

notificationChannel.setLightColor(Color.BLUE); //小圆点颜色

notificationChannel.setShowBadge(true); //是否在久按桌面图标时显示此渠道的通知

notificationManager.createNotificationChannel(notificationChannel);

isCreateChannel = true;

}

builder = new Notification.Builder(getApplicationContext(), channelId);

} else {

builder = new Notification.Builder(getApplicationContext());

}

builder.setSmallIcon(R.drawable.ic_launcher)

.setContentTitle(Utils.getAppName(this))

.setContentText("正在后台运行")

.setWhen(System.currentTimeMillis());

if (android.os.Build.VERSION.SDK_INT >= 16) {

notification = builder.build();

} else {

return builder.getNotification();

}

return notification;

}

第二步,设置当调用后台定位接口时,显示通知栏

在您的应用切到后台或者您需要显示前台通知的时候调用后台定位接口,显示前台服务通知栏。

//启动后台定位,第一个参数为通知栏ID,建议整个APP使用一个

locationClient.enableBackgroundLocation(2001, buildNotification());

第三步,关闭后台定位以及通知栏

当您不再需要通知栏时,请调用关闭后台定位接口

//关闭后台定位,参数为true时会移除通知栏,为false时不会移除通知栏,但是可以手动移除

locationClient.disableBackgroundLocation(true);

注意事项

1、如果您的应用在切到后台时已经存在前台服务通知了,则不需再调用这个接口;

2、建议您在整个应用中只有一个AMapLocationClient调用enableBackgroundLocation和disableBackgroundLocation接口即可,但存在多个AMapLocationClient且都调用了enableBackgroundLocation接口则需要所有的AMapLocationClient都调用了disableBackgroundLocation(true)接口通知栏才会移除;

3、开启关闭后台定位接口只是提供一个前台服务通知栏并不具备开始、停止定位的功能,开启、停止定位请调用AMapLocationCLient的startLocation()和stopLocation()接口

android 8.0后台定位,Android 8.0权限说明相关推荐

  1. Android R 11 后台定位权限没有 始终允许选项的解决方法

    在接入百度定位SDK 时,看到文档上说要注意android 11的权限相关问题,果然是个坑,在Android 10 11 上都出现一些问题,本文记录解决 android 11 定位权限问题的方法 申请 ...

  2. android 强制打开gps定位_Android 6.0动态权限及跳转GPS设置界面的方法

    1.动态权限申请 模糊的位置信息android.permission.ACCESS_COARSE_LOCATION权限为例 在AndroidManifest文件中加入权限 然后java代码中动态申请 ...

  3. android高德地图后台运行,Android手把手教你集成高德地图

    在上一篇博客上,和大家分享了如何在Android中集成高德定位以及定位的基本使用.今天我们就来看看高德地图在Android中如何使用吧. 同样,我将本篇博客的内容分为如下部分: (1)添加高德SDK ...

  4. android 8.0后台定位,Android8.0适配前台定位服务service的示例代码

    从Android 8.0开始系统为实现降低功耗,对后台应用获取用户位置信息频率进行了限制,每小时只允许更新几次位置信息,详细信息请参考官方说明.按照官方指引,如果要提高位置更新频率,需要后台应用提供一 ...

  5. android 强制打开gps定位_Android 6.0 默认关闭定位和GPS,开启后默认选省电

    默认关闭定位和GPS 修改位置 frameworks/base/packages/SettingsProvider/res/values/defaults.xml network,gps 修改为 默认 ...

  6. android 熄屏 后台运行,Android进程保活/息屏后后台保持定位、网络运行

    Android 设备在黑屏的分钟后可能会发生多种情况: 应用程序切后台后进程资源被系统回收,导致不能持续定位. 解决办法: 长连接定时唤醒cpu(解决黑屏定位.黑屏断网问题) 对于原生Android系 ...

  7. android 集成腾讯定位,Android集成腾讯云通信IM

    本篇文章结构 一.集成流程. 二.集成中遇到的问题 集成过程 TIM图片20180425151417.png 很清楚,前几部没什么说的,去官网注册账号就好了,我们接下来看账号集成. 首先第一步是集成模 ...

  8. android闹钟程序后台运行,Android闹钟启动时间设置无效问题的解决方法

    Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后cpu休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...

  9. android7.0提示定位,解决android7.0上某些PopuWindow显示位置不正确的问题

    网上关于android系统7.0的popupwindow适配的解决方案,基本都是一样的,就是重写PopupWindow里面的方法 但是如何进行重写,对于一个初次接触的人来说,是个很头疼的问题.一来是涉 ...

最新文章

  1. Color Picker like PhotoShop
  2. Day2 : iOS第三方框架MBProgressHUD学习笔记
  3. PyCharm个性化设置及注意事项
  4. 【Apache POI】Java 读取Excel文件
  5. vue实例、指令、生命周期
  6. Android模拟器之神奇Genymotion的安装
  7. Android系统(17)---Context 原理
  8. 自定义Dialog宽度占满屏幕
  9. 转: ASP.NET2.0_缓存
  10. js常用正则表达式(经典)
  11. Makefile 中使用函数
  12. 中国贻贝养殖种类、养殖面积、养殖产量和进出口量分析「图」
  13. 消费者行为分析包含了哪些内容?
  14. 商旅信用卡(多重继承)
  15. 怎么使用计算机自带的摄像头拍视频,电脑怎么用摄像头录制视频
  16. 部署点评Cat监控项目
  17. 综合里dont_use/dont_touch/ideal_network的理解
  18. 鼠标抖动问题(macbook下安装的win7系统)
  19. 图片随鼠标滑轮滚动变大变小
  20. 英语口语测试对话软件,英语口语人机对话软件

热门文章

  1. 嵌入式linux蓝牙通讯,开发板蓝牙通信问题,有这方面经验的请进
  2. laravel queue java_使用 Laravel Queue 不得不明白的知识
  3. python 窗口键 键位码_滚轮键按一下 这些功能超方便
  4. chrome vue 未响应_vue之骨架屏踩坑之路
  5. vue如何在手机上查看vue-cli构建的项目
  6. Leetcode-探索 | 买股票的最佳时机II
  7. Sonos拿1.3亿美金给员工发福利,中国厂商要拿什么拼?
  8. JavaScript按概率随机生成事件
  9. 设计自己的线程局部存储
  10. 如何用gitbook写文档并存到github上