Android開發之原生定位的方法(GPS,網路定位)
阿新 • • 發佈:2018-12-19
話不多說,直接程式碼:
package com.qfy.locationtest; import android.content.Context; 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.support.v7.app.AppCompatActivity; import android.util.Log; import java.io.IOException; import java.util.List; public class MainActivity extends AppCompatActivity { private LocationManager locationManager; private String locationProvider; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); List<String> providerList = locationManager.getProviders(true); if (providerList.contains(LocationManager.GPS_PROVIDER)) {//GPRS locationProvider = LocationManager.GPS_PROVIDER; } else if (providerList.contains(LocationManager.NETWORK_PROVIDER)) {//wifi跟資料流量 locationProvider = LocationManager.NETWORK_PROVIDER; } else {//表明沒有開啟GPRS定位或者沒有開啟wifi或者資料,或者沒有相關許可權 Log.e("列印定位方式", "無法獲取該裝置可用的定位工具"); } Log.e("列印定位方式", locationProvider + "="); locationManager.requestLocationUpdates("network", 1000, 1, locationListener);//監聽每一秒的位置變化 LocationListener locationListener = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle arg2) { //位置狀態改變時呼叫該函式,比如:可用,不可應,無服務 } @Override public void onProviderEnabled(String provider) { //定位開啟時呼叫 } @Override public void onProviderDisabled(String provider) { //定位關閉時呼叫 } @Override public void onLocationChanged(Location location) { //監聽位置變化,位置變化對應location發生變化 } }; Location location = locationManager.getLastKnownLocation(locationProvider); // double latitude = location.getLatitude();//維度 // double longitude = location.getLongitude();//經度 // Toast.makeText(this,latitude+"=="+longitude,Toast.LENGTH_LONG).show(); } LocationListener locationListener = new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle arg2) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } @Override public void onLocationChanged(Location location) { double latitude = location.getLatitude(); double longitude = location.getLongitude(); String addString = null; List<Address> addList = null; Geocoder ge = new Geocoder(MainActivity.this); try { addList = ge.getFromLocation(latitude, longitude, 1); } catch (IOException e) { e.printStackTrace(); } if (addList != null && addList.size() > 0) { for (int i = 0; i < addList.size(); i++) { Address ad = addList.get(i); addString = ad.getLocality();//拿到城市 } } String locationStr = "維度:" + location.getLatitude() + "經度:" + location.getLongitude(); Log.i("andly", locationStr + "----" + addString); } }; @Override protected void onDestroy() { super.onDestroy(); if (locationManager != null) { //移除監聽器 locationManager.removeUpdates(locationListener); } } }