BaseLocationFragment /** * 类描述:请求定位权限Fragment有需要定位权限功能的应用,在Actvity的布局中使用fragment标签,name设置为该 * 来的实现类即可,在回调方法中调用定位API即可 * 作者:x
/** * 类描述:请求定位权限Fragment有需要定位权限功能的应用,在Actvity的布局中使用fragment标签,name设置为该 * 来的实现类即可,在回调方法中调用定位API即可 * 作者:xues * 时间:2017年09月02日 * 使用查看链接:http://www.jianshu.com/p/3459125aeca0 */ public abstract class BaseLocationFragment extends BaseFragment { private static final int REQUEST_PERMISSION_LOCATION = 111;//定位权限请求码 private static final String mCancelTip = "需在手机设置中打开京东的位置信息权限。";//取消提示信息 /** * 第一步调用检查定位权限 */ public void checkLocationPermission() { Context activity = getActivity(); //未获取权限 if (ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { //询问状态 if (shouldShowRequestPermissionRationale(Manifest.permission.ACCESS_FINE_LOCATION)) { /*在Fragment中不能使用以下方式申请权限,否则,会接收不到结果 ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_LOCATION);*/ new AlertDialog.Builder(getActivity()) .setMessage("为保证您正常地使用此功能,需要获取您的位置使用权限,请允许")// 禁止状态 .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getActivity(), mCancelTip, Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }) .setPositiveButton("去允许", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //在Fragment中申请权限 requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_LOCATION); dialog.dismiss(); } }) .show(); } else { /* * 禁止状态 * 注意:禁止状态调用申请权限的方法requestPermissions没反应,此时提示用户为什么要这个权限且跳转至应用信息页面,让用户开启权限 * */ new AlertDialog.Builder(getActivity()) .setMessage("未取得您的位置信息使用权限,此功能无法使用。请前往应用权限设置打开权限")// 禁止状态 .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getActivity(), mCancelTip, Toast.LENGTH_SHORT); dialog.dismiss(); } }) .setPositiveButton("去打开", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //去应用信息页面 goToAppDetailSettingIntent(getActivity()); dialog.dismiss(); } }) .show(); } } else { //已经允许 startLocation(); } } /** * 跳转到应用信息页面 * * @param context */ public static void goToAppDetailSettingIntent(Context context) { Intent localIntent = new Intent(); localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= 9) { localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); localIntent.setData(Uri.fromParts("package", context.getPackageName(), null)); } else if (Build.VERSION.SDK_INT <= 8) { localIntent.setAction(Intent.ACTION_VIEW); localIntent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails"); localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName()); } context.startActivity(localIntent); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case REQUEST_PERMISSION_LOCATION: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { startLocation(); } } } } /** * 在该方法中调用定位服务 */ public abstract void startLocation(); }