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

更多相关文章

  1. android百度地图
  2. LocationManager定位
  3. StickyScrollView解说
  4. Android(安卓)CheckBox实现SwitchButton
  5. 高德地图帮助类
  6. Android——基于ConstraintLayout实现的可拖拽位置控件
  7. Android(安卓)Studio安装配置详细步骤(超详细)
  8. Android(安卓)定位GPS的使用
  9. [置顶] android popupwindow 弹出窗口在控件上方居中,比控件大一

随机推荐

  1. 网站CDN加速是什么? 看完这篇你就明白了!
  2. 高性能图表控件LightningChart中有关用分
  3. 调试硬件BUG的神器——新型逻辑分析仪
  4. 超强兼容! Xilinx Zynq 7045实现支持29种C
  5. Arty家族再添新成员:基于Xilinx Spartan-7
  6. Netcope公司推出面向100GE网络的网络适配
  7. 基于Xilinx Z-7007实现Z-turn SBC简化版
  8. 阿里深度树匹配召回体系演进
  9. 多媒体内容理解在美图社区的应用实践
  10. 详谈pg逻辑复制系列之逻辑复制的搭建(二)