首页 > 其他分享 >AndroidStudio:GPS定位与网络定位定位服务

AndroidStudio:GPS定位与网络定位定位服务

时间:2025-01-19 12:31:49浏览次数:3  
标签:定位 void AndroidStudio LOCATION import android public GPS

前言:如今主流的定位方式有两种:GPS定位和网络定位。GPS即通过卫星定位,网络定位则需要通过手机附近的基站,WIFI等确定位置信息。二者的优缺点各有不同,Gps较为精准但是耗电量大,网络定位功耗小但是不精确。这篇文章会以Location Manager为例,讲解如何在Androidstudio中使用这两种定位服务。

一、权限声明

       在Manifest.xml中声明定位权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <!--精确定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!--模糊定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!-- 后台定位-->
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
.......
</manifest>

并注册LocationService服务

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    ......
     <service android:name=".LocationService"
            android:enabled="true"
            android:exported="false"/>
    ......
</manifest>

二、新建LocationService.java文件

导入以下类

import android.Manifest;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import androidx.core.content.ContextCompat;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import android.content.pm.PackageManager;

创建Locationservice

public class LocationService extends Service {
    private static final String TAG = "LocationService";
    private LocationManager locationManager;
    private LocationListener locationListener;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d(TAG, "----------Service created----------");
        //实现定位功能
        initLocation();
    }

    private void initLocation() {
        //创建locationManager
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        //创建locationlistener,在获取位置后调用,写入处理信息的逻辑
        locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(Location location) {
                double latitude = location.getLatitude();//维度
                double longitude = location.getLongitude();//经度

                //这里可以写处理数据的逻辑

                //打印数据
                Log.d(TAG, "Latitude: " + latitude + ", Longitude: " + longitude);
            }

            @Override
            public void onStatusChanged(String provider, int status, Bundle extras) {
            }

            @Override
            public void onProviderEnabled(String provider) {
            }

            @Override
            public void onProviderDisabled(String provider) {
            }
        };
        //判断权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
        //开始请求位置信息
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "Service destroyed");
        //停止请求
        if (locationManager != null && locationListener != null) {
            locationManager.removeUpdates(locationListener);
        }
    }
}

在请求位置信息时,传入了参数LocationManager.GPS_PROVIDER。这样在定位时会使用Gps定位。如果想使用网络定位,只需要把参数改为LocationManager.NETWORK_PROVIDER。

三、权限请求和启动Service

在MainActivity中向用户请求定位权限,得到许可后启动LocationService服务

public class MainActivity extends AppCompatActivity {
    private static final int LOCATION_PERMISSION_REQUEST_CODE = 1;
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        requestLocationPermissions();

    private void requestLocationPermissions() {
        //判断权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED ||
                ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {
        //请求权限
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION,Manifest.permission.ACCESS_COARSE_LOCATION},
                    LOCATION_PERMISSION_REQUEST_CODE);
        } else {
            //启动位置监听服务
            Intent intent = new Intent(this,LocationService.class);
            startService(intent);
        }

    }

在获取到坐标后可以利用Geocoder类获取具体的地理位置,也可通过广播发送到MainActivity进行加工,这里不过多赘述。

标签:定位,void,AndroidStudio,LOCATION,import,android,public,GPS
From: https://blog.csdn.net/m0_72225765/article/details/145241085

相关文章

  • 【无人机】使用扩展卡尔曼滤波器进行协作-UAV-UGV-定位(Matlab代码实现)
      ......
  • NTP北斗校时 是指利用中国的北斗卫星导航系统(BeiDou Navigation Satellite System,简称
    NTP北斗校时是指利用中国的北斗卫星导航系统(BeiDouNavigationSatelliteSystem,简称BDS)提供的时间信息来进行网络时间同步(NTP)。与传统的基于GPS的时间同步不同,北斗卫星系统作为一个独立的全球卫星导航系统,也能够为设备提供精确的时间源,进而支持通过NTP协议进行时间同步。1. 北......
  • IDEA如何快速定位到某一行某一列?
    前言大家好,我是小徐啊。我们在开发Java应用的时候,一般是用IDEA来开发的,毕竟这是一款功能强大的开发工具。我们可以使用IDEA做很多事情,今天小徐就来介绍下在使用IDEA开发的时候,如何快速定位到某个文件的某一行某一列。如何快速定位到某一行某一列首先,我们需要打开要查找的文件,如......
  • position的relative和absolute定位原点是哪里?
    在前端开发中,position属性的relative和absolute定位原点有所不同。以下是关于这两者定位原点的详细解释:1.position:relative;(相对定位)定位原点:相对定位的元素是相对于它原来在文档流中的位置进行偏移的。也就是说,它的定位原点是元素自身原来的位置。特点:相对定位的元素仍然......
  • 代码审计-PHP原生开发&SQL注入&数据库监控&正则搜索&文件定位&静态分析
    知识点1、PHP审计-原生态开发-SQL注入&数据库语句监控2、PHP审计-原生态开发-SQL注入&正则匹配搜索3、PHP审计-原生态开发-SQL注入&功能追踪代码审计分类:1、原生态开发-代码审计源码案例2、框架类开发-代码审计源码案例3、组件类开发-代码审计源码案例4、前端类开发-代码......
  • 怎么使用HTML5来获取定位?定位不准怎么解决?
    在HTML5中,你可以使用GeolocationAPI来获取用户的地理位置。以下是一个简单的示例,展示了如何使用这个API:<!DOCTYPEhtml><html><body><p>点击按钮获取您的地理位置。</p><buttononclick="getLocation()">获取位置</button><pid="demo"></p>......
  • IDA pro 定位关键代码技巧
    第一种方法:搜索特征字符串首先按下快捷键CTRLS+S打开段选择对话框,双击STRINGS段跳转到字符串段,然后点击菜单项“Search→text”,或者按下快捷键ALT+T,打开文本搜索对话框,在String旁边的文本框中输入要搜索的字符串后点击OK按钮,稍等片刻就会定位到搜索结果。第二种方法:搜索关键API......
  • 你有了解HTML5的地理定位吗?怎么使用?
    HTML5的地理定位功能是HTML5提供的一个重要特性,它允许Web应用程序获取用户的地理位置信息。这种功能对于开发基于位置的服务(LBS)非常有用,如地图导航、附近商家推荐等。以下是关于HTML5地理定位功能的详细介绍和使用方法:一、地理定位基础HTML5通过GeolocationAPI提供地理定位功能......
  • HTML学习笔记记录---速预CSS(2) 复合属性、盒子模型、边框线、浮动、定位
    复合属性写法:{font:font-stylefont-weitghtfont-size/line-heightfont-family}{font:样式粗细字号字体}(书写瞬间为固定的不可更改)block         块级元素      divinline         行内元素      spaninline-block ......
  • Ubuntu22.04 解决 E: 无法定位软件包 yum
    1、修改sudovim/etc/apt/sources.list的内容,将下文内容增加至该文件中:debhttp://archive.ubuntu.com/ubuntu/trustymainuniverserestrictedmultiverse#默认注释了源码镜像以提高aptupdate速度,如有需要可自行取消注释debhttps://mirrors.tuna.tsinghua.edu.cn/ubu......