gpt4 book ai didi

java - 仅在 Android 6.0 中没有此类文件或目录

转载 作者:行者123 更新时间:2023-12-01 18:03:51 25 4
gpt4 key购买 nike

下面的代码在 Marshmallow 之前的设备上运行良好,但在 Marshmallow 中则不然。

这些是 list 中的权限

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

这是代码

public void saveImageToSDCard(Bitmap bitmap) {
File myDir = new File(
Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
pref.getGalleryName());

myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Wallpaper-" + n + ".jpg";
File file = new File(myDir, fname);
if (file.exists())
file.delete();
try {
FileOutputStream out = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
Uri uri = getImageContentUri(_context,file);

Log.d(TAG, "Wallpaper saved to: " + file.getAbsolutePath());

} catch (Exception e) {
e.printStackTrace();
}
}

当我手动允许存储权限时,相同的代码可以工作

这是 Nitesh Pareek 给出的解决方案。

private boolean hasPermissions(Context context, String[] permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
String[] PERMISSIONS = new String[]{ Manifest.permission.WRITE_EXTERNAL_STORAGE};

if (!hasPermissions(this, PERMISSIONS)) {
ActivityCompat.requestPermissions(this, PERMISSIONS, 11);
return;
}

最佳答案

从 Android 6.0(API 级别 23)开始,用户在应用运行时(而不是安装应用时)向应用授予权限。

这就是为什么它可以在 lolipop 之前的版本中工作,而不能在 API 23 上工作。仅 Android Manifest 中的权限不够,您还需要在运行时添加它们。请参阅here for more details.

关于java - 仅在 Android 6.0 中没有此类文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38411199/

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