【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>

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

相关文章
|
11月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1885 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1206 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
11月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1262 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
12月前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
343 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
12月前
|
存储 消息中间件 人工智能
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
725 10
【08】AI辅助编程完整的安卓二次商业实战-修改消息聊天框背景色-触发聊天让程序异常终止bug牵涉更多聊天消息发送优化处理-优雅草卓伊凡
|
12月前
|
XML 存储 Java
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
274 3
【06】AI辅助编程完整的安卓二次商业实战-背景布局变更增加背景-二开发现页面跳转逻辑-替换剩余图标-优雅草卓伊凡
|
11月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
507 0
|
12月前
|
XML 编解码 Android开发
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
935 0
非常经典的Android开发问题-mipmap图标目录和drawable图标目录的区别和适用场景实战举例-优雅草卓伊凡
|
12月前
|
存储 小程序 Java
热门小程序源码合集:微信抖音小程序源码支持PHP/Java/uni-app完整项目实践指南
小程序已成为企业获客与开发者创业的重要载体。本文详解PHP、Java、uni-app三大技术栈在电商、工具、服务类小程序中的源码应用,提供从开发到部署的全流程指南,并分享选型避坑与商业化落地策略,助力开发者高效构建稳定可扩展项目。
|
定位技术 Android开发 数据格式

热门文章

最新文章