首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

getLastKnownLocation在更高版本的Android (6及以上)中不起作用

getLastKnownLocation在更高版本的Android (6及以上)中不起作用是因为在Android 6及以上的版本中,Google对定位权限进行了更严格的限制。getLastKnownLocation方法是用来获取设备上一次已知的位置信息,但在新的权限模型下,应用程序需要获取定位权限并且用户必须授予该权限才能使用该方法。

在Android 6及以上的版本中,应用程序需要通过运行时权限的方式来获取定位权限。运行时权限是一种动态权限控制机制,它允许应用程序在运行时向用户请求权限。因此,如果应用程序没有获取定位权限,getLastKnownLocation方法将无法返回有效的位置信息。

为了解决这个问题,开发人员应该使用新的定位API,如Google Play服务中的Fused Location Provider API。Fused Location Provider API提供了更精确和可靠的位置信息,并且可以与运行时权限机制无缝集成。

使用Fused Location Provider API获取设备的最新位置信息的步骤如下:

  1. 在AndroidManifest.xml文件中添加定位权限的声明:
代码语言:txt
复制
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  1. 在应用程序代码中,使用GoogleApiClient建立与Google Play服务的连接,并请求定位权限:
代码语言:txt
复制
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addApi(LocationServices.API)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .build();

mGoogleApiClient.connect();

// 请求定位权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
            new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
            PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
}
  1. 在onConnected回调方法中,使用FusedLocationApi获取设备的最新位置信息:
代码语言:txt
复制
@Override
public void onConnected(Bundle connectionHint) {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED) {
        Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        if (lastLocation != null) {
            // 处理位置信息
        }
    }
}

通过使用Fused Location Provider API,开发人员可以在Android 6及以上的版本中获取到设备的最新位置信息,并且与运行时权限机制无缝集成。这样可以确保应用程序在不同版本的Android设备上都能正常工作。

腾讯云相关产品推荐:腾讯位置服务(https://cloud.tencent.com/product/lbs)是腾讯云提供的一项定位服务,可以帮助开发人员获取设备的位置信息,并提供了丰富的地理位置相关功能和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 11 更高版本系统处理可空性

目前,排名前 1,000 位 Android 应用,已有超过 60% 正在使用 Kotlin 进行开发。为什么 Kotlin 受到这么多开发者喜爱呢?...更多详情: youtrack.jetbrains.com/issue/KT-36… Android 11 可空性 我们近期发布了 Android 11 开发者预览版,邀请开发者们试用最新 Android...您可以通过代码添加空值检查来解决这些警告或报错。...我们将继续遵循以下原则为 Android SDK 添加注释: 先在较低版本 (例如 Android 10) 采用 @RecentlyNullable 和 @RecentlyNonNull,然后再在新版本...此举目的是为了给您预留至少一个版本发布周期时间更新 Kotlin 代码,确保其质量更高、更加健壮。 Java 是 Oracle 和/或其附属公司注册商标。

1.5K10

Fedora 34 以上版本安装 Shutter

这就造成了一个依赖性问题,因为 Debian/Ubuntu、Fedora 删除了某些包依赖 GTK2 版本。... Fedora 34 以上版本安装 Shutter 截图工具需要采用另一种方法。 现在,你只能通过个人包存档(PPA)来安装这个工具。下面是如何在 Fedora 34 以上版本安装它。...Shutter in Fedora Fedora 34 以上版本安装 Shutter 在你 Fedora 打开一个终端,启用以下 Shutter copr 仓库。...sudo dnf copr enable geraldosimiao/shutter 完成后,你就可以通过 dnf  Fedora 34 以上版本简单地安装 Shutter。...sudo dnf install shutter 尽管目前最新版本是 v0.97。遗憾是,该仓库目前包含旧 v0.94.x。我希望版本所有者尽快包括最新版本

51930
  • Fedora 34 以上版本安装 Shutter

    这就造成了一个依赖性问题,因为 Debian/Ubuntu、Fedora 删除了某些包依赖 GTK2 版本。... Fedora 34 以上版本安装 Shutter 截图工具需要采用另一种方法。 现在,你只能通过个人包存档(PPA)来安装这个工具。下面是如何在 Fedora 34 以上版本安装它。...Shutter in Fedora Fedora 34 以上版本安装 Shutter 在你 Fedora 打开一个终端,启用以下 Shutter copr 仓库。...sudo dnf copr enable geraldosimiao/shutter 完成后,你就可以通过 dnf  Fedora 34 以上版本简单地安装 Shutter。...sudo dnf install shutter 尽管目前最新版本是 v0.97。遗憾是,该仓库目前包含旧 v0.94.x。我希望版本所有者尽快包括最新版本

    58240

    android: API24 以上版本调用系统相机时报:FileUriExposedException 解决

    一、问题现象 某一天我厂测试小妹说,我们APP拍照时候崩溃了,然后我去问清了测试手机型号,系统版本,还有当时操作步骤,再然后就果然崩溃了。具体如下: ?...7.0 以前版本并没有任何异常,but , 从 7.0 (API 24) 之后这种方式就有问题了 ,因为 Uri.fromUri(file) 得到是 以“ file:// ” 开头文件本地真实路径...我们使用 getUriFromFile( ) 获取Uri 之后, 7.0 以后版本调用系统相机时将不会在崩溃,示例代码如下: 三、示例代码: (1)、清单文件中注册 FileProvider...--解决API24 以上版本调用系统相机时报:FileUriExposedException 情况--> <provider android...* ATTENTION 6.0以上手机系统,使用该方法刷新相册并不是实时

    66920

    Kotlin协程Android应用

    IO 调度器启动一个协程,但它们之间有一些区别: GlobalScope.launch(Dispatchers.IO){} 是全局范围内启动一个协程,不受外部作用域限制。...CoroutineScope(Dispatchers.IO).launch {} 是指定 CoroutineScope 启动一个协程,通常情况下应该手动创建 CoroutineScope 对象,并确保合适时机取消该...比如:网络请求,数据库操作,文件操作等 Main:UI调度器,只有UI编程平台上有意义,用于更新UI,例如Android主线程 Unconfined:非受限调度器,无所谓调度器,当前协程可以运行在任意线程上...协程生命周期: 协程创建以后,处于New(新建)状态, 协程启动(调用start()方法)以后,处于Active(活跃) 状态, 协程所有子协程完成任务以后,处于Completed(完成) 状态,...().name}") } rememberCoroutineScope(): 这是一个 Composable 函数,用于 Composable 创建一个记住(remembered)协程作用域。

    17210

    动态代理原理 Android 应用

    细心同学可能已经看到以上代码中有一行比较特殊代码,这行代码作用是把 sun.misc.ProxyGenerator.saveGeneratedFiles 这个变量赋值为 true,这个变量为 true...时,将会在工程目录下生成 $Proxy0 class 文件(由于生成代理类 ProxyGenerator 类 sun.misc 包 Android Studio 无法调用,所以这里是...这里源码分析分为两个版本:JDK 1.7,JDK 1.8。...五、动态代理 Android 应用 1、Android 跨进程通信中使用了动态代理 比如 Activity 启动过程,其实就隐藏了远程代理使用。...2、Retrofit create() 方法通过动态代理获取接口对象。 这些场景可能不够全面,大家可以评论区补充,看到新场景,我后续也会补充

    2.1K10

    【错误记录】Android Studio build.gradle 配置 buildFeatures prefab 错误处理 ( AS 4.1 以上开发环境 | Gradle插件版本 )

    文章目录 一、问题描述 二、Android Studio 版本、Gradle 版本、Gradle 插件版本 Android Gradle 插件版本说明 一、问题描述 ---- 起因 : 需要配置 Android...Studio 版本、Gradle 版本、Gradle 插件版本 ---- Android Studio 版本 : 4.1 如果要配置 buildFeatures , 必须使用 4.1 以上 Android...Studio 版本 , 这是支持 buildFeatures 最低版本 ; Gradle 版本 : 最低版本 6.6.1 , gradle-wrapper.properties 中进行如下配置...4.1.0 , 工程目录下 build.gradle 配置 : buildscript { dependencies { classpath 'com.android.tools.build...版本 4.1.0 ; Android Gradle 插件版本说明

    2.3K00

    观察者模式Android源码应用

    Android源码应用 以前,我们最常用到控件就是ListView了,而ListView最重要一个点就是Adapter,我们往ListView添加数据后,我们都会调用一个方法: notifyDataSetChanged...跟进这个方法notifyDataSetChanged方法,这个方法定义BaseAdapter,代码如下: public abstract class BaseAdapter implements ListAdapter...AdapterDataSetObserver,最后将这个观察者注册到adapter,这样我们被观察者、观察者都有了。...AdapterDataSetObserver定义ListView父类AbsListView,代码如下 : class AdapterDataSetObserver extends AdapterView...AdapterDataSetObserveronChanged函数中会获取Adapter数据集新数量,然后调用ListViewrequestLayout()方法重新进行布局,更新用户界面。

    51510

    工厂方法模式Android源码应用

    ,此时,需要在工厂方法参数列表传入一个 Class 类来决定是哪一个产品类: public abstract class Factory { /** * @param clz 产品对象类类型...Factory { public static Product createProduct() { return new ConcreteProductA(); } } 源码应用...Iterator iterator(); } 这意味着 List、Set 接口也会继承 iterator() 方法,下面以 ArrayList 为例进行分析: ArrayList ...其实Android对工厂方法模式应用更多,先看如下代码: public class AActivity extends Activity{ @Override protected void...AActivityonCreate方法构造一个View对象,并设置为当前ContentView返回给framework处理,如果现在又有一个BActivity,这时又在onCreate方法通过

    48010

    Android 点九图机制讲解聊天气泡应用

    ios开发,可以代码中指定某个点进行拉伸,而在Android不行,所以Android想要达到这个效果,只能使用点九图(下文会啪啪打脸,其实是可以,只是很少人这样使用,兼容性不知道怎么样,点击跳转...标记位置 含义 左-黑点 纵向拉伸区域 上-黑点 横向拉伸区域 右-黑线 纵向显示区域 下-黑线 横向显示区域 ---- 点九图 Android 应用 点九图 Android 主要有三种应用方式...因此, Android ,我们如果想动态使用网络下载点九图,一般需要经过以下步骤: 使用 sdk 目录下 aapt 工具将点九图转化为 png 图片 解析图片时候,判断是否含有 NinePatchChunk...而 Android res 目录 drawable 或者 mipmap 点九图确实能做到,去看了相关代码,目前也没有发现什么好解决方案,如果你有好解决方案话,欢迎留言交流。...(预下载 10 个) 聊天气泡采用内存缓存,磁盘缓存,确保 RecyclerView 快速滑动时候不会闪烁 ---- 理解点九图 以下内容参考腾讯音乐 Android动态布局入门NinePatchChunk

    1.4K20

    Android如何指定SnackBar屏幕位置小问题解决

    Android指定SnackBar屏幕位置 Snackbar 常以一个小弹出框形式,出现在手机屏幕下方或者桌面左下方,并且是屏幕所有层最上方。...如果要指定它在屏幕出现位置,可以把SnackBar放置android.support.design.widget.CoordinatorLayout内。...RelativeLayout里添加CoordinatorLayout如下: <android.support.design.widget.CoordinatorLayout android:layout_width...当然自己写显示在上边很麻烦,还要处理显示隐藏动画 Snackbar.Java animateViewIn() 和 animateViewout() 里都有规定 Github上有个很不错...总结:如果长期显示顶部可以用Github项目,否则用design库就行 总结 以上就是这篇文章全部内容了,希望本文内容对大家学习或者工作具有一定参考学习价值,如果有疑问大家可以留言交流,谢谢大家对

    4.4K20

    Android6.0获取GPS定位和获取位置权限和位置信息方法

    1.添加权限–6.0之后要动态获取,下面会说 <uses-permission android:name= "android.permission.ACCESS_FINE_LOCATION"/ 2.直接上代码...系统版本,如果是,需要动态添加权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION...provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息 /**这段代码不需要深究,是locationManager.getLastKnownLocation...,checkSelfPermission时传入 case BAIDU_READ_PHONE_STATE: //如果用户取消,permissions可能为null. if (grantResults[0...基础知识写不好,大佬勿喷,谢谢! 以上这篇Android6.0获取GPS定位和获取位置权限和位置信息方法就是小编分享给大家全部内容了,希望能给大家一个参考。

    2.6K20

    Android获取位置信息方法

    2.Android平台下支持提供位置服务API,开发过程主要用到LocationManager和LocationProviders对象: (1).LocationManager可以用来获取当前位置...location = locationManager.getLastKnownLocation(provider);// 调用getLastKnownLocation()方法获取当前位置信息 (3)...();//获取纬度 double lng = location.getLongitude();//获取经度 (4).很多提供定位服务应用程序,不仅需要获取当前位置信息,还需要监视位置变化,在位置改变时调用特定处理方法...(6).为了使GPS定位功能生效,还需要在AndroidManifest.xml文件中加入用户许可,即加入下面这行代码,加入用户权限: <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION..." </uses-permission 以上就是本文全部内容,希望对大家学习有所帮助。

    4.8K30

    数据价值在线化丨TiDB 企查查数据应用 v7.1 版本升级体验

    企查查数据流向,爬虫采集到数据需要先存储到数据库,然后再由 Flink 进行清洗。...与 MySQL binlog 恢复相比,这种方式恢复效率更高。◉ 热点自动调度 TiDB 3.0 和 4.0 版本,当遇到热点问题时,TiDB 处理能力不足,无法自动调度,需要人工干预。... v4.0 版本,我们遇到了一些问题,包括:删除大量数据后引发 TiDB 重启、DDL 阻塞以及 TiCDC 不太成熟出现问题。该阶段,我们遇到问题时,优先在 TiDB 社区寻求答案。... v6.5 版本,上述问题均得到了解决。感受最深是 TiCDC 稳定性和 TiDB 重启问题得到了改进,性能也得到了很大提升。2023 年 9 月,我们跨大版本升级到 TiDB v7.1.1。... v7.1 版本,我们遇到了两个问题。● 由于 TiDB 内存控制参数由会话级别调整为 SQL 级别,导致超过内存阈值引起访问阻塞问题。我们正在积极寻求解决方案。

    20810

    项目需求讨论 - 定位功能小结

    既然我们用了statActivityForResult来启动,当我们返回回到自己app界面的时候,onActivityForResult需要来判断,本来因为习惯性思维,所以以为自动onActivityForResult...但是android.location包下并不是谷歌推荐: ? 翻译过来就是:此API不是访问Android位置推荐方法。...Google位置服务API是Google Play服务一部分,是向您应用添加位置感知功能首选方式。 它提供了更简单API,更高精度,低功耗地理围栏等等。...也可以参考相关链接了解一下:Android 成功 使用GPS获取当前地理位置(解决getLastKnownLocation 返回 null),不过貌似也没有找到百分百直接获取GPS定位获取信息方式。...我们onLocationChanged方法获取到了Location对象,就可以去获取相关信息了。 通过Location来获取相关经纬度: ?

    95750

    安卓虚拟定位

    无Root虚拟定位   很多人(包括我自己)可能想当然认为安卓上虚拟定位必须依赖于Root权限,其实不然,非Root情况下也能实现一定程度上虚拟定位,那就是借助开发者模式模拟位置功能。...开发者模式中提供了模拟位置接口,能够自己开发一个用于模拟位置app,只要在Manifest声明权限"android.permission.ACCESS_MOCK_LOCATION"后,即可在开发者选项...-选择模拟位置信息应用中选择这个app,具体任何模拟位置则由app实现决定,我暂时没有亲自试过,可以知道是,使用这种方法能够实现百度地图虚拟定位,但是对于其他很多主流app是无法生效,所以其实算是比较鸡肋...但是由于代码写死了企业微信包名,所以只能对企业微信生效,其实现在有LSPosed可以指定模块只对特定app生效,所以已经没必要用以往包名限定写法来写xposed插件了。...这边我将其hook对象包名改成com.tencent.mm即微信,测试后证明了该插件经久不衰,即使时隔多年也依然能对最新版本微信生效后,我阅读了它源码,并参考其主要hook逻辑,实现了对应frida

    2.5K30
    领券