Android 位图到文件,不显示在默认库应用程序中
我有这个片段,它是从视图创建图像。文件可以在文件管理器中查看并通过代码访问,但默认的android gallery应用程序不会显示这些文件Android 位图到文件,不显示在默认库应用程序中,android,android-bitmap,Android,Android Bitmap,我有这个片段,它是从视图创建图像。文件可以在文件管理器中查看并通过代码访问,但默认的android gallery应用程序不会显示这些文件 Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(returnedBitmap); view.draw(canvas); ByteArray
Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(returnedBitmap);
view.draw(canvas);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
returnedBitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes);
Date now = new Date();
String path = Environment.getExternalStorageDirectory() + File.separator + "Download" + File.separator +now.getTime()+".png";
File f = new File(path);
try {
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.close();
} catch (Exception e) {
}
您需要将文件添加到库中。请从开发人员的网站上尝试以下代码:
private void galleryAddPic(String path) {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(path);//your file path
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
this.sendBroadcast(mediaScanIntent);
}
注意:确保您没有保存在应用程序的私有内存中。我的经验是,使用MediaScanner更好,您可以获取存储在媒体数据库中的内容的URI
static final class PicScanner implements MediaScannerConnectionClient {
@SuppressWarnings("unused")
private static PicScanner mInstance;
private String mFilename;
private String mMimetype;
private MediaScannerConnection mConn;
public static void scan(Context ctx, File file, String mimetype) {
mInstance = new PicScanner (ctx, file, mimetype);
}
private PicScanner (Context ctx, File file, String mimetype) {
this.mFilename = file.getAbsolutePath();
mConn = new MediaScannerConnection(ctx, this);
mConn.connect();
}
@Override
public void onMediaScannerConnected() {
mConn.scanFile(mFilename, mMimetype);
}
@Override
public void onScanCompleted(String path, Uri uri) {
mConn.disconnect();
mInstance = null;
//notifyNewPicSavedLocally(path, uri);
}
}
用法示例:
PicScanner.scan(mContext, picFile, "image/jpeg"); //picFile should be access-able for other process
你介意告诉我上面的答案和下面的“非法辩论”的区别吗?罗宾回答了另一个解决方案。我不知道有什么不同,你介意区别对待,最好的实现方法吗?@user3709251从技术上讲,我没有使用罗宾的解决方案。所以我不能说什么更好。我的解决方案取自开发者网站,它使用广播接收器。使用广播接收器可以使filemanager和es file explorer等应用程序监视文件系统中的更改。所以其他应用程序可以处理这种变化。与google+应用程序一样,只要有新照片,它就会从文件系统上传一张照片。根据您的需要实施并找到最佳解决方案取决于您