百度定位配置详解
Android studio环境下的百度定位详解
bug的修复也是基于链接中的配置情况。
导包不完整(解压后的文件全部导入才行)
需要导入libs的文件。
动态权限问题
前言:
我们都知道现在手机系统已经到了很高的版本,在我们的Android6.0以后很多权限都被列入危险权限,都需要用户手动去确认
6.0以后被列为危险级别的一些权限
于是使用百度定位的时候需要动态获取权限
首先将权限信息导入,导入后运行时才会出现相关权限获取的请求通知
<!--位置权限-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
办法一:
真真正正手动给软件在设置里面打开位置权限,注意一定要手动打开,这样系统才会默认给予完整权限,否则通过文件权限配置提示再进行位置权限打开,虽然打开了但还是没法用需要动态申请才能用(个人猜想可能非手动给予的权限不完整,需要申请完整权限才能用)。
立即推=》以后遇见权限问题,手动设置一波权限试一下。
办法二
前提:通过提示打开了位置权限
定位需要增加一个动态权限,需要在程序运行时动态申请。
6.0及后续版本,使用定位权限还需要在使用时动态申请,动态申请权限。
也就是说使用定位功能需要程序进行动态权限申请,申请成功得到完整权限才可以使用,申请成功一次软件运行期间都可以使用,但是每次重新运行都需要重新申请所以称为动态申请。
于是可以在运行时只在onCreate方法中调用一次 showGPSContacts();来进行权限申请(当该程序加载到内存中时系统先自动调用onCreate然后调用showGPSContacts()一次,进行动态权限申请)
写过Android程序的都知道Activity中有一个名称叫onCreate的方法。该方法是在Activity创建时被系统调用类似构造函数的功能。
private static final int BAIDU_READ_PHONE_STATE = 200;//定位权限请求
private static final int PRIVATE_CODE = 1315;//开启GPS权限
private LocationManager lm;
/**
* 检测GPS、位置权限是否开启=》用户对于是否给予定位权限通知的操作。
*/
public void showGPSContacts() {
//得到系统的位置服务,判断GPS是否激活
lm = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean ok = 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, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, BAIDU_READ_PHONE_STATE);
}
}
} else {
Toast.makeText(this, "系统检测到未开启GPS定位服务,请开启", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, PRIVATE_CODE);
}
}
//注意这里是动态权限配置的回调函数
/**
* Android6.0申请权限的回调方法
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case BAIDU_READ_PHONE_STATE://刚才定义的识别码
if(grantResults[0] == PERMISSION_GRANTED){//用户同意权限,执行我们的操作
return;//返回到定位功能,开始定位
}else{//用户拒绝之后,当然我们也可以弹出一个窗口,直接跳转到系统设置页面
Toast.makeText(MainActivity.this,"未开启定位权限,请手动到设置去开启权限",Toast.LENGTH_LONG).show();
}
break;
default:break;
}
}