如何在 Android 设备上添加文件访问权限

huangapple go评论105阅读模式
英文:

How to add files access permission on device android

问题

问题是在设备上没有获得文件许可。 下面的图像显示:照片和媒体访问显示出来,但文件访问没有显示。

在上面的权限访问中,文件许可 没有像下面这样显示:我需要包括文件访问在内的以下许可。

我在清单中使用了权限:

  1. <uses-permission
  2. android:name="android.permission.READ_EXTERNAL_STORAGE" />
  3. <uses-permission
  4. android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  5. <uses-permission
  6. android:name="android.permission.CAMERA" />

从 MainActivity 中:

  1. private static final int CAMERA_PERMISSION_CODE = 100;
  2. private static final int STORAGE_PERMISSION_CODE = 101;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState)
  5. {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. storage = findViewById(R.id.storage);
  9. camera = findViewById(R.id.camera);
  10. // 设置按钮的点击监听器
  11. storage.setOnClickListener(new View.OnClickListener() {
  12. @Override
  13. public void onClick(View v)
  14. {
  15. checkPermission(
  16. Manifest.permission.WRITE_EXTERNAL_STORAGE,
  17. STORAGE_PERMISSION_CODE);
  18. }
  19. });
  20. camera.setOnClickListener(new View.OnClickListener() {
  21. @Override
  22. public void onClick(View v)
  23. {
  24. checkPermission(Manifest.permission.CAMERA,
  25. CAMERA_PERMISSION_CODE);
  26. }
  27. });
  28. }
  29. // 检查和请求权限的函数
  30. public void checkPermission(String permission, int requestCode)
  31. {
  32. if (ContextCompat.checkSelfPermission(MainActivity.this, permission)
  33. == PackageManager.PERMISSION_DENIED) {
  34. // 请求权限
  35. ActivityCompat.requestPermissions(MainActivity.this,
  36. new String[] { permission },
  37. requestCode);
  38. }
  39. else {
  40. Toast.makeText(MainActivity.this,
  41. "已经授予权限",
  42. Toast.LENGTH_SHORT)
  43. .show();
  44. }
  45. }
  46. @Override
  47. public void onRequestPermissionsResult(int requestCode,
  48. @NonNull String[] permissions,
  49. @NonNull int[] grantResults)
  50. {
  51. super
  52. .onRequestPermissionsResult(requestCode,
  53. permissions,
  54. grantResults);
  55. if (requestCode == CAMERA_PERMISSION_CODE) {
  56. if (grantResults.length > 0
  57. && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  58. Toast.makeText(MainActivity.this,
  59. "已授予相机权限",
  60. Toast.LENGTH_SHORT)
  61. .show();
  62. }
  63. else {
  64. Toast.makeText(MainActivity.this,
  65. "已拒绝相机权限",
  66. Toast.LENGTH_SHORT)
  67. .show();
  68. }
  69. }
  70. else if (requestCode == STORAGE_PERMISSION_CODE) {
  71. if (grantResults.length > 0
  72. && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  73. Toast.makeText(MainActivity.this,
  74. "已授予存储权限",
  75. Toast.LENGTH_SHORT)
  76. .show();
  77. }
  78. else {
  79. Toast.makeText(MainActivity.this,
  80. "已拒绝存储权限",
  81. Toast.LENGTH_SHORT)
  82. .show();
  83. }
  84. }
  85. }

最后部分的重复方法已省略。

英文:

My problem is when I am not getting files permission in the device.
Below image is showing: photos and media access are showing but files access not showing.

如何在 Android 设备上添加文件访问权限

In the above permission access files permission not showing like below: I need below permissions including files access.

如何在 Android 设备上添加文件访问权限

I use permision in the manifest:

  1. &lt;uses-permission
  2. android:name=&quot;android.permission.READ_EXTERNAL_STORAGE&quot; /&gt;
  3. &lt;uses-permission
  4. android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot; /&gt;
  5. &lt;uses-permission
  6. android:name=&quot;android.permission.CAMERA&quot; /&gt;

From the MainActivity:

  1. private static final int CAMERA_PERMISSION_CODE = 100;
  2. private static final int STORAGE_PERMISSION_CODE = 101;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState)
  5. {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. storage = findViewById(R.id.storage);
  9. camera = findViewById(R.id.camera);
  10. // Set Buttons on Click Listeners
  11. storage.setOnClickListener(new View.OnClickListener() {
  12. @Override
  13. public void onClick(View v)
  14. {
  15. checkPermission(
  16. Manifest.permission.WRITE_EXTERNAL_STORAGE,
  17. STORAGE_PERMISSION_CODE);
  18. }
  19. });
  20. camera.setOnClickListener(new View.OnClickListener() {
  21. @Override
  22. public void onClick(View v)
  23. {
  24. checkPermission(Manifest.permission.CAMERA,
  25. CAMERA_PERMISSION_CODE);
  26. }
  27. });
  28. }
  29. // Function to check and request permission.
  30. public void checkPermission(String permission, int requestCode)
  31. {
  32. if (ContextCompat.checkSelfPermission(MainActivity.this, permission)
  33. == PackageManager.PERMISSION_DENIED) {
  34. // Requesting the permission
  35. ActivityCompat.requestPermissions(MainActivity.this,
  36. new String[] { permission },
  37. requestCode);
  38. }
  39. else {
  40. Toast.makeText(MainActivity.this,
  41. &quot;Permission already granted&quot;,
  42. Toast.LENGTH_SHORT)
  43. .show();
  44. }
  45. }
  46. @Override
  47. public void onRequestPermissionsResult(int requestCode,
  48. @NonNull String[] permissions,
  49. @NonNull int[] grantResults)
  50. {
  51. super
  52. .onRequestPermissionsResult(requestCode,
  53. permissions,
  54. grantResults);
  55. if (requestCode == CAMERA_PERMISSION_CODE) {
  56. if (grantResults.length &gt; 0
  57. &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  58. Toast.makeText(MainActivity.this,
  59. &quot;Camera Permission Granted&quot;,
  60. Toast.LENGTH_SHORT)
  61. .show();
  62. }
  63. else {
  64. Toast.makeText(MainActivity.this,
  65. &quot;Camera Permission Denied&quot;,
  66. Toast.LENGTH_SHORT)
  67. .show();
  68. }
  69. }
  70. else if (requestCode == STORAGE_PERMISSION_CODE) {
  71. if (grantResults.length &gt; 0
  72. &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  73. Toast.makeText(MainActivity.this,
  74. &quot;Storage Permission Granted&quot;,
  75. Toast.LENGTH_SHORT)
  76. .show();
  77. }
  78. else {
  79. Toast.makeText(MainActivity.this,
  80. &quot;Storage Permission Denied&quot;,
  81. Toast.LENGTH_SHORT)
  82. .show();
  83. }
  84. }
  85. }
  86. }
  87. @Override
  88. public void onRequestPermissionsResult(int requestCode,
  89. @NonNull String[] permissions,
  90. @NonNull int[] grantResults)
  91. {
  92. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  93. if (requestCode == STORAGE_PERMISSION_CODE) {
  94. if (grantResults.length &gt; 0
  95. &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  96. Toast.makeText(MainActivity.this,
  97. &quot;Storage Permission Granted&quot;,
  98. Toast.LENGTH_SHORT)
  99. .show();
  100. }
  101. else {
  102. Toast.makeText(MainActivity.this,
  103. &quot;Storage Permission Denied&quot;,
  104. Toast.LENGTH_SHORT)
  105. .show();
  106. }
  107. }
  108. }

答案1

得分: 1

build.gradle文件中的targetSdkVersion从30更改为29后,我的对话框从“照片/媒体”更改为“照片/媒体/文件”。我相信这与API 30在作用域存储方面更加严格有关。

英文:

Changing the targetSdkVersion from 30 to 29 in my build.gradle file changed the dialog for me from photos/media to photos/media/files. I believe it has something to do with how API 30 is more strict with scoped storage.

答案2

得分: 0

在清单文件的应用程序部分中添加以下行:

  1. android:requestLegacyExternalStorage="true"

可以解决这个问题。

英文:

Adding the below line in the Application portion of Manifest

  1. android:requestLegacyExternalStorage=&quot;true&quot;

solves the problem.

huangapple
  • 本文由 发表于 2020年9月29日 16:27:20
  • 转载请务必保留本文链接:https://go.coder-hub.com/64115729.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定