【问题标题】:What changes are made in the mass storage API between Android 1.5 and Android 1.6Android 1.5 和 Android 1.6 之间的海量存储 API 发生了哪些变化
【发布时间】:2011-04-17 16:26:36
【问题描述】:

不久前我写了一些代码来将图像保存在 SD 卡上。现在我将 targetSDKVersion 添加到我的清单中,现在我的文件保存代码停止工作。

我可以通过从我的清单中删除 targetSdkVersion 来重现它,因为我的应用程序不会向 SD 卡写入任何内容。

Android 1.5 和 1.6 之间的 API 更改是否会阻止我写入 SD 卡?

File imageDirectory = new File(Environment.getExternalStorageDirectory()
                 .getAbsolutePath()
                 + File.separator
                 + FOLDER_NAME);

Log.d(ImageSaver.class.getSimpleName(), "SD Card status: "
            + Environment.getExternalStorageState());

if (!imageDirectory.exists()) {
   boolean created = imageDirectory.mkdir();
   Log.d(ImageSaver.class.getSimpleName(), "Created image directory "
                + imageDirectory + " " + created);
}
File imageFile = new File(imageDirectory.getAbsolutePath() + File.separator
                    + name + nameSuffix + FILE_ENDING);

bitmap.compress(Bitmap.CompressFormat.PNG, FULL_QUALITY,
         new FileOutputStream(imageFile));

这是将位图压缩到 SD 卡的测试代码。对于以下清单条目,它不起作用:

<uses-sdk
   android:minSdkVersion="3"
   android:targetSdkVersion="8" />

我得到以下异常:

09-27 11:35:58.689: 错误/ImageSaver(8672):找不到文件 09-27 11:35:58.689: 错误/图像保护程序(8672): java.io.FileNotFoundException: /sdcard/FOLDER/1285580158662.png

删除 targetSdkVersion 使其再次在所有平台上运行。

如何使代码在设置了 targetSdkVersion 的情况下运行?

【问题讨论】:

    标签: android file-io fragmentation


    【解决方案1】:

    您必须将权限 WRITE_EXTERNAL_STORAGE 添加到您的清单 - 这是自 API 级别 4 以来的新功能。

    【讨论】:

    • 对不起,我忘了添加例外。对于用于初始化 FileOutputStream 的文件,我得到一个 File not found 异常。我认为缺少权限会给我另一个例外。
    • 好吧,它不会。谢谢它现在可以工作了 :) 这个例外完全让我走错了路。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多