如何始终将应用程序存储到SD卡/外部存储

时间:2013-09-20 17:22:43

标签: android file sd-card android-sdcard

我正在创建一个Android应用程序,我想将下载的图像存储到SD卡或外部存储器。我面临的问题是,在某些手机上,图像存储在SD卡上,而在某些手机中,它存储在内部存储器中,特别是在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())));

storage on s4

1 个答案:

答案 0 :(得分:3)

  

我正在创建一个Android应用程序,我想将下载的图像存储到SD卡或外部存储器。

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

  

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

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

您可以考虑阅读the documentation about external storage

您还应该:

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

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

  • 使用更专注的方法更新MediaStore,例如使用MediaScannerConnectionscanFile(),而不是发送操作系统广播,就像您在操作系统

  • 请务必在后台主题上完成所有这些工作(目前还不清楚您是否来自代码片段)。