Android开发-Android中如何打开或关闭GPS

Android GPS 打开流程 Android GPS 流程 阅读详情

1.简介:

在进行Android应用程序开发时,经常需要打开或关闭GPS。 在Android 设置中,可以手动进行这样的操作。那么,如何通过代码来实现呢,本篇将描述这样的方式。

2. GPS api接口:

Android SDK提供了打开或关闭GPS的接口,即:

android.provider.Settings.Secure类有2个静态方法:
public static final void setLocationProviderEnabled (ContentResolver cr, String provider, boolean enabled)
和
public static final boolean isLocationProviderEnabled (ContentResolver cr, String provider)

但是,这只在Android 2.2(从API Level 8)才开始提供。那么在2.2之前又该如何编程实现GPS的开关呢?

3. 通过反射SDK中隐藏的方法来获取:

3.1 分析SecuritySettings源码:

//com.android.settings.SecuritySettings.java
      CheckBoxPreference localCheckBoxPreference3 = this.mGps;
      if(paramPreference == localCheckBoxPreference3)
      {
        ContentResolver localContentResolver3 = getContentResolver();
        boolean bool6 = this.mGps.isChecked();
        Settings.Secure.setLocationProviderEnabled(localContentResolver3,"gps", bool6);
        continue;
      }

说明:

Settings.Secure.setLocationProviderEnabled是一个hide方法,不能被我们自己开发的应用程序之间调用,需要通过反射来调用。

3.2 setLocationProviderEnabled的源码:

public static final void setLocationProviderEnabled(ContentResolver cr,
                String provider, boolean enabled) {
            // to ensure thread safety, we write the provider name with a '+' or '-'
            // and let the SettingsProvider handle it rather than reading and modifying
            // the list of enabled providers.
            if(enabled) {
                provider = "+"+ provider;
            }else{
                provider = "-"+ provider;
            }
            putString(cr, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, provider);
        }

3.3关键是要找到provider:使用SettingsAppWidgetProvider,源码如下:

private static PendingIntent getLaunchPendingIntent(Context paramContext, intparamInt1, intparamInt2)
  {
    Intent localIntent1 = newIntent();
    Intent localIntent2 = localIntent1.setClass(paramContext, SettingsAppWidgetProvider.class);
    Intent localIntent3 = localIntent1.addCategory("android.intent.category.ALTERNATIVE");
    Uri localUri = Uri.parse("custom:"+ paramInt2);
    Intent localIntent4 = localIntent1.setData(localUri);
    returnPendingIntent.getBroadcast(paramContext, 0, localIntent1, 0);
  }

说明:

通过PendingIntent来扔出1个Intent,接受者是 SettingsAppWidgetProvider.class,接受的参数有2个,1个是 Category:SettingsAppWidgetProvider.class(正是这个类自身),另1个是 Data:Uri.parse(“custom:” + paramInt2),这个paramInt2是Widget中的图标按钮的序号。

  privatestatic final intBUTTON_BLUETOOTH = 4;
  privatestatic final intBUTTON_BRIGHTNESS = 1;
  privatestatic final intBUTTON_GPS = 3;
  privatestatic final intBUTTON_SYNC = 2;
  privatestatic final intBUTTON_WIFI = 0;

 4.在App中的使用:

通过以上分析,那么我们只要送出custom:3的Uri给SettingsAppWidgetProvider.class,就应该可以由 SettingsAppWidgetProvider类来帮我们调用 Settings.Secure.setLocationProviderEnabled方法了。

4.1 打开或关闭GPS:

所以,在Activity中添加如下方法:

    privatevoid toggleGPS() {
        Intent gpsIntent = newIntent();
        gpsIntent.setClassName("com.android.settings",
                "com.android.settings.widget.SettingsAppWidgetProvider");
        gpsIntent.addCategory("android.intent.category.ALTERNATIVE");
        gpsIntent.setData(Uri.parse("custom:3"));
        try{
            PendingIntent.getBroadcast(this, 0, gpsIntent, 0).send();
        }
        catch(CanceledException e) {
            e.printStackTrace();
        }
    }

 说明:

函数功能更:用于开启或关闭GPS。如果当前是开启的,那么就会关闭它,反之亦然。

4.2:检查GPS状态:

    secureClass = cl.loadClass("android.provider.Settings$Secure");
    isMethod = secureClass.getMethod("isLocationProviderEnabled",
            ContentResolver.class, String.class);
    Boolean ret = (Boolean) isMethod.invoke(secureClass, this
            .getContentResolver(),"gps");

或: 

    private void isGPSEnable() {
        /* 用Setting.System来读取也可以,只是这是更旧的用法
        String str = Settings.System.getString(getContentResolver(),
                Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        */
        String str = Settings.Secure.getString(getContentResolver(),
                Settings.Secure.LOCATION_PROVIDERS_ALLOWED);
        Log.v("GPS", str);
        if(str != null) {
            returnstr.contains("gps");
        }
        else{
            returnfalse;
        }
    }

 

GPS定位开发步骤以及流程图 目录 GPS定位开发步骤 1. 权限 2.代码流程 2.1. 获取LocationManager 2.2. 判断是否支持GPS 2.3. 获取定位权限 2.4. 创建定位监听 2.5. 判断GPS是否打开 2.6. 初始化GPS定位和注册定位监听 2.7. 打开GPS设置界面 3. GPS定位流程图: GPS定位开发步骤 1. 权限 <uses-permission android:name="android.permission.ACCESS_COARSE_LOC 阅读详情

相关推荐

Android 开启 GPS 的多种方法

在 Android 开发中,我们经常需要使用到设备的 GPS 功能来获取位置信息。下面将介绍一些打开 GPS 的常见方法。以上是几种常见的 Android 开启 GPS 的方法。根据实际需求和具体场景,选择适合的方法来打开设备的 GPS 功能。

ByteWhiz的博客 1423

android GPS开启方法 代码

转自:http://www.learningandroid.net/blog/advance/programmable-toggle-gps/ 手机应用中最酷的可能就是位置服务相关的了,如何读取GPS信息,在官方文档上有相当详细的说明,后面如果有机会,我也会专门写例子来介绍(教程已完成,请参见:教程:实现Android的不同精度的定位(基于网络和GPS))。但今天,我们先来看下如何以编程

晓游的专栏 4324

android 10.0关闭gps定位功能

在定制化开发中,有些是不需要gps定位功能的,所以就需要屏蔽掉gps上报定位数据的功能,而在framework层中是通过 /frameworks/base/location/java/android/location/LocationProvider.java 来上报定位信息给app调用的 Gps定位功能的实现如下: // 判断GPS是否正常启动 if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

安卓兼职framework和app工程师的博客 3843

android gps机制分析--之三

1 gps打开/初始化 在Java层打开gps,其实对于gps库来说,就是执行初始化过程。 1.1 Java层分析 android系统中打开GPS的方法往数据库里面写值, private void enableGps(boolean enable) { try { Settings.Secure.setLocationProviderEnabled(getContentResolver(

Jack的博客 4342

如何关闭 Android 设备的 GPS 定位功能

然而,有时候我们可能希望关闭 GPS 定位功能,以节省电量、保护隐私或避免某些应用程序的定位跟踪。本文将介绍如何在 Android 设备上关闭 GPS 定位功能,并提供相应的源代码。综上所述,通过上述步骤,你可以在 Android 设备上关闭 GPS 定位功能。你可以在适当的地方(例如按钮点击事件或菜单选项)添加上述代码片段,以便用户可以访问系统设置界面并关闭 GPS 定位功能。为了完全关闭设备上的 GPS 定位功能,你可以使用系统设置界面。在你的活动类中,首先需要获取定位管理器的实例。

2301_79326930的博客 1492

C++控制台实现简单的注册登录

C++控制台实现简单的注册登录 #include<iostream> #include<string> #include <vector> #include <conio.h> void Display();//调用display显示switch()界面 void Register();//注册 void Enter();//登录 using nam...

乔路非 2万+

Android 利用程序实现GPS的打开或关闭

Android提供了Setting.Secure类,官方对这个类的解释是用来获取系统设置属性值,但不允许修改。需要用户通过系统UI或者专门的API来设置属性值。但是在2.2之后,Setting.Secure增加了isLocationProviderEnabled和setLocationProviderEnabled方法,通过测试发现isLocationProviderEnabled方法获取GPS的

技术改变世界 1278

Ubuntu20.04系统笔记本网卡AX211无法找到wifi问题

之前电脑的系统是18.04基本上安装好了系统,可以直接连上wifi,在买了拯救者y9000p2022版本之后,因为网卡太新,安装ubuntu18.04或者20.04之后会没有wifi连接,非常不方便。于是上网找了各种帖子去解决这个问题。具体实现有所不同。 主要参考了这个帖子来解决的:http://t.csdn.cn/7807R 首先: sudo apt install flex bison 然后: git clone https://github.com/intel/backpor.

weixin_42825962的博客 1万+

android中关闭gps定位方法_4种强制关闭Ubuntu中无响应应用程序的方法

在使用Ubuntu时,我们的一个或多个进程和应用程序可能会经常挂起。重新启动我们的系统并不总是最佳解决方案,我们发现自己在寻找能够快速、轻松和安全地摆脱无响应的应用程序和程序的方法。在本文中,我们将解释各种方法,通过UI和命令行,您可以摆脱Ubuntu上这些没有响应或挂起的应用程序。我们已经在Ubuntu 18.04 LTS系统上运行了本文中提到的命令和过程。下面提到的一些方法包括使用...

weixin_39828847的博客 773

PD虚拟机安装CentOS7后必做的Parallels Tools配置指南(附常见错误解决)

本文详细指导在Mac的Parallels Desktop虚拟机中安装CentOS 7后如何高效配置Parallels Tools,包括环境准备、镜像挂载、依赖问题解决及性能优化。特别针对常见错误如挂载失败、依赖缺失等提供实用解决方案,帮助用户实现主机与虚拟机间的无缝交互和显示优化。

weixin_29288313的博客 299

MobaXterm详细使用教程

当然MobaXterm的功能远不止这些,但这些是最基本,最常用的,因此先拿出来讲。点击确定后,输入密码(输入密码时并不会显示,只管输入后按确定即可,第一次登陆成功后会提示保存密码,一般选择同意),就可以连接上虚拟机了。(2) 我们可以直接apt-get安装vim等常用功能(或者官网下载插件),实现在windows下模拟linux环境,这样就可以使用vi命令准备INCAR文件,也可以使用Gnuplot进行绘图。支持 Unix 命令(bash,ls,cat,sed,grep,awk,rsync,…

博客 4万+

Android打开或者关闭GPS

打开和关闭gps //打开或者关闭gps public void openGPS(boolean open) { if (Build.VERSION.SDK_INT &lt;19) { Secure.setLocationProviderEnabled(context.getContentResolver(), LocationManager.G...

Luckcat 1万+

27、物联网中的量子密钥分发:安全通信新范式

本文探讨了物联网(IoT)快速发展所带来的安全挑战,并提出量子密钥分发(QKD)作为应对新兴威胁的新范式。文章详细介绍了QKD的基础原理、BB84协议的实现流程以及其在物联网中的应用前景,同时强调了安全专业人员提升技能、制定标准化指南以及跨学科合作的重要性。通过利用量子力学特性,QKD能够提供更高的通信安全性,抵御量子计算等未来威胁,为物联网的安全发展提供保障。

tequila的博客 155

代码实现开启或关闭GPS

手机应用中最酷的可能就是位置服务相关的了,如何读取GPS信息,在官方文档上有相当详细的说明,后面如果有机会,我也会专门写例子来介绍(教程已完成,请参见:教程:实现Android的不同精度的定位(基于网络和GPS))。但今天,我们先来看下如何以编程的方式来开启或关闭GPS。 官方的API中,android.provider.Settings.Secure类有2个静态方法: public stat

幻年,时光。 2149

游戏开发:逻辑与渲染分离技术解析

游戏开发中逻辑与渲染分离的架构设计 本文系统阐述了游戏开发中逻辑与渲染分离的设计原则与实践方法。文章首先定义了核心概念:逻辑层负责游戏规则与状态,渲染层处理视觉表现,二者通过数据模型层进行通信。通过历史回顾,揭示了从早期混合架构到现代分层设计的演变过程。 在技术实现层面,文章详细分析了分离架构的优势:性能优化、流畅度控制、测试便利性、扩展灵活性以及团队协作效率。提供了Unity和Unreal两大引擎的具体实现方案,包括代码示例、分层模型和最佳实践。特别探讨了网络同步、客户端预测、插值处理等关键技术难点。 文

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 1060

OCR文字识别基础

ocr文字识别

m0_47405013的博客 1755

android 代码打开gps,如何在Android中以编程方式启用禁用GPS?

SMILET尝试使用此代码。它适用于所有版本。public void turnGPSOn(){ Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE"); intent.putExtra("enabled", true); this.ctx.sendBroadcast(intent); Stri...

weixin_42392054的博客 385

基于BEV(鸟瞰图)的3D检测:PointPillars与CenterPoint

基于BEV(鸟瞰图)的3D检测:PointPillars与CenterPoint​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于BEV的3D检测,解析了PointPillars与CenterPoint两种算法。PointPillars用点柱特征编码网络处理点云,通过2D卷积网络提取特征,检测头为解耦头;CenterPoint将三维物体表为点,分两阶段检测,先找中心点及属性,再细化预测。两者都可借特定骨干网生成BEV特征图且基于BEV检测,但检测头设计和物体表示方式不同。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 27万+

【Android】代码开启/关闭GPS .

转载自:http://blog.youkuaiyun.com/etzmico/article/details/7200470   如果当前GPS状态为开启状态,代码运行后则关闭;反之,则开启~ 代码如下: Intent GPSIntent = new Intent(); GPSIntent.setClassName("com.android.setti

zxmlovena的专栏 1366

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android 打开或关闭GPS

运行以下代码后,如果Gps状态为开启,则关闭,如果为关闭状态,则开启。2.3.6亲测可行 private void toggleGPS() {                 Intent gpsIntent = new Intent();                 gpsIntent.setClassName("com.android.settings", "com.androi

红袖添香 921

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

android怎样用代码静默开启或关闭GPS。

android怎样用代码静默开启或关闭GPS。

hongchanzhe3785的博客 1127

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android 开启gps 简书,GPS开发

GPS开发是如今当前Android开发较为常用的工具。它的开发主要获取定位点的经度纬度,卫星个数,卫星型号等相关数据。主要运用的LocationManager定位管理器获取相关定位信息。开发流程如下:1,初始化管理器2,获取地理位置信息查询条件3,监听状态4,监听位置信息5,启用GPS.6,关闭GPS一,初始化GPS定位管理器:LocationManager manager = (Location...

weixin_31439191的博客 715

Android蓝牙开发小实例—打开关闭蓝牙

上篇介绍了传统蓝牙和低功耗蓝牙及几个常见类 这篇博客简单介绍一个蓝牙开发小实例:打开关闭蓝牙 第一步:声明所需要的权限:     &lt;uses-permission android:name="android.permission.BLUETOOTH"/&gt; //使用蓝牙所需要的权限 &lt;uses-permission android:name="android.perm...

我的博客 3534

android中gps的打开关闭

亲测一下方法有用,4.2以后都可以用 private void toggleGPS() { Intent gpsIntent = new Intent(); gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppW

2584

android关闭传感器,您如何在安卓10手机上打开和关闭传感器

这是您如何在Android 10手机上打开和关闭传感器的方法。最新的Android智能手机配备了各种传感器和突破性的新功能。温度,湿度和气压计传感器,接近传感器,RGB光传感器,加速度计,磁力计和陀螺仪就是示例。所有传感器在您的手机上都具有特定功能,但是这些传感器也可能被恶意应用用于恶意目的。通过使用手机上安装的应用程序收集数据。例如,陀螺仪可用于拦截手机中的敏感信息,例如密码,帐户名等。在发布A...

weixin_42620255的博客 1万+

系统中打开GPS和关闭GPS

Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_HIGH_ACCURACY);//打开GPS Settings.Secure.putInt(getContentResolver(), Settings.Secure.LOCATION_

u011183484的专栏 981
上一篇: could not get wglGetExtensionsStringARB
下一篇: Android如何正确引用其它jar包
liranke
博客等级 码龄20年 4939粉丝 594原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值