BaseFragment 런타임 권한
/**
* @ClassName: BaseFragment
* @Description:
* @author: Endeavor
* @date: 2017/4/5
*/
public abstract class BaseFragment extends Fragment {
private PermissionsResultListener mListener;
private int mRequestCode;
/**
* fragment BaseFragment performRequestPermissions
*
* @param desc
* @param permissions
* @param requestCode
* @param listener
*/
protected void performRequestPermissions(String desc, String[] permissions, int requestCode, PermissionsResultListener listener) {
if (permissions == null || permissions.length == 0) return;
mRequestCode = requestCode;
mListener = listener;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List mPermissionList = checkPermission(permissions);
if (!mPermissionList.isEmpty()) {//
String[] temp = mPermissionList.toArray(new String[mPermissionList.size()]);// List
requestEachPermissions(desc, temp, requestCode);
} else {
//
if (mListener != null) {
mListener.onPermissionGranted();
}
}
} else {
if (mListener != null) {
mListener.onPermissionGranted();
}
}
}
/**
*
*
* @param desc
* @param permissions
* @param requestCode
*/
private void requestEachPermissions(String desc, String[] permissions, int requestCode) {
if (showRationale(permissions)) {//
showRationaleDialog(desc, permissions, requestCode);
} else {
requestPermissions(permissions, requestCode);
}
}
/**
* Dialog
*
* @param desc
* @param permissions
* @param requestCode
*/
private void showRationaleDialog(String desc, final String[] permissions, final int requestCode) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(" ")
.setMessage(desc)
.setPositiveButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
requestPermissions(permissions, requestCode);
}
})
.setNegativeButton(" ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.dismiss();
}
})
.setCancelable(false)
.show();
}
/**
* ,
*
* @param permissions
* @return
*/
private boolean showRationale(String[] permissions) {
for (String permission : permissions) {
if (shouldShowRequestPermissionRationale(permission)){
return true;
}
}
return false;
}
/**
*
*
* @param permissions
* @return true ,false
*/
private List checkPermission(String[] permissions) {
List data = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(getActivity(), permission) != PackageManager.PERMISSION_GRANTED) {
data.add(permission);
}
}
return data;
}
/**
*
*
* @param requestCode
* @param permissions
* @param grantResults
*/
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == mRequestCode) {
if (checkEachPermissionsGranted(grantResults)) {
if (mListener != null) {
mListener.onPermissionGranted();
}
} else {//
if (mListener != null) {
mListener.onPermissionDenied();
}
}
}
}
/**
*
*
* @param grantResults
* @return
*/
private boolean checkEachPermissionsGranted(int[] grantResults) {
for (int result : grantResults) {
if (result != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
/**
*
*/
public interface PermissionsResultListener {
void onPermissionGranted();
void onPermissionDenied();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.