操作不适用于权限被拒绝
Action not working on Permission Denied
当我的片段膨胀时,它会根据 android 6.0+ 中的要求打开 dialog box
权限 WRITE_EXTERNAL_STORAGE
。我已经按照每个教程进行操作,但是 none 我的操作会在授予或拒绝权限时执行。
我希望应用程序关闭并在权限被拒绝时显示敬酒,这意味着 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();
}
}
}
该应用获得了 grant/deny 许可,但忽略了 toast 或 snackbar。
所有建议表示赞赏。谢谢!
片段内部有一些变化
请像下面这样尝试
private void checkLocationPermission() {
if (ContextCompat.checkSelfPermission(this.mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//Prompt the user once explanation has been shown
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_CODE);
} else {
// No explanation needed, we can request the permission.
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_CODE);
}
}
}
其中 MY_PERMISSIONS_REQUEST_CODE = 1
你的情况
(1) 如果您的应用已经被授权,您将无法通过此代码看到权限对话框。
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)
因此,转到“设置”-“应用程序”-“您的应用程序”并禁用您已授予的权限,然后再次运行您的应用程序。
(2) 你的 onCreateView returns myView 是否正确?在您的示例代码中,没有 "return myView;"
public static final int RequestPermissionCodeStorage = 105; // Declare Global Variable
public boolean checkStoragePermission() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int result = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestPermissionCodeStorage);
return false;
}
} else {
return true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case RequestPermissionCodeStorage: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "Allow Permission of Storage", Toast.LENGTH_LONG).show();
finish();
}
return;
}
}
}
当我的片段膨胀时,它会根据 android 6.0+ 中的要求打开 dialog box
权限 WRITE_EXTERNAL_STORAGE
。我已经按照每个教程进行操作,但是 none 我的操作会在授予或拒绝权限时执行。
我希望应用程序关闭并在权限被拒绝时显示敬酒,这意味着 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();
}
}
}
该应用获得了 grant/deny 许可,但忽略了 toast 或 snackbar。 所有建议表示赞赏。谢谢!
片段内部有一些变化 请像下面这样尝试
private void checkLocationPermission() {
if (ContextCompat.checkSelfPermission(this.mContext, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
//Prompt the user once explanation has been shown
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_CODE);
} else {
// No explanation needed, we can request the permission.
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_CODE);
}
}
}
其中 MY_PERMISSIONS_REQUEST_CODE = 1
你的情况
(1) 如果您的应用已经被授权,您将无法通过此代码看到权限对话框。
if (ContextCompat.checkSelfPermission(getActivity(),
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)
因此,转到“设置”-“应用程序”-“您的应用程序”并禁用您已授予的权限,然后再次运行您的应用程序。
(2) 你的 onCreateView returns myView 是否正确?在您的示例代码中,没有 "return myView;"
public static final int RequestPermissionCodeStorage = 105; // Declare Global Variable
public boolean checkStoragePermission() {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int result = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (result == PackageManager.PERMISSION_GRANTED) {
return true;
} else {
ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, RequestPermissionCodeStorage);
return false;
}
} else {
return true;
}
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case RequestPermissionCodeStorage: {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
} else {
Toast.makeText(this, "Allow Permission of Storage", Toast.LENGTH_LONG).show();
finish();
}
return;
}
}
}