使用环境:
高德,百度定位很常用,但是在后来的版本上,定位的同时需要定位的权限,更甚者华为手机需要开启GPS才可以获取到定位的相关数据。
使用方法:
1 在动态申请GPS的时候,多申请两个权限:读取内存卡,写入内存卡
2 直接跳转设置界面确保GPS开关是否开启:
isOpen : 判断是否开启GPS定位以及室内定位,当然,GPS是最主要的
openGPS: 帮助用户开启GPS的代码,执行过后,GPS在设置中是开启状态
小米系列不需要GPS选项是选中状态就可执行定位代码,所以看起来不明显,但是华为很明显是开启的状态。
/**
* 华为手机专用?
* 判断GPS是否开启,GPS或者AGPS开启一个就认为是开启的
* @param context
* @return true 表示开启
*/
public static final boolean isOPen(final Context context) {
LocationManager locationManager
= (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 通过GPS卫星定位,定位级别可以精确到街(通过24颗卫星定位,在室外和空旷的地方定位准确、速度快)
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// 通过WLAN或移动网络(3G/2G)确定的位置(也称作AGPS,辅助GPS定位。主要用于在室内或遮盖物(建筑群或茂密的深林等)密集的地方定位)
boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gps || network) {
return true;
}
return false;
}
/**
* 强制帮用户打开GPS
* @param context
*/
public static final void openGPS(Context context) {
Intent GPSIntent = new Intent();
GPSIntent.setClassName("com.android.settings",
"com.android.settings.widget.SettingsAppWidgetProvider");
GPSIntent.addCategory("android.intent.category.ALTERNATIVE");
GPSIntent.setData(Uri.parse("custom:3"));
try {
PendingIntent.getBroadcast(context, 0, GPSIntent, 0).send();
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
LogUtil.e("帮助用户强制打开GPS");
}
具体使用方法请自行安排,才疏学浅有需要指点在下的请联系我。
QQ:532245792
Tel: 15515291707