【问题标题】:Android custom camera photos not shown in galleryAndroid 自定义相机照片未显示在图库中
【发布时间】:2012-12-29 13:56:47
【问题描述】:

我正在创建自定义 android 相机布局。

我使用了来自http://developer.android.com/guide/topics/media/camera.html#basics 的信息。除了一件事,一切都很好。

照片未显示在手机的图库中。方法是:

private Camera.PictureCallback cameraCallback = new Camera.PictureCallback() {

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {

        File pictureFile = getOutputMediaFile();
        if (pictureFile == null){
            Log.d(Values.APPLICATION_TAG + ACTIVITY_TAG, "Error creating media file, check storage permissions: ");
            return;
        }

        try {
            FileOutputStream fos = new FileOutputStream(pictureFile);
            fos.write(data);
            fos.flush();
            fos.close();
            createPhotoAndShowPreview(Uri.fromFile(pictureFile));
        } catch (FileNotFoundException e) {
            Log.d(Values.APPLICATION_TAG + ACTIVITY_TAG, "File not found: " + e.getMessage());
        } catch (IOException e) {
            Log.d(Values.APPLICATION_TAG + ACTIVITY_TAG, "Error accessing file: " + e.getMessage());
        }
    }
};

private static File getOutputMediaFile(){

    File galleryDir = new File(Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES), "MyCameraApp"); 
    if (!galleryDir.exists()) {
        if (!galleryDir.mkdir())
        {
            Log.d(Values.APPLICATION_TAG, "failed to create directory");
            return null;
        }
    }

    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    File mediaFile;
    mediaFile = new File(galleryDir.getPath() + File.separator +
            "gfranq_"+ timeStamp + ".jpg");

    return mediaFile;
}

方法 createPhotoAndShowPreview(Uri.fromFile(pictureFile));工作正常,文件在运行时存在,我可以使用它,但是当我退出应用程序时,库中没有文件。我用文件管理器检查文件是否被删除,但没有删除,退出应用程序后存在,但系统不识别它是图像。

更新:将手机连接到电脑后,照片出现在图库中。但是在我将手机与电脑连接并断开连接之前,新照片仍然不会出现在图库中。重启手机也是一样的效果。

【问题讨论】:

    标签: android android-camera


    【解决方案1】:

    你需要发送一个广播:

    context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(imageFile)));

    【讨论】:

      【解决方案2】:
      MediaScannerConnection.scanFile(this, new String[]{file.toString()}, null,
                  new MediaScannerConnection.OnScanCompletedListener() {
                      public void onScanCompleted(String path, Uri uri) {
                          Log.i("ExternalStorage", "Scanned " + path + ":");
                          Log.i("ExternalStorage", "-> uri=" + uri);
                      }
                  });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-07
        相关资源
        最近更新 更多