Android开发中apk开启sdcard的读写权限

时间:2024-11-09 08:52:29

        在android开发中内存一般分为硬件设备自带的存储空间以及扩展存储空间(sdcard),本文只对使用Android Studio开发程序时开启sdcard的读写权限进行说明
主要步骤分为两步
         中添加权限说明
         java代码文件中添加权限申请代码

第一步 中添加权限说明

需要添加的代码为如下三行
(application字段)
    android:requestLegacyExternalStorage=“true”
(manifest字段)
    <uses-permission android:name=“.READ_EXTERNAL_STORAGE”/>
    <uses-permission android:name=“.WRITE_EXTERNAL_STORAGE”/>
    <uses-permission android:name=“.MANAGE_EXTERNAL_STORAGE”>(在使用高版本Android SDK时添加)

的示例代码如下,注意添加位置,为 manifest中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="/apk/res/android"
	package="">

	<application
		android:allowBackup="true"
		...........
		android:requestLegacyExternalStorage="true"
		...........
		android:theme="@style/AppTheme">
		<activity android:name=".MainActivity">
			<intent-filter>
				.........
			</intent-filter>
		</activity>
	</application>
	
	<uses-permission android:name=".READ_EXTERNAL_STORAGE"/>
	<uses-permission android:name=".WRITE_EXTERNAL_STORAGE"/>	
	<uses-permission android:name=".MANAGE_EXTERNAL_STORAGE"/>

</manifest>	
第二步 java代码文件中添加权限申请代码

需要添加代码如下
(, new String[]{.READ_EXTERNAL_STORAGE, .WRITE_EXTERNAL_STORAGE}, 1);
(在使用高版本Android SDK时添加如下代码)
if(!()){
        Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
        startActivity(intent);
        return;
}

示例代码如下,只需要在sdcard读取文件之前添加代码获得相应权限即可。
当apk在第一次申请此权限并获得权限之后,如果apk不会卸载,后续都不需要重复申请此权限,即使在使用android studio开发过程中修改代码,也不需要重复申请,但是一旦apk卸载之后重新安装,则需要重新申请权限。
import android.Manifest;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Environment;
import android.provider.Settings;
import android.content.Intent;

public class MainActivity extends AppCompatActivity{
............
	public void some_function(){
		ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
		// 高版本Android SDK时使用如下代码
		if(!Environment.isExternalStorageManager()){
			Intent intent = new Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
			startActivity(intent);
			return;
		}
	}
...........
}

申请权限时,弹出如下窗口
在这里插入图片描述

`