gpt4 book ai didi

安卓 6.0 棉花糖。无法写入 SD 卡

转载 作者:IT王子 更新时间:2023-10-28 23:42:58 29 4
gpt4 key购买 nike

我有一个使用外部存储来存储照片的应用程序。根据需要,在其 list 中请求以下权限

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

它使用以下内容来检索所需的目录

File sdDir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd", Locale.US);
String date = dateFormat.format(new Date());
storageDir = new File(sdDir, getResources().getString(
R.string.storagedir)
+ "-" + date);

// Create directory, error handling
if (!storageDir.exists() && !storageDir.mkdirs()) {
... fails here

该应用在 Android 5.1 到 2.3 上运行良好;它已经在 Google Play 上架了一年多。

在我的一部测试手机(Android One)升级到 6 之后,它现在在尝试创建必需目录“/sdcard/Pictures/myapp-yy-mm”时返回错误。

SD卡配置为“可移植存储”。我已经格式化了sd卡。我已经更换了它。我已经重启了。一切都无济于事。

此外,内置的 android 屏幕截图功能(通过 Power+Lower 音量)失败,“由于存储空间有限,或者应用程序或您的组织不允许这样做”。

有什么想法吗?

最佳答案

我遇到了同样的问题。 Android中有两种权限:

  • 危险(访问联系人、写入外部存储...)
  • 正常

普通权限由 Android 自动批准,而危险权限需要 Android 用户批准。

这是在 Android 6.0 中获取危险权限的策略

  1. 检查您是否获得了权限
  2. 如果您的应用已获得权限,请继续并正常执行。
  3. 如果您的应用还没有权限,请请求用户批准
  4. 在 onRequestPermissionsResult 中听取用户批准

这是我的情况:我需要写入外部存储。

首先,我检查我是否有权限:

...
private static final int REQUEST_WRITE_STORAGE = 112;
...
boolean hasPermission = (ContextCompat.checkSelfPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED);
if (!hasPermission) {
ActivityCompat.requestPermissions(parentActivity,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
REQUEST_WRITE_STORAGE);
}

然后检查用户是否认可:

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode)
{
case REQUEST_WRITE_STORAGE: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED)
{
//reload my activity with permission granted or use the features what required the permission
} else
{
Toast.makeText(parentActivity, "The app was not allowed to write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show();
}
}
}

}

您可以在此处阅读有关新权限模型的更多信息:https://developer.android.com/training/permissions/requesting.html

关于安卓 6.0 棉花糖。无法写入 SD 卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33139754/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com