最近遇到一个诡异的问题,开发的APP在 华为手机测试没问题发给老外的三星手机死活连不上,且系统可以搜到
按照广大网友的问题分类解决
1.大多数情况------>权限申请
2.小部分情况------>修改版本
先说一下我的结论:老外手机位置信息没打开,对,就是下面那个location没打开,动态权限申请还是可以通过。折腾了好久,终于发现了这个bug
安卓10隐私权限变更
终极蓝牙搜索不到的解决方案
1.在AndroidManifest里面加上了权限
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
?2.动态权限申请
/**
* 用户权限安卓10以上需要
**/
if (Build.VERSION.SDK_INT >= 23) {
if (ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION) != PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) != PERMISSION_GRANTED) {
String[] strings = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
ActivityCompat.requestPermissions(this, strings, 1);
}
}
3.检测并打开系统gps
/**
* 检测GPS、位置权限是否开启
*/
public Boolean checkGPSContacts(){
LocationManager lm = (LocationManager) this.getSystemService(this.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, LOCATIONGPS,
BAIDU_READ_PHONE_STATE);
} else {
getLocation();//getLocation为定位方法
}
} else {
getLocation();//getLocation为定位方法
}
return true;
}
return false;
}
if(!checkGPSContacts()){
showDialogInternet(使用蓝牙功能需要打开手机定位信息,是否去打开?);
}
?打开系统gps
public void showDialogInternet(Context context,String str){
myDialogs = new AlertDialog.Builder(DeviceListActivity.this,R.style.AppCompatAlertDialogStyle).setTitle(R.string.pleaseOpenGPSPermission).setMessage(str)
// 设置内容
.setPositiveButton(R.string.yes,// 设置确定按钮
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
finish();
Intent intent = new Intent();
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, PRIVATE_CODE);
}
})
.setNegativeButton(R.string.no,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
myDialogs.dismiss();
showToast(context,getResources().getString(R.string.noGPSPermission),3000);
finish();
}
}).create();// 创建
// 显示对话框
myDialogs.show();
myDialogs.setCanceledOnTouchOutside(false);//防止点击dialog外面触发dialog隐藏
myDialogs.setOnCancelListener(new DialogInterface.OnCancelListener() {//监听系统返回按键的回调函数
@Override
public void onCancel(DialogInterface dialog) {
Log.e(TAG,"*************************************************************取消*************************************************************");
}
});
}
public static void showToast(Context context,
String content,int time) {
if (toast == null) {
toast = Toast.makeText(context,
content,
time);
} else {
toast.setText(content);
}
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
这一套组合拳下来,基本上都能解决。如果部分平板没有位置权限,请自行将build.gradle里面的版本降低到27,这样的就会有部分高版本的功能用不了。自行选择
|