Android onRequestPermissionsResult 无法处理我的片段
Android onRequestPermissionsResult not working on my fragment
在我的 activity 页面之一的片段中,我想获得用户的许可并在授予许可后执行一些操作,但是 onRequestPermissionsResult
不工作而且我没有看到授予权限后的任何日志
public class FragmentAboutUs extends Fragment implements ActivityCompat.OnRequestPermissionsResultCallback {
private Activity activity;
private Context context;
...
private int WRITE_EXTERNAL_STORAGE = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_about_us, container, false);
activity = getActivity();
context = getActivity().getBaseContext();
...
aboutUs = SQLite.select().from(AboutUs.class).querySingle();
if (aboutUs == null) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE);
} else {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE);
}
}
}
return view;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == WRITE_EXTERNAL_STORAGE) {
Log.e("permission granted"," OK");
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
使用:
requestPermissions(permissions, PERMISSIONS_CODE);
而不是你的:
ActivityCompat.requestPermissions()
您可以在这里阅读更多内容:
删除这个:
implements ActivityCompat.OnRequestPermissionsResultCallback
片段本身可以处理 OnRequestPermissionsResultCallback
的运行时权限:
像这样使用它:
final int MyVersion = Build.VERSION.SDK_INT;
if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {
if (!checkIfAlreadyhavePermission()) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE }, WRITE_EXTERNAL_STORAGE); //request permission
} else {
//call your method permision already granted
}
} else {
//call your method permission not needed for this version
}
private boolean checkIfAlreadyhavePermission() {
int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
return result == PackageManager.PERMISSION_GRANTED;
}
现在你可以在你的Fragment
里面得到你的public void onRequestPermissionsResult()
的权限结果
使用:
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case WRITE_EXTERNAL_STORAGE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "permission granted", Toast.LENGTH_LONG).show();
//call your action
} else {
Toast.makeText(getActivity(), "permission denied", Toast.LENGTH_LONG).show();
}
break;
}
}
}
在我的 activity 页面之一的片段中,我想获得用户的许可并在授予许可后执行一些操作,但是 onRequestPermissionsResult
不工作而且我没有看到授予权限后的任何日志
public class FragmentAboutUs extends Fragment implements ActivityCompat.OnRequestPermissionsResultCallback {
private Activity activity;
private Context context;
...
private int WRITE_EXTERNAL_STORAGE = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_about_us, container, false);
activity = getActivity();
context = getActivity().getBaseContext();
...
aboutUs = SQLite.select().from(AboutUs.class).querySingle();
if (aboutUs == null) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE);
} else {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, WRITE_EXTERNAL_STORAGE);
}
}
}
return view;
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == WRITE_EXTERNAL_STORAGE) {
Log.e("permission granted"," OK");
} else {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
}
使用:
requestPermissions(permissions, PERMISSIONS_CODE);
而不是你的:
ActivityCompat.requestPermissions()
您可以在这里阅读更多内容:
删除这个:
implements ActivityCompat.OnRequestPermissionsResultCallback
片段本身可以处理 OnRequestPermissionsResultCallback
的运行时权限:
像这样使用它:
final int MyVersion = Build.VERSION.SDK_INT;
if (MyVersion > Build.VERSION_CODES.LOLLIPOP_MR1) {
if (!checkIfAlreadyhavePermission()) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE }, WRITE_EXTERNAL_STORAGE); //request permission
} else {
//call your method permision already granted
}
} else {
//call your method permission not needed for this version
}
private boolean checkIfAlreadyhavePermission() {
int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
return result == PackageManager.PERMISSION_GRANTED;
}
现在你可以在你的Fragment
public void onRequestPermissionsResult()
的权限结果
使用:
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case WRITE_EXTERNAL_STORAGE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getActivity(), "permission granted", Toast.LENGTH_LONG).show();
//call your action
} else {
Toast.makeText(getActivity(), "permission denied", Toast.LENGTH_LONG).show();
}
break;
}
}
}