beat365官方网站-必发365一些奖金-365最快比分网

Android开发获取当前经纬度和详细位置信息(原生代码实现)简单案例

Android开发获取当前经纬度和详细位置信息(原生代码实现)简单案例

文章目录

Android定位(经纬度+当前位置信息)申请权限LocationManage位置管理器完整代码

Android定位(经纬度+当前位置信息)

我相信大家在Android开发中应该都有遇到过需要获取经纬度和当前位置信息的情况!

本人目前也还处于学习Android阶段,想做一下关于Android定位的笔记。

以下是本人通过一个下午的时间找到最新可以获取定位信息的方法。希望对大家也有帮助。

申请权限

LocationManage位置管理器

通过LocatioManage去获取到当前的位置管理器

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

使用locationManager.requestLocationUpdates()方法注意

在方法中使用方法头部带上@SuppressLint("MissingPermission")

或者放在判断是否有使用定位的权限语句的后面

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)

{

}

locationManager.requestLocationUpdates(

选中定位模式,

多久获取一次(毫秒为单位),

移动距离多远获取一次(米为单位),

传一个LocationListener监听

);

// 表示移除LocationManage(位置管理器)

locationManager.removeUpdates(传入实现过LocationListener的类);

完整代码

MainActivity类的代码

import androidx.annotation.NonNull;

import androidx.appcompat.app.AppCompatActivity;

import androidx.core.app.ActivityCompat;

import android.Manifest;

import android.annotation.SuppressLint;

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.Bundle;

import android.util.Log;

import android.widget.TextView;

import java.io.IOException;

import java.util.List;

import java.util.Locale;

public class MainActivity extends AppCompatActivity implements LocationListener {

// 定义TextView

private TextView nowAddress;

private TextView lat;

private TextView lon;

// 定义双精度类型的经纬度

private Double longitude,latitude;

// 定义位置管理器

private LocationManager locationManager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 得到对应视图ID

nowAddress = findViewById(R.id.tv_nowAddress);

lat = findViewById(R.id.tv_latitude);

lon = findViewById(R.id.tv_longitude);

// 判断当前是否拥有使用GPS的权限

if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)

{

// 申请权限

ActivityCompat.requestPermissions(MainActivity.this, new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 100);

}

getLocation();

/*

或者这样子也是可以的

// 获取当前位置管理器

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

// 启动位置请求

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, MainActivity.this);

*/

}

@SuppressLint("MissingPermission")

private void getLocation() {

// 获取当前位置管理器

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

// 启动位置请求

// LocationManager.GPS_PROVIDER GPS定位

// LocationManager.NETWORK_PROVIDER 网络定位

// LocationManager.PASSIVE_PROVIDER 被动接受定位信息

locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, MainActivity.this);

}

// 当位置改变时执行,除了移动设置距离为 0时

@Override

public void onLocationChanged(@NonNull Location location) {

// 获取当前纬度

latitude = location.getLatitude();

// 获取当前经度

longitude = location.getLongitude();

lat.setText("纬度:" + latitude);

lon.setText("经度:" + longitude);

// 定义位置解析

Geocoder geocoder = new Geocoder(MainActivity.this, Locale.getDefault());

try {

// 获取经纬度对于的位置

// getFromLocation(纬度, 经度, 最多获取的位置数量)

List

addresses = geocoder.getFromLocation(latitude, longitude, 1);

// 得到第一个经纬度位置解析信息

Address address = addresses.get(0);

// 获取到详细的当前位置

// Address里面还有很多方法你们可以自行实现去尝试。比如具体省的名称、市的名称...

String info = address.getAddressLine(0) + // 获取国家名称

address.getAddressLine(1) + // 获取省市县(区)

address.getAddressLine(2); // 获取镇号(地址名称)

// 赋值

nowAddress.setText(info);

} catch (IOException e) {

e.printStackTrace();

}

// 移除位置管理器

// 需要一直获取位置信息可以去掉这个

locationManager.removeUpdates(this);

}

// 当前定位提供者状态

@Override

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

Log.e("onStatusChanged", provider);

}

// 任意定位提高者启动执行

@Override

public void onProviderEnabled(@NonNull String provider) {

Log.e("onProviderEnabled", provider);

}

// 任意定位提高者关闭执行

@Override

public void onProviderDisabled(@NonNull String provider) {

Log.e("onProviderDisabled", provider);

}

}

Layout布局的代码

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"

tools:context=".MainActivity">

android:id="@+id/tv_latitude"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="纬度"

app:layout_constraintBottom_toTopOf="@+id/tv_longitude"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

android:id="@+id/tv_longitude"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="经度"

app:layout_constraintBottom_toTopOf="@+id/tv_nowAddress"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toBottomOf="@id/tv_latitude" />

android:id="@+id/tv_nowAddress"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="当前位置"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintLeft_toLeftOf="parent"

app:layout_constraintRight_toRightOf="parent"

app:layout_constraintTop_toTopOf="parent" />

← 上一篇: [讨论]众多电脑拼音输入法你用哪个?
下一篇: NBA2k17无法连接服务器解决方法 服务器断开怎么办 →

相关推荐

和平精英赛季手册怎么升到100级

和平精英赛季手册怎么升到100级

2025-10-28 03:22:22 阅读: 5980
Q版圖片生成:AI繪圖與App應用全攻略

Q版圖片生成:AI繪圖與App應用全攻略

2025-11-22 21:03:52 阅读: 7482
关于 expected NAV的计算

关于 expected NAV的计算

2025-07-12 05:04:19 阅读: 9460
中国古代十大名锤

中国古代十大名锤

2025-07-09 00:19:18 阅读: 6236
​孙权什么时候称帝 孙权在位多少年

​孙权什么时候称帝 孙权在位多少年

2025-08-13 17:50:23 阅读: 4507