0

我正在制作一个 android 应用程序,我想将下载的图像存储到 sdcard 或外部存储中。我面临的问题是,在某些手机上,图像存储在 sdcard 上,而在某些手机中,图像存储在内部存储器中,特别是在 Galaxy S4 等三星设备中。有关 S4 中的文件路径,请参阅附件图像。

File wallpaperDirectory = new File(
                    Environment.getExternalStorageDirectory()
                            + "/TestApp/");
            wallpaperDirectory.mkdirs();
            FileOutputStream out = new FileOutputStream(Environment
                    .getExternalStorageDirectory().toString()
                    + "/TestApp/" + secret + ".jpg");
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
            Toast.makeText(
                    getApplicationContext(),
                    "Wallpaper saved sucessfully \n"
                            + Environment.getExternalStorageDirectory()
                                    .toString() + "/TestApp/" + secret
                            + ".jpg", Toast.LENGTH_SHORT).show();
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                    Uri.parse("file://"
                            + Environment.getExternalStorageDirectory())));

s4上的存储

4

1 回答 1

3

我正在制作一个 android 应用程序,我想将下载的图像存储到 sdcard 或外部存储中。

Android SDK 提供对外部存储的访问。这是“sdcard”还是其他东西取决于设备制造商。

我面临的问题是,在某些手机上,图像存储在 sdcard 上,而在某些手机中,图像存储在内部存储器中,特别是在 Galaxy S4 等三星设备中。

此代码将图像存储在外部存储中。它不会将它们存储在内部存储中。外部存储是否可移动取决于设备制造商。

您不妨考虑阅读有关外部存储的文档

您还应该:

  • 不使用字符串连接来创建File对象。使用正确的File构造函数。

  • 将数据存储在比外部存储根目录下的硬编码目录更好的地方TestApp,例如getExternalFilesDir()getExternalCacheDir(). 多年来,您的方法一直被认为是糟糕的形式,因为它会使用户的外部存储变得混乱。

  • 使用更集中的方法进行更新MediaStore,例如使用MediaScannerConnectionand scanFile(),而不是发送操作系统广播,就好像您是操作系统一样。

  • 确保在后台线程上完成所有这些工作(不清楚您是否来自代码片段)。

于 2013-09-20T17:38:41.840 回答