欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android GPS获取当前经纬度坐标

程序员文章站 2023-12-02 08:56:16
app中可能会遇到一种需求,就是将当前所在位置的坐标传到服务器上,今天我提供三种途径去获取经纬度坐标信息,第一种是通过android api来实现,第二种通过百度地图api...

app中可能会遇到一种需求,就是将当前所在位置的坐标传到服务器上,今天我提供三种途径去获取经纬度坐标信息,第一种是通过android api来实现,第二种通过百度地图api来实现,第三种通过天地图api来实现。

第一种方法(android api实现),废话不多说,上代码。

mainactivity代码如下:

public class mainactivity extends activity {
 private static final string tag = mainactivity.class.getsimplename();
 private double latitude = 0.0;
 private double longitude = 0.0;
 private textview info;
 private locationmanager locationmanager;
 
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.main);
 info = (textview) findviewbyid(r.id.tv);
 locationmanager = (locationmanager) getsystemservice(context.location_service);
 if (locationmanager.isproviderenabled(locationmanager.gps_provider)) {
 getlocation();
 //gps已打开
 } else {
 togglegps();
 new handler() {
 }.postdelayed(new runnable() {
 @override
 public void run() {
  getlocation();
 }
 }, 2000);
 
 }
 }
 
 private void togglegps() {
 intent gpsintent = new intent();
 gpsintent.setclassname("com.android.settings", "com.android.settings.widget.settingsappwidgetprovider");
 gpsintent.addcategory("android.intent.category.alternative");
 gpsintent.setdata(uri.parse("custom:3"));
 try {
 pendingintent.getbroadcast(this, 0, gpsintent, 0).send();
 } catch (canceledexception e) {
 e.printstacktrace();
 locationmanager.requestlocationupdates(locationmanager.network_provider, 1000, 0, locationlistener);
 location location1 = locationmanager.getlastknownlocation(locationmanager.network_provider);
 if (location1 != null) {
 latitude = location1.getlatitude(); // 经度
 longitude = location1.getlongitude(); // 纬度
 }
 }
 }
 
 private void getlocation() {
 location location = locationmanager.getlastknownlocation(locationmanager.gps_provider);
 if (location != null) {
 latitude = location.getlatitude();
 longitude = location.getlongitude();
 } else {
 
 locationmanager.requestlocationupdates(locationmanager.gps_provider, 1000, 0, locationlistener);
 }
 info.settext("纬度:" + latitude + "\n" + "经度:" + longitude);
 }
 
 locationlistener locationlistener = new locationlistener() {
 // provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发此函数
 @override
 public void onstatuschanged(string provider, int status, bundle extras) {
 }
 
 // provider被enable时触发此函数,比如gps被打开
 @override
 public void onproviderenabled(string provider) {
 log.e(tag, provider);
 }
 
 // provider被disable时触发此函数,比如gps被关闭
 @override
 public void onproviderdisabled(string provider) {
 log.e(tag, provider);
 }
 
 // 当坐标改变时触发此函数,如果provider传进相同的坐标,它就不会被触发
 @override
 public void onlocationchanged(location location) {
 if (location != null) {
 log.e("map", "location changed : lat: " + location.getlatitude() + " lng: " + location.getlongitude());
 latitude = location.getlatitude(); // 经度
 longitude = location.getlongitude(); // 纬度
 }
 }
 };
 
 /*
 * 
 * 打开和关闭gps第二种方法
 * private void opengpssettings() {
 //获取gps现在的状态(打开或是关闭状态)
 boolean gpsenabled = settings.secure.islocationproviderenabled(getcontentresolver(), locationmanager.gps_provider);
 if (gpsenabled) {
 //关闭gps
 settings.secure.setlocationproviderenabled(getcontentresolver(), locationmanager.gps_provider, false);
 } else {
 //打开gps 
 settings.secure.setlocationproviderenabled(getcontentresolver(), locationmanager.gps_provider, true);
 }
 }*/
}

main.xml布局如下

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/layout"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@android:color/white"
 android:orientation="vertical" >
 
 <textview
  android:id="@+id/tv"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="经纬度信息:"
  android:textcolor="#660000"
  android:textsize="20sp" />
 
</linearlayout>

清单文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="com.example.tqmapdemo"
 android:versioncode="1"
 android:versionname="1.0" >
 <uses-sdk
  android:minsdkversion="8"
  android:targetsdkversion="18" />
 
 <!-- 连接互联网internet权限 -->
 <uses-permission android:name="android.permission.internet" />
 <!-- gps定位权限 -->
 <uses-permission android:name="android.permission.access_coarse_location" />
 <uses-permission android:name="android.permission.access_fine_location" />
 
 <application
  android:allowbackup="true"
  android:icon="@drawable/ic_launcher"
  android:label="@string/app_name"
  android:theme="@android:style/theme.black" >
  <activity
   android:name="com.example.tqmapdemo.mainactivity"
   android:label="@string/app_name" >
   <intent-filter>
    <action android:name="android.intent.action.main" />
 
    <category android:name="android.intent.category.launcher" />
   </intent-filter>
  </activity>
 </application>
</manifest>

运行结果如下

Android GPS获取当前经纬度坐标

下载demo请猛戳

第二种方法(百度地图api实现,注:需要自己申请apikey

下载demo请猛戳

Android GPS获取当前经纬度坐标

第三种方法(天地图api实现)

下载demo请猛戳

Android GPS获取当前经纬度坐标

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。