【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)

简介: 【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)

需要源码请点赞关注收藏后评论区留言私信~~~

一、开启定位功能

手机定位分为卫星定位和网络定位两大类。

(1)卫星定位 卫星定位服务由几个全球卫星导航系统提供。 卫星定位的原理是根据多颗卫星与导航芯片的通信结果得到手机与卫星距离,然后计算手机当前所处的经度、纬度以及海拔高度。 使用卫星定位需开启手机上的GPS功能。

(2)网络定位 网络定位又分为基站定位与WiFi定位。

(1)基站定位 手机插上SIM卡后,SIM卡会搜索周围的基站信号并接入通信服务。 用基站定位需开启手机上的数据连接功能。

(2)WiFi定位 手机接入某个公共热点网络,比如首都机场的WiFi,查询WiFi路由器的位置便可得知该手机的大致位置。 使用WiFi定位需开启手机上的WLAN功能。

运行App后会显示你手机的对应功能是否开启

代码如下

Java类

package com.example.location;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.provider.Settings;
import android.widget.CheckBox;
import androidx.appcompat.app.AppCompatActivity;
import com.example.location.util.SwitchUtil;
@SuppressLint("SetTextI18n")
public class LocationSettingActivity extends AppCompatActivity {
    private CheckBox ck_gps; // 声明一个定位功能的复选框对象
    private CheckBox ck_wlan; // 声明一个WLAN功能的复选框对象
    private CheckBox ck_mobiledata; // 声明一个数据连接功能的复选框对象
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_location_setting);
        ck_gps = findViewById(R.id.ck_gps);
        ck_wlan = findViewById(R.id.ck_wlan);
        ck_mobiledata = findViewById(R.id.ck_mobiledata);
    }
    @Override
    protected void onResume() {
        super.onResume();
        // 获取定位功能的开关状态
        boolean isGpsOpen = SwitchUtil.getLocationStatus(this);
        ck_gps.setChecked(isGpsOpen);
        ck_gps.setText("定位功能" + ((isGpsOpen)?"开启":"关闭"));
        // 获取WLAN功能的开关状态
        boolean isWlanOpen = SwitchUtil.getWlanStatus(this);
        ck_wlan.setChecked(isWlanOpen);
        ck_wlan.setText("WLAN功能" + ((isWlanOpen)?"开启":"关闭"));
        // 获取数据连接功能的开关状态
        boolean isMobileOpen = SwitchUtil.getMobileDataStatus(this);
        ck_mobiledata.setChecked(isMobileOpen);
        ck_mobiledata.setText("数据连接" + ((isMobileOpen)?"开启":"关闭"));
        ck_gps.setOnCheckedChangeListener((buttonView, isChecked) -> {
            // 跳转到系统的定位设置页面
            startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
        });
        ck_wlan.setOnCheckedChangeListener((buttonView, isChecked) -> {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                // 跳转到系统的WLAN设置页面
                startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS));
            } else { // Android10之后,普通应用不能直接开关WLAN
                // 设置WLAN功能的开关状态
                SwitchUtil.setWlanStatus(this, isChecked);
                ck_wlan.setText("WLAN功能" + ((isChecked)?"开启":"关闭"));
            }
        });
        ck_mobiledata.setOnCheckedChangeListener((buttonView, isChecked) -> {
            // 跳转到系统的移动网络设置页面
            startActivity(new Intent(Settings.ACTION_DATA_ROAMING_SETTINGS));
        });
    }
}

XML文件

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="10dp" >
    <CheckBox
        android:id="@+id/ck_gps"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_gravity="left|center_vertical"
        android:button="@null"
        android:checked="false"
        android:drawableLeft="@drawable/ck_status_selector"
        android:text="GPS"
        android:textColor="#000000"
        android:textSize="17sp" />
    <CheckBox
        android:id="@+id/ck_wlan"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_gravity="left|center_vertical"
        android:button="@null"
        android:checked="false"
        android:drawableLeft="@drawable/ck_status_selector"
        android:text="WLAN"
        android:textColor="#000000"
        android:textSize="17sp" />
    <CheckBox
        android:id="@+id/ck_mobiledata"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_gravity="left|center_vertical"
        android:button="@null"
        android:checked="false"
        android:drawableLeft="@drawable/ck_status_selector"
        android:text="数据连接"
        android:textColor="#000000"
        android:textSize="17sp" />
</LinearLayout>

创作不易 觉得有帮助请点赞关注收藏~~~

目录
打赏
0
0
0
0
146
分享
相关文章
Android手机上使用Socks5全局代理-教程+软件
Android手机上使用Socks5全局代理-教程+软件
5998 2
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
48 0
【06】flutter完成注册页面-密码登录-手机短信验证-找回密码相关页面-并且实现静态跳转打包demo做演示-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
1955 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
Android性能测试——发现和定位内存泄露和卡顿
本文详细介绍了Android应用性能测试中的内存泄漏与卡顿问题及其解决方案。首先,文章描述了使用MAT工具定位内存泄漏的具体步骤,并通过实例展示了如何分析Histogram图表和Dominator Tree。接着,针对卡顿问题,文章探讨了其产生原因,并提供了多种测试方法,包括GPU呈现模式分析、FPS Meter软件测试、绘制圆点计数法及Android Studio自带的GPU监控功能。最后,文章给出了排查卡顿问题的四个方向,帮助开发者优化应用性能。
391 4
Android性能测试——发现和定位内存泄露和卡顿
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
178 12
kotlin开发安卓app,如何让布局自适应系统传统导航和全面屏导航
使用`navigationBarsPadding()`修饰符实现界面自适应,自动处理底部导航栏的内边距,再加上`.padding(bottom = 10.dp)`设定内容与屏幕底部的距离,以完成全面的布局适配。示例代码采用Kotlin。
204 15
基于SpringBoot+Vue+uniapp的多功能智能手机阅读APP的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的多功能智能手机阅读APP的详细设计和实现(源码+lw+部署文档+讲解等)
131 7
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
基于springboot+vue.js+uniapp的多功能智能手机阅读APP附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的多功能智能手机阅读APP附带文章源码部署视频讲解等
126 1
AI直播手机APP震撼发布!3大场景直播,60秒一键开播!
🎉 青否数字人AI直播APP发布!🚀 在抖音等平台60秒一键开播,简化直播流程。💡 3种AI直播模式,融合6大AIGC技术,助力新手轻松直播带货且避免违规。💪 AI主播、声音克隆,实时话术改写,智能互动与讲品同步,提升转化。📊 实景与视频直播结合,适应多种场景。🌐 独立部署,自定义版权,1年免费升级,专业售后支持。🚀 (直播: zhibo175) #青否数字人 #AI直播
AI直播手机APP震撼发布!3大场景直播,60秒一键开播!

热门文章

最新文章