Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 位图到文件,不显示在默认库应用程序中_Android_Android Bitmap - Fatal编程技术网

Android 位图到文件,不显示在默认库应用程序中

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

我有这个片段,它是从视图创建图像。文件可以在文件管理器中查看并通过代码访问,但默认的android gallery应用程序不会显示这些文件

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+应用程序一样,只要有新照片,它就会从文件系统上传一张照片。根据您的需要实施并找到最佳解决方案取决于您