zoukankan      html  css  js  c++  java
  • Android GPS获取当前经纬度坐标

    APP中可能会遇到一种需求,就是将当前所在位置的坐标传到server上,今天我提供三种途径去获取经纬度坐标信息,第一种是通过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 + "
    " + "经度:" + 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>
    执行结果例如以下

    下载Demo请猛戳

    另外一种方法(百度地图API实现,注:须要自己申请apikey

    下载Demo请猛戳


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

    下载Demo请猛戳



  • 相关阅读:
    XAF中实现Combox属性编辑(官方)
    XAF 支持多数据库
    XAF 如何使用复合主键和复合外键
    如何禁止双击ListView记录显示DetailView?
    XAF中主从列表模式下获取当前主对象实例
    使用一个非持久字段PersistentAlias
    XAF 如何将文件存储在文件系统中而不是数据库中
    XAF中如何制作弹出窗体选择数据到ListView列表
    XAF 如何用其他线程更新对象
    XPO中 聚合函数的使用(Count,Max,Sum,Min)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4509760.html
Copyright © 2011-2022 走看看