android - 为什么我不能使用我的代码保存到外部存储?
问题描述
我正在尝试编写一个需要保存到外部存储的程序。现在我似乎无法保存到外部存储。
我包括了必要的许可
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我的代码是用于写入外部存储的简单测试。
final Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String path = Environment.getExternalStorageDirectory() + "/Pictures/" + "test.jpg";
File file = new File(path);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
我已经在模拟器和物理设备上运行了这段代码。在这两种情况下,我都没有看到保存到图片文件夹的文件。真的需要帮助。
解决方案
由于 Android M+,您不仅需要在 Manifest 中请求权限,还需要在运行时请求权限
private void requestPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ) {
ActivityCompat
.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
} else {
//your permission was already granted then write to storage
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
// here you write to the storage for the first time
} else {
// Permission Denied
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
推荐阅读
- javascript - Vue,html表格的多重过滤器
- vba - 在 VBA 中将子窗体中的字段作为变量引用
- python - 值错误:行索引为 65536,xls 不允许。格式,如何解决这个错误
- http - 通过 iRule 进行 F5 Big-IP 缓存
- tfs - TFS 获取分支 -> 回滚 -> 向后合并并希望删除所有更改
- python-3.x - 调用更新数据库条目的函数时出错
- python - 只读 gzip JSON 文件的第一行
- mql4 - 如何将发送订单从 mql4 转换为 mql5
- amp-html - AMP 从网页中删除政策声明
- python - 文件处理程序的日志级别与记录器的日志级别