关于拉大锯老师《Android开发数据持久化存储》存储到SD卡上的问题
按照老师原代码敲出来的依然没有权限依然报错
W/System.err: java.io.FileNotFoundException: /storage/sdcard0/info.text: open failed: EACCES (Permission denied)
得知6.0以上版本需要 重新获取动态权限
试了一下方法
https://blog.csdn.net/wuqingyou_w/article/details/60138807
此方法测试依然报错
又重新试了另一种方法
https://blog.csdn.net/qq_35649072/article/details/105440376
这两个方法依然提示报错
当前源码如下
package ymbky.example.qqdemotest;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;
public class SDCardDemoActivity extends Activity implements View.OnClickListener{
private static final String TAG1 = "SDCardDemoActivity";
private Button mwriteDataBtn;
// private static final int REQUEST_EXTERNAL_STORAGE = 1;
// private static String[] PERMISSIONS_STORAGE = {
// "android.permission.READ_EXTERNAL_STORAGE",
// "android.permission.WRITE_EXTERNAL_STORAGE" };
// public static void verifyStoragePermissions(Activity activity) {
//
// try {
// //检测是否有写的权限
// int permission = ActivityCompat.checkSelfPermission(activity,
// "android.permission.WRITE_EXTERNAL_STORAGE");
// if (permission != PackageManager.PERMISSION_GRANTED) {
// // 没有写的权限,去申请写的权限,会弹出对话框
// ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sdcard_demo);
// verifyStoragePermissions(this);
mwriteDataBtn= this.findViewById(R.id.write_data_2_sd_card_btn);
mwriteDataBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v==mwriteDataBtn){
File filePath=new File("/storage/sdcard0");
File file=new File(filePath,"info.text");
try {
// if (!file.exists()){
// file.createNewFile();
// }
FileOutputStream fos=new FileOutputStream(file);
fos.write(("LLLLLLLL").getBytes(StandardCharsets.UTF_8));
fos.flush();
fos.close();
Log.d(TAG1,"写入成功");
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我把自己添加的全部注释掉了,现在该怎么改才才能获得动态权限读取写入的功能
把 Androidmanifest 里面要修改的改成
<uses-permission-sdk-23 android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission-sdk-23 android:name="android.permission.READ_EXTERNAL_STORAGE"/>
依然不行
郭神的PermissionX了解一下,动态授权的简单应用,一行代码的事情
https://www.sunofbeach.net/a/1192351879502237696
写完代码后,卸载应用,重新安装。