1. 程式人生 > >Android 獲取手機當前所在的經緯度

Android 獲取手機當前所在的經緯度

manifest中要加的permission:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    
    <EditText 
        android:id="@+id/et"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:cursorVisible="false"
        android:editable="false"
        />
    
</LinearLayout>

MainActivity.java
package com.example.location;

import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.EditText;

public class MainActivity extends Activity {

	LocationManager lm;
	EditText et;
	LocationListener ll = new LocationListener(){
		public void onLocationChanged(Location location){
			updateView(location);
		}

		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub
			updateView(null);
		}

		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub
			Location l = lm.getLastKnownLocation(provider);
			updateView(l);
		}

		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// TODO Auto-generated method stub
			
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et = (EditText)findViewById(R.id.et);
		lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
		String bestProvider = lm.getBestProvider(getCriteria(), true);
		Location l = lm.getLastKnownLocation(bestProvider);
		updateView(l);
		lm.requestLocationUpdates(bestProvider, 5000, 8, ll);
	}

	private Criteria getCriteria() {
		// TODO Auto-generated method stub
		Criteria c = new Criteria();
		c.setAccuracy(Criteria.ACCURACY_COARSE);
		c.setSpeedRequired(false);
		c.setCostAllowed(false);
		c.setBearingRequired(false);
		c.setAltitudeRequired(false);
		c.setPowerRequirement(Criteria.POWER_LOW);
		return c;
	}
	public void updateView(Location newLocation)
	{
		if(newLocation !=null){
			et.setText("您現在的位置是\n緯度:");
			et.append(String.valueOf(newLocation.getLatitude()));
			et.append("\n經度:");
			et.append(String.valueOf(newLocation.getLongitude()));
		}
		else{
			et.getEditableText().clear();
		}
	}
}