我正在创建一个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())));
答案 0 :(得分:3)
我正在创建一个Android应用程序,我想将下载的图像存储到SD卡或外部存储器。
Android SDK提供对外部存储的访问。这是“sdcard”还是别的东西取决于设备制造商。
我面临的问题是,在某些手机上,图像存储在SD卡上,而在某些手机中,图像存储在内部存储器中,特别是在Galaxy S4等三星设备中。
此代码将图像存储在外部存储器中。它不会将它们存储在内部存储器中。外部存储器是否可拆卸取决于设备制造商。
您可以考虑阅读the documentation about external storage。
您还应该:
不使用字符串连接来创建File
个对象。使用正确的File
构造函数。
将您的数据存储在比外部存储根目录下的硬编码TestApp
目录更好的位置,例如getExternalFilesDir()
或getExternalCacheDir()
。多年来,您的方法一直被认为是糟糕的形式,因为它会使用户的外部存储空间变得混乱。
使用更专注的方法更新MediaStore
,例如使用MediaScannerConnection
和scanFile()
,而不是发送操作系统广播,就像您在操作系统
请务必在后台主题上完成所有这些工作(目前还不清楚您是否来自代码片段)。