1. 程式人生 > >Android開發之原生定位的方法(GPS,網路定位)

Android開發之原生定位的方法(GPS,網路定位)

話不多說,直接程式碼:

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);
        }
    }
}