怎么在Android中判断定位功能是否可用
今天就跟大家聊聊有关怎么在Android中判断定位功能是否可用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

10年积累的成都网站设计、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有碑林免费网站建设让你可以放心的选择与我们合作。
判断定位服务:
/**
* 手机是否开启位置服务,如果没有开启那么所有app将不能使用定位功能
*/
public static boolean isLocServiceEnable(Context context) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
boolean gps = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean network = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (gps || network) {
return true;
}
return false;
}判断定位权限:
/**
* 检查权限列表
*
* @param context
* @param op 这个值被hide了,去AppOpsManager类源码找,如位置权限 AppOpsManager.OP_GPS==2
* @param opString 如判断定位权限 AppOpsManager.OPSTR_FINE_LOCATION
* @return @see 如果返回值 AppOpsManagerCompat.MODE_IGNORED 表示被禁用了
*/
public static int checkOp(Context context, int op, String opString) {
final int version = Build.VERSION.SDK_INT;
if (version >= 19) {
Object object = context.getSystemService(Context.APP_OPS_SERVICE);
// Object object = context.getSystemService("appops");
Class c = object.getClass();
try {
Class[] cArg = new Class[3];
cArg[0] = int.class;
cArg[1] = int.class;
cArg[2] = String.class;
Method lMethod = c.getDeclaredMethod("checkOp", cArg);
return (Integer) lMethod.invoke(object, op, Binder.getCallingUid(), context.getPackageName());
} catch (Exception e) {
e.printStackTrace();
if (Build.VERSION.SDK_INT >= 23) {
return AppOpsManagerCompat.noteOp(context, opString, context.getApplicationInfo().uid,
context.getPackageName());
}
}
}
return -1;
}调用时先检查权限:
/**
* 检查定位服务、权限
*/
private void checkLocationPermission() {
if (!AppUtil.isLocServiceEnable(this)) {//检测是否开启定位服务
if (netErrorDialog == null || !netErrorDialog.isShowing()) {
locErrorDialog = DialogUtil.showLocErrorDialog(activity, 0);
}
} else {//检测用户是否将当前应用的定位权限拒绝
int checkResult = AppUtil.checkOp(this, 2, AppOpsManager.OPSTR_FINE_LOCATION);//其中2代表AppOpsManager.OP_GPS,如果要判断悬浮框权限,第二个参数需换成24即AppOpsManager。OP_SYSTEM_ALERT_WINDOW及,第三个参数需要换成AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW
int checkResult2 = AppUtil.checkOp(this, 1, AppOpsManager.OPSTR_FINE_LOCATION);
if (AppOpsManagerCompat.MODE_IGNORED == checkResult || AppOpsManagerCompat.MODE_IGNORED == checkResult2) {
if (netErrorDialog == null || !netErrorDialog.isShowing()) {
locErrorDialog = DialogUtil.showLocErrorDialog(activity, 1);
}
}
}
}如果不能使用,弹出对话框,根据1或2,判断跳转页面:
/**
* 无法定位对话框
*
* @param activity 上下文
* @param state 权限状态0,未开启服务 1,未开启权限
* @return 对话框
*/
public static Dialog showLocErrorDialog(Activity activity, int state) {
Dialog locErrorDialog = new Dialog(activity, R.style.MyDialog);
View contentView = View.inflate(activity, R.layout.dialog_tip_error_loc, null);
locErrorDialog.setContentView(contentView);
locErrorDialog.setCanceledOnTouchOutside(true);
locErrorDialog.show();
TextView checkNetCancel = contentView.findViewById(R.id.tv_submit_no);
TextView checkNet = contentView.findViewById(R.id.tv_submit_yes);
checkNetCancel.setOnClickListener(view -> {
locErrorDialog.dismiss();
});
checkNet.setOnClickListener(view -> {
locErrorDialog.dismiss();
Intent intent = new Intent();
if (state == 0) {
//定位服务页面
intent.setAction(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
} else {
//应用详情页面
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + activity.getPackageName()));
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
activity.startActivity(intent);
} catch (ActivityNotFoundException ex) {
//如果页面无法打开,进入设置页面
intent.setAction(Settings.ACTION_SETTINGS);
try {
activity.startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
}
});
return locErrorDialog;
}Dialog样式:
Android是什么
Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。
看完上述内容,你们对怎么在Android中判断定位功能是否可用有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
标题名称:怎么在Android中判断定位功能是否可用
本文网址:http://www.jxjierui.cn/article/ijhish.html


咨询
建站咨询
