在AndroidMenifest.xml中申请权限如下:
<!-- 调用手机震动权限 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 保持屏幕常亮 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
在app的build.gradle中:
implementation(name: 'rxpermission', ext: 'aar')
该aar资源链接:https://download.csdn.net/download/qq_30885821/15576772
在MainActivity.java中:
// 需要获取的权限
private String[] permissions = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,
Manifest.permission.ACCESS_WIFI_STATE,
Manifest.permission.CHANGE_WIFI_STATE,
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_NETWORK_STATE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
};
// 权限检测
private void requestPermission() {
RxPermissions rxPermissions = new RxPermissions(this);
rxPermissions.requestEach(permissions)
.subscribe(permission -> {
if (permission.granted) {
initGaodeMap();
} else if (permission.shouldShowRequestPermissionRationale) {
boolean fineLocationPermissionApproved =
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED;
if (!fineLocationPermissionApproved) {
Toast.makeText(MainActivity.this, "请开启定位权限", Toast.LENGTH_LONG).show();
return;
}
boolean backgroundLocationPermissionApproved =
ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_BACKGROUND_LOCATION)
== PackageManager.PERMISSION_GRANTED;
if (!backgroundLocationPermissionApproved) {
// Denied permission without ask never again
Toast.makeText(MainActivity.this, "请始终允许定位,否则应用退到后台或手机锁屏后无法记录位置信息", Toast.LENGTH_LONG).show();
}
} else {
// Denied permission with ask never again
//Need to go to the setting
}
});
}
// 在oncreate中调用函数获取权限
requestPermission();