【发布时间】:2021-06-07 15:08:11
【问题描述】:
我尝试实现从存储中写入和读取的请求权限。一切正常,但今天 Android 向我展示了 onRequestPermissionsResult(...) 方法已被弃用。 StackOverflow 中有很多关于这个主题的问题,但不幸的是,它们已经过时了。
我在片段中调用了以下方法。
建议只是调用:
requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
StorageKeys.STORAGE_PERMISSION_CODE)
而不是我的方法:
ActivityCompat.requestPermissions(getActivity(),
new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
StorageKeys.STORAGE_PERMISSION_CODE))
但它们都表明 onRequestPermissionsResult(...) 已被弃用。
这是我的 onRequestPermissionsResult(...) 方法:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
@NonNull int[] grantResults) {
if (requestCode == StorageKeys.STORAGE_PERMISSION_CODE) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
exportBibTex.createBibFile();
exportBibTex.writeBibFile(exportBibTex
.getBibDataLibrary(libraryModel, bookDao, noteDao));
Toast.makeText(getContext(),
getString(R.string.exported_file_stored_in) + '\n'
+ File.separator + StorageKeys.DOWNLOAD_FOLDER + File.separator + fileName
+ StorageKeys.BIB_FILE_TYPE, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getContext(), R.string.storage_permission_denied,
Toast.LENGTH_SHORT).show();
}
}
}
这是一个简单的警报对话框,我在其中调用 onRequestPermissionsResult(...):
private void showRequestPermissionDialog() {
AlertDialog.Builder reqAlertDialog = new AlertDialog.Builder(getContext());
reqAlertDialog.setTitle(R.string.storage_permission_needed);
reqAlertDialog.setMessage(R.string.storage_permission_alert_msg);
reqAlertDialog.setPositiveButton(R.string.ok,
(dialog, which) -> ActivityCompat.requestPermissions(getActivity(),
new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
StorageKeys.STORAGE_PERMISSION_CODE));
reqAlertDialog.setNegativeButton(R.string.cancel,
(dialog, which) -> dialog.dismiss());
reqAlertDialog.create().show();
}
我可以使用 onRequestPermissionsResult(...) 的替代方法吗?
【问题讨论】:
-
onRequestPermissionsResult()在androidx.appcompat.app.AppCompatActivity中没有被弃用。你使用了哪个 Activity 类? -
我在片段中使用它。 Android Studio 的解释是:“Overrides deprecated method in 'androidx.fragment.app.Fragment'”
-
我发布了答案并宣传了您的问题。所以你可以检查我的答案。
-
你应该看看这个官方指南:youtu.be/oP-zXjkT0C0。
onActivityResult()和onRequestPermissionResult()现在都已弃用。 -
requestPermissions 方法已弃用。
标签: java android permissions request deprecated