在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;
}
}
...........
}
申请权限时,弹出如下窗口
`