Android : GPS定位 获取当前位置—简单应用
示例图:

MainActivity.java
package com.example.mygpsapp;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import java.util.List;public class MainActivity extends AppCompatActivity {private Button button, btnGetData;//系统位置管理对象private LocationManager locationManager;private TextView textView;private EditText editText;private ListView listView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = findViewById(R.id.btn_get_provider);textView = findViewById(R.id.tv_see);listView = findViewById(R.id.list_view);btnGetData = findViewById(R.id.btn_get_data);editText = findViewById(R.id.et_content);//1.获取系统 位置管理对象 LocationManagerlocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);// 2. 获取所有设备名字List<String> providerName = locationManager.getAllProviders();//2.1获取指定设备 gps
// LocationProvider gpsProvider = locationManager.getProvider(LocationManager.GPS_PROVIDER);//3 把数据放到listView 中显示/**3个* passive: 代码表示:LocationManager.PASSIVE_PROVIDER* gps: 代码表示:LocationManager.GPS_PROVIDER* network: 网络获取定位信息 LocationManager.NETWORK_PROVIDER* */ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(this, R.layout.list_layout, providerName);listView.setAdapter(arrayAdapter);//从6.0系统开始,需要动态获取权限int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);if (permissionCheck != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 0);}button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// Criteria 过滤 找到 定位设备//1.获取位置管理对象 LocationManagerLocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);//2. 创建 Criteria 过滤条件Criteria criteria = new Criteria();//要求设备是免费的criteria.setCostAllowed(false);// 要求能提供高精度信息criteria.setAltitudeRequired(true);// 要求能提供反方向信息criteria.setBearingRequired(true);// 设置精度 标准不限
// criteria.setAccuracy(Criteria.NO_REQUIREMENT);// 设置功率要求 电量 标准不限
// criteria.setPowerRequirement(Criteria.NO_REQUIREMENT);//获取最佳提供商List<String> datas = locationManager.getAllProviders();textView.setText(datas.toString());}});//获取定位信息事件btnGetData.setOnClickListener(new View.OnClickListener() {@SuppressWarnings("all") //警告过滤@Overridepublic void onClick(View v) {try {//1.获取系统 位置管理对象 LocationManagerlocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);//2.从GPS 获取最近定位信息//获取到位置相关信息Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);//把信息设置到文本框中updatView(location);//设置每3秒 获取一次Gps 定位信息locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 8, new LocationListener() {@Overridepublic void onLocationChanged(@NonNull Location location) {//当GPS 位置发生改变时 执行方法updatView(location);}@Overridepublic void onProviderDisabled(@NonNull String provider) {//禁用时 执行方法updatView(null);}@Overridepublic void onProviderEnabled(@NonNull String provider) {// 可以用时 执行方法updatView(locationManager.getLastKnownLocation(provider));}});} catch (Throwable e) {e.printStackTrace();}}});}//把信息设置到文本框中public void updatView(Location location) {if(location != null){StringBuilder cont = new StringBuilder();cont.append("实时定位信息:\n");cont.append("经度:");cont.append(location.getLongitude());cont.append("\n纬度:");cont.append(location.getLatitude());cont.append("\n高度:");cont.append(location.getAltitude());cont.append("\n速度:");cont.append(location.getSpeed());cont.append("\n方向:");cont.append(location.getBearing());editText.setText(cont.toString());}else {editText.setText("没有开启定位信息!");}}//请求权限结果
// ACCESS_FINE_LOCATION 访问精细定位
// ACCESS_COARSE_LOCATION 访问粗略定位@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case 0:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {Toast.makeText(MainActivity.this, "访问精细定位权限授权成功", Toast.LENGTH_SHORT).show();//从6.0系统开始,需要动态获取权限int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);if (permissionCheck != PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);}}break;case 1:if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {Toast.makeText(MainActivity.this, "访问粗略定位权限授权成功", Toast.LENGTH_SHORT).show();}break;default:break;}}
}
布局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="GPS简单应用:"android:textSize="24sp"/><Buttonandroid:id="@+id/btn_get_provider"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="18sp"android:text="Criteria过滤获取定位设备"/><TextViewandroid:id="@+id/tv_see"android:textSize="24sp"android:textColor="#FF00ff00"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid:text="定位设备:"android:textSize="24sp"android:layout_width="match_parent"android:layout_height="wrap_content"/><ListViewandroid:id="@+id/list_view"android:layout_width="match_parent"android:layout_height="150dp"/><Buttonandroid:id="@+id/btn_get_data"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="24sp"android:text="点击获取位置信息"/><EditTextandroid:id="@+id/et_content"android:layout_width="match_parent"android:layout_height="200dp"/>
</LinearLayout>
listView 布局文件 list_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:textSize="20sp"android:textColor="#ff0f"android:layout_width="match_parent"android:layout_height="match_parent"></TextView>
权限配置 AndroidManifest.xml
<!-- 配置 读取位置权限ACCESS_FINE_LOCATION location 访问精细定位ACCESS_COARSE_LOCATION 访问粗略定位GPS--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
相关文章:
Android : GPS定位 获取当前位置—简单应用
示例图: MainActivity.java package com.example.mygpsapp;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Manif…...
目标检测——R-CNN算法解读
论文:Rich feature hierarchies for accurate object detection and semantic segmentation 作者:Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik 链接:https://arxiv.org/abs/1311.2524 代码:http://www.cs.berke…...
基于傅里叶变换的运动模糊图像恢复算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1、傅里叶变换与图像恢复 4.2、基于傅里叶变换的运动模糊图像恢复算法原理 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 %获取角度 img…...
使用mock.js模拟数据
一、安装mock.js npm i mockjs 二、配置JSON文件 我们创建一个mock文件夹,用于存放mock相关的模拟数据和代码实现。 我们将数据全部放在xxx.json文件夹下,里面配置我们需要的JSON格式的数据。 注意:json文件中不要留有空格,否则…...
Android Handler同步屏障:深入解析
Android Handler同步屏障:深入解析 在Android开发中,Handler和MessageQueue是处理线程间通信的重要组件。除了常见的消息发送和处理功能,Handler还提供了一个高级特性:同步屏障。本文将深入探讨这一特性,包括它的工作…...
HT for Web (Hightopo) 使用心得(5)- 动画的实现
其实,在 HT for Web 中,有多种手段可以用来实现动画。我们这里仍然用直升机为例,只是更换了场景。增加了巡游过程。 使用 HT 开发的一个简单网页直升机巡逻动画(Hightopo 使用心得(5)) 这里主…...
Leetcode(面试题 08.01.)三步问题
文章目录 前言一、题目分析二、算法原理1.状态表示2.状态转移方程3.初始化4.填表顺序5.返回值是什么 三、代码实现总结 前言 在本文章中,我们将要详细介绍一下Leetcode(面试题 08.01.)三步问题相关的内容 一、题目分析 1.小孩可以上一阶,两阶ÿ…...
AIGC: 关于ChatGPT中输出表格/表情/图片/图表这些非文本的方式
ChatGPT 不止是 文本输出 ChatGPT是一个文本模型, 它本身并不能直接去生成图片图表等内容在我们的工作当中,经常需要通过表格, 图表的方式去进行数据的处理和展示在这种情况下,GPT由于不支持去直接的生成图片和图表,我们还能够使用它的GPT帮…...
聊聊logback的addtivity属性
序 本文主要研究一下logback的addtivity属性 LoggerModel ch/qos/logback/classic/model/LoggerModel.java PhaseIndicator(phase ProcessingPhase.SECOND) public class LoggerModel extends Model {private static final long serialVersionUID 5326913660697375316L;S…...
在网络安全护网中,溯源是什么?
在网络安全护网中,溯源是什么? 在网络安全护网中,溯源是指通过收集、分析和解释数字证据来追踪和还原网络攻击或其他网络犯罪活动的过程。它旨在确定攻击者的身份、行为和意图,以便采取适当的对策,并为法律机构提供必…...
【刷题】动态规划
动态规划 139. 单词拆分(一维) 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1&…...
hadoop操作
文件操作 注意当前所在的路径,创建一个mytest文件夹 创建一个1.txt文件 将1.txt文件移动到mytest中,通过mv改名字,然后查看mytest文件夹的txt文件变成了test.txt 删除文件 上传下载文件 新建1.txt 然后编辑它 随便输入什么 上传 然后看看网…...
角色管理--高级产品经理岗
研发组织管理--角色管理--高级产品经理岗 定位 产品从规划到推进落地的绝对主力,同时能赋能新人,带领新人高质,高效的完成产品的各项工作; 所需资质 某一领域产品专家,有产品架构能力,熟悉产品落地流程…...
nginx: [alert] could not open error log file
先把cmd的报错信息粘出来 nginx: [alert] could not open error log file: CreateFile() “logs/error.log” failed (3: The system cannot find the path specified) 2023/11/29 11:27:37 [emerg] 5040#18772: CreateDirectory() “D:\enviroment\nginx-1.24.0\conf/temp/cli…...
MySQL数据库:外键、唯一键、唯一索引
目录 说明 一、如果要使用外键,表的存储引擎选择哪个? 1.1 答 1.2 示范 1.2.1 主表 (1)MyISAM的表:masterTable2 (2)InnoDB的表:masterTable1 1.2.2 从表 (1&am…...
CSS核心功能手册:从熟悉到精通
CSS核心功能代码 文章目录 CSS核心功能代码[toc]参考HTML代码尺寸操作设置元素尺寸内边距外边距设置默认布局边距用途和使用场景: 背景设置**背景颜色 (background-color)**:**背景图像 (background-image)**:**背景重复 (background-repeat)**:**背景位置 (backgro…...
编程的重要性及解决技术难题的方法
看到这个话题之后,出于好奇,使用某chat,输入相应主题得到的一篇文章,分享给大家。 PS:现在不同版本的chat和其快速更新升级也可以说是编程的结果,其重要性和发展历程也反映了编程的重要性。 一、编程的重要…...
如何成为一名高效的前端开发者(10X开发者)
如今,每个人都想成为我们所说的“10倍开发者”。然而,这个术语经常被误解和高估。 本质上,一个高效或者10倍开发者,在我看来,是指那些能够充分利用所有可用工具的人,通过让这些工具处理冗余和重复的任务&am…...
Docker port 命令
docker port:列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口。 语法 docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]实例 查看容器mymysql的端口映射情况: docker port mymysql##效果如下: …...
PostgreSQL-SQL联表查询LEFT JOIN 数据去重复
我们在使用left join联表查询时,如果table1中的一条记录对应了table2的多条记录,则会重复查出id相同的多条记录。 1、解决方法一 SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.id t2.tid 第一种方法我们发现还是有重复数据 2、解决方法二…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
