【发布时间】:2017-06-12 19:54:40
【问题描述】:
当我的片段膨胀时,它会打开一个dialog box 以获得权限WRITE_EXTERNAL_STORAGE,这是 android 6.0+ 中要求的。我已经按照每个教程进行操作,但是在授予或拒绝权限时我的任何操作都不会执行。
我希望应用程序关闭并在权限被拒绝时显示祝酒词,这意味着当应用程序重新打开时permission would be asked again。
片段开始:
public class SecondFragment extends Fragment {
View myView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.second_layout, container, false);
configureImageButton();
((MainActivity) getActivity()).setActionBarTitle("App");
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(getActivity(),
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);
}
}
onRequestPermissionsResult:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Snackbar.make(myView, "Permission Granted.", Snackbar.LENGTH_LONG).show();
} else if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED) {
Toast.makeText(getActivity(), "Reopen app and allow permission.", Toast.LENGTH_LONG).show();
getActivity().finish();
}
}
}
应用会授予/拒绝权限,但会忽略 toast 或小吃吧。 所有建议表示赞赏。谢谢!
【问题讨论】:
-
问题出在
ActivityCompat.requestPermissions。在您的情况下,onRequestPermissionsResult将在 Activity 中而不是在 Fragment 中调用。当你使用fragment的requestPermissions函数时,它会调用fragment的onRequestPermissionsResult。 -
@aborocz 您的解释很有意义,谢谢,我将代码移到了我的活动中,因为它在片段内部不起作用。现在它完美地工作了。谢谢。
标签: android android-fragments android-permissions