LocationManager的使用
16lz
2021-01-25
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百度地图
- LocationManager定位
- StickyScrollView解说
- Android(安卓)CheckBox实现SwitchButton
- 高德地图帮助类
- Android——基于ConstraintLayout实现的可拖拽位置控件
- Android(安卓)Studio安装配置详细步骤(超详细)
- Android(安卓)定位GPS的使用
- [置顶] android popupwindow 弹出窗口在控件上方居中,比控件大一