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();
}
