LocationManager的使用

MainActivity.java

package com.sdutacm.locationservice;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements LocationListener{

    //android中进行地理位置定位主要使用的类是LocationManager类,
    //使用LocationManager的方法就先使用其他服务,只需要调用getSystemService()就能获得他的实例,\
    // 并获得他的引用,当然这里需要传入参数Context.LOCATION_SERVICE
    LocationManager locationManager;
    //当获得Location对象后,直接通过LocationManager调用LastKnownLocation()方法就可以获得Location对象,
    //而Location类正是保存位置信息的类
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();
        initLocation();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(locationManager != null){
            checkPermission(new String[]{
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION
            });
            //解除监听
            locationManager.removeUpdates(this);
            locationManager =null;
        }
    }
    private void initLocation() {
        checkPermission(new String []{
            Manifest.permission.ACCESS_COARSE_LOCATION,
                    Manifest.permission.ACCESS_FINE_LOCATION
        });
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        //这里使用GPS位置提供者作为案例
        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        //监听位置变化,每个两秒且距离差距为10米时更新位置信息,这助于控制电量
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,2000,10,this);
        if(location != null){
            Log.d("location","1 纬度: "+location.getLatitude()+",经度: "+location.getLongitude());
            getLocation(location);
        }
    }

    private void getLocation(Location location) {
        Log.d("location","123321");
        Geocoder geocoder = new Geocoder(this);
        Log.d("location","123");
        if(geocoder.isPresent()){
            Log.d("location","geocoder is OK");
        }


        try {
            Log.d("location","123456");
            //使用Geocoder获得具体的地址,参数为纬度和经度
            List
addresses = new ArrayList
(); addresses = geocoder.getFromLocation(location.getLatitude(),location.getLongitude(),1); Log.d("location","as is the "+geocoder.getFromLocation(location.getLatitude(),location.getLongitude(),1)); Log.d("location","123654addresses.get(0) is the "+addresses.get(0)); Address address = addresses.get(0); Log.d("location","12333333"); Log.d("location","address is the "+address+" addresses.get(0) "+addresses.get(0)); Log.d("location",address.getAddressLine(1)+address.getFeatureName()); } catch (IOException e) { e.printStackTrace(); } } @Override public void onLocationChanged(Location location) { //当符合监听条件时,会更新地理位置 Log.d("location","纬度: "+location.getLatitude()+", 经度"+location.getLatitude()); getLocation(location); } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } private void checkPermission(String[] permissions) { int permission_granted = PackageManager.PERMISSION_GRANTED; boolean flag = false; for (int i=0;iint checkPermission = ActivityCompat.checkSelfPermission(this,permissions[i]); if(permission_granted != checkPermission){ flag = true; break; } } if(flag){ ActivityCompat.requestPermissions(this,permissions,111); return; } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode){ case 111: if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ Toast.makeText(this,"获取权限成功!",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(this,"获取权限失败",Toast.LENGTH_SHORT).show(); } break; default: super.onRequestPermissionsResult(requestCode, permissions, grantResults); } } }

你可能感兴趣的:(Android)