LocationManager的简单使用

LocationManager在Android中可以根据LocationManager来获取设备所在的地理信息根据需求可以将定位的代码移动到所需的地方或者可以稍加改动获取城市的信息MainActivity中:packagecom.example.myapplicationpp;importandroid.Manifest;importandroid.app.Activity;…

大家好,又见面了,我是你们的朋友全栈君。

LocationManager

在Android中可以根据LocationManager来获取设备所在的地理信息

根据需求可以将定位的代码移动到所需的地方或者可以稍加改动获取城市的信息

MainActivity 中:

package com.example.myapplicationpp;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import java.io.IOException;
import java.util.List;


public class MainActivity extends Activity {
    private LocationManager locationManager;
    private String locationProvider;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获得LocationManager引用
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        //获取手机中开启的位置提供器
        List<String> providers = locationManager.getProviders(true);
        //选择获取方式
        if (providers.contains(LocationManager.GPS_PROVIDER)) {
            locationProvider = LocationManager.GPS_PROVIDER;
        } else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
            locationProvider = LocationManager.NETWORK_PROVIDER;
        } else {
            Toast.makeText(this,"定位失败",Toast.LENGTH_SHORT).show();
        }


        //执行运行时权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                // TODO: Consider calling
                //    Activity#requestPermissions
                // here to request the missing permissions, and then overriding
                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
                //                                          int[] grantResults)
                // to handle the case where the user grants the permission. See the documentation
                // for Activity#requestPermissions for more details.
                return;
            }
        }
        //周期性的位置更新,每隔3000ms更新位置,第三个参数监听位置的变化距离,单位米
        locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);

    }


    //位置监听器

    LocationListener locationListener = new LocationListener() {


        //状态发生变化时是使用
        @Override
        public void onStatusChanged(String provider, int status, Bundle arg2) {

        }

        @Override
        public void onProviderEnabled(String provider) {

        }

        @Override
        public void onProviderDisabled(String provider) {

        }

        //信息更新时使用
        @Override
        public void onLocationChanged(Location location) {
            //获取精度
            double latitude = location.getLatitude();
            //获取纬度
            double longitude = location.getLongitude();

            String addString = null;

            List<Address> addList = null;

//            Geocoder经纬度解码者可用于将经纬度转为具体位置信息
            Geocoder ge = new Geocoder(MainActivity.this);
            try {
                //通过经纬度获取地址值,由于地址可能有几个,这块限制为一个
                addList = ge.getFromLocation(latitude, longitude, 1);
            } catch (IOException e) {

                e.printStackTrace();
            }
            if (addList != null && addList.size() > 0) {
                for (int i = 0; i < addList.size(); i++) {
                    Address ad = addList.get(i);
                    addString = ad.getLocality();//拿到城市
                }
            }
            if(addString != null) {
                Toast.makeText(MainActivity.this,addString,Toast.LENGTH_SHORT).show();
            }
            String locationStr = "维度:" + location.getLatitude()
                    + "经度:" + location.getLongitude();
            Log.i("andly", locationStr + "----" + addString);
        }
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (locationManager != null) {
            //关闭时程序时,移除监听器
            locationManager.removeUpdates(locationListener);
        }
    }

}

AndroidManifest:
申请权限

	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

在这里插入图片描述

当在真机上运行时,弹出定位错误信息,则可能是因为没有打开定位权限,需要自己手动打开,运行成功弹出你所在的城市的位置。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125469.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月5日 下午4:35
下一篇 2022年4月5日 下午4:35


相关推荐

  • LTE TDD和FDD介绍

    LTE TDD和FDD介绍1 对于这个问题 首先明确什么是 LTE nbsp nbsp nbsp nbsp nbsp nbsp 随着移动通信技术的蓬勃发展 无线通信系统呈现出移动化 宽带化和 IP 化的趋势 移动通信市场的竞争也日趋激烈 为应对来自 WiMAX Wi Fi 等传统和新兴无线宽带接入技术的挑战 提高 3G 在宽带无线接入市场的竞争力 3GPP 开展 UTRA 长期演进 LongTermEvol LTE 技术的研究 以实现 3G 技术向 B3G 和 4

    2026年3月18日
    2
  • 自动化运维平台Spug介绍

    自动化运维平台Spug介绍一、概要Spug是一款使用Python+Flask+Vue+Element组件开发的开源运维管理系统,系统前后端分离,项目创建于2017年,2018年2月第一个开源运维平台版本发布,设计为面向中小型企业设计的轻量级无Agent的自动化运维平台,UI基于AntDesign设计,整合了主机管理、主机批量执行、主机在线终端、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能,且二次开发很方便。它采用授权协议AGPL-3.0,使用开发语言PythonJavaScript;软件采用无Agen

    2022年5月13日
    64
  • Python浪漫表白源码(附带详细教程)

    Python浪漫表白源码(附带详细教程)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;要知道我们程序猿也是需要浪漫的,小博我之前在网上搜寻了很多代码缺发现好多都不是最新的,所以自己就整理了一下代码,现在与广大博友们分享下我们需要用到的包使用pipinstall+(包名)turtle2.random程序源码#ProjectLeader:刘#Project:表白源码

    2022年5月29日
    50
  • 如何保证缓存与数据库的双写一致性?

    作者 | 你是我的海啸 来源 | https://blog.csdn.net/chang384915878 分布式缓存是现在很多分布式应用中必不可少的组件,但是…

    2021年6月22日
    112
  • 【养龙虾】OpenClaw 安装部署全流程 – 手把手教你搭建自己的 AI 助手

    【养龙虾】OpenClaw 安装部署全流程 – 手把手教你搭建自己的 AI 助手

    2026年3月12日
    10
  • IIS服务器配置https

    IIS服务器配置https1 IIS 服务器配置 1 打开 IIS 管理器 点击左侧列表最顶级的 IIS 服务器名 双击右侧功能视图的 服务器证书 进入服务器证书配置页 2 nbsp 在服务器证书配置页中 点击右侧操作列表的 导入 打开 导入证书 对话框 在此对话框中选择相应的 pfx 格式的证书文件并输入其密码 点击 确定 按钮将 pfx 证书添加到 IIS 中 3 nbsp 右击需要支持 https 访问的网站名称 点击 编辑绑定

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号