Android6.0获取GPS定位和获取位置权限和位置信息的方法
1.添加权限--6.0之后要动态获取,下面会说
2.直接上代码,不多说,代码中注释很详细。
privatestaticfinalintBAIDU_READ_PHONE_STATE=100;//定位权限请求 privatestaticfinalintPRIVATE_CODE=1315;//开启GPS权限
/**
*检测GPS、位置权限是否开启
*/
publicvoidshowGPSContacts(){
lm=(LocationManager)this.getSystemService(this.LOCATION_SERVICE);
booleanok=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
if(ok){//开了定位服务
if(Build.VERSION.SDK_INT>=23){//判断是否为android6.0系统版本,如果是,需要动态添加权限
if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)
!=PERMISSION_GRANTED){//没有权限,申请权限。
ActivityCompat.requestPermissions(this,LOCATIONGPS,
BAIDU_READ_PHONE_STATE);
}else{
getLocation();//getLocation为定位方法
}
}else{
getLocation();//getLocation为定位方法
}
}else{
Toast.makeText(this,"系统检测到未开启GPS定位服务,请开启",Toast.LENGTH_SHORT).show();
Intentintent=newIntent();
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent,PRIVATE_CODE);
}
}
/**
*获取具体位置的经纬度
*/
privatevoidgetLocation(){
//获取位置管理服务
LocationManagerlocationManager;
StringserviceName=Context.LOCATION_SERVICE;
locationManager=(LocationManager)this.getSystemService(serviceName);
//查找到服务信息
Criteriacriteria=newCriteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
Stringprovider=locationManager.getBestProvider(criteria,true);//获取GPS信息
/**这段代码不需要深究,是locationManager.getLastKnownLocation(provider)自动生成的,不加会出错**/
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)!=PERMISSION_GRANTED&&ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS_COARSE_LOCATION)!=PERMISSION_GRANTED){
//TODO:Considercalling
//ActivityCompat#requestPermissions
//heretorequestthemissingpermissions,andthenoverriding
//publicvoidonRequestPermissionsResult(intrequestCode,String[]permissions,
//int[]grantResults)
//tohandlethecasewheretheusergrantsthepermission.Seethedocumentation
//forActivityCompat#requestPermissionsformoredetails.
return;
}
Locationlocation=locationManager.getLastKnownLocation(provider);//通过GPS获取位置
updateLocation(location);
}
/**
*获取到当前位置的经纬度
*@paramlocation
*/
privatevoidupdateLocation(Locationlocation){
if(location!=null){
doublelatitude=location.getLatitude();
doublelongitude=location.getLongitude();
LogUtil.e("维度:"+latitude+"\n经度"+longitude);
}else{
LogUtil.e("无法获取到位置信息");
}
}
/**
*Android6.0申请权限的回调方法
*/
@Override
publicvoidonRequestPermissionsResult(intrequestCode,String[]permissions,int[]grantResults){
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
switch(requestCode){
//requestCode即所声明的权限获取码,在checkSelfPermission时传入
caseBAIDU_READ_PHONE_STATE:
//如果用户取消,permissions可能为null.
if(grantResults[0]==PERMISSION_GRANTED&&grantResults.length>0){//有权限
//获取到权限,作相应处理
getLocation();
}else{
showGPSContacts();
}
break;
default:
break;
}
}
onRequestPermissionsResult这个方法主要是动态获取6.0权限,返回时的回调,我这里需求是获取权限之后获取到当前位置的经纬度详细信息
3.下面是当点击获取GPS定位,跳转到系统开关,ActivityResult回调,我这里做的是必须要开启GPS权限,没有开启会一直让用户开启权限,怎么决定,看具体需求
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
super.onActivityResult(requestCode,resultCode,data);
switch(requestCode){
casePRIVATE_CODE:
showContacts();
break;
}
}
4.动态权限设置添加多条权限
staticfinalString[]LOCATIONGPS=newString[]{Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.READ_PHONE_STATE};
注:代码很详细!基础知识写的不好,大佬勿喷,谢谢!
以上这篇Android6.0获取GPS定位和获取位置权限和位置信息的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。