我们还应该使用 MediaStore.Images.Media.insertImage() 方法吗?
Should we still use MediaStore.Images.Media.insertImage() method?
我在 android 中看到很多关于将图像保存到画廊的讨论,我想知道 MediaStore 是否仍然是一个很好的处理方式?
谢谢,
我从来没有推荐过这种方法,原因很简单:你不知道图像会在哪里结束。
相反,将图像保存到某个已知的、可控制的位置,然后使用 MediaScannerConnection
让 MediaStore
知道该图像。如果您让用户控制位置,您的应用程序只需为没有单独配置的用户提供默认位置,即可获得加分。
使用 MediaStore.Images.Media.insertImage(...)
你将得到两个文件。 CommonsWare 建议的操作方法如下:
// ...
// (save your image as usual to your custom location)
// ...
// notify mediascanner of the new image
MediaScannerConnection.scanFile(getApplicationContext(),
new String[] { yourFilePath }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
由于此方法 MediaStore.Images.Media.insertImage()
已 弃用 ,最好使用新方法,例如:
val mDrawable: Drawable? = baseContext.getDrawable(id)
val mbitmap = (mDrawable as BitmapDrawable).bitmap
val mfile = File(externalCacheDir, "myimage.PNG")
try {
val outStream = FileOutputStream(mfile)
mbitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream)
outStream.flush()
outStream.close()
} catch (e: Exception) {
throw RuntimeException(e)
}
我在 android 中看到很多关于将图像保存到画廊的讨论,我想知道 MediaStore 是否仍然是一个很好的处理方式?
谢谢,
我从来没有推荐过这种方法,原因很简单:你不知道图像会在哪里结束。
相反,将图像保存到某个已知的、可控制的位置,然后使用 MediaScannerConnection
让 MediaStore
知道该图像。如果您让用户控制位置,您的应用程序只需为没有单独配置的用户提供默认位置,即可获得加分。
使用 MediaStore.Images.Media.insertImage(...)
你将得到两个文件。 CommonsWare 建议的操作方法如下:
// ...
// (save your image as usual to your custom location)
// ...
// notify mediascanner of the new image
MediaScannerConnection.scanFile(getApplicationContext(),
new String[] { yourFilePath }, null,
new MediaScannerConnection.OnScanCompletedListener() {
public void onScanCompleted(String path, Uri uri) {
Log.i("ExternalStorage", "Scanned " + path + ":");
Log.i("ExternalStorage", "-> uri=" + uri);
}
});
由于此方法 MediaStore.Images.Media.insertImage()
已 弃用 ,最好使用新方法,例如:
val mDrawable: Drawable? = baseContext.getDrawable(id)
val mbitmap = (mDrawable as BitmapDrawable).bitmap
val mfile = File(externalCacheDir, "myimage.PNG")
try {
val outStream = FileOutputStream(mfile)
mbitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream)
outStream.flush()
outStream.close()
} catch (e: Exception) {
throw RuntimeException(e)
}