1

カスタム Android カメラ レイアウトを作成しています。

http://developer.android.com/guide/topics/media/camera.html#basicsの情報を使用しました。1つのことを除いて、すべてが正常に機能します。

写真は電話のギャラリーには表示されません。メソッドは次のとおりです。

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)); ファイルは実行時に存在し、使用できますが、アプリを終了するとギャラリーにファイルがありません。ファイルマネージャーを使用して、ファイルが削除されているかどうかを確認しましたが、削除されていません。アプリケーションを終了した後も存在しますが、システムはそれが画像であることを認識していません。

更新: 携帯電話を PC に接続した後、写真がギャラリーに表示されました。しかし、携帯電話を PC に接続して切断するまで、新しい写真はギャラリーに表示されません。電話を再起動しても同じ効果があります。

4

2 に答える 2

4

ブロードキャストを送信する必要があります。

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

于 2012-12-29T14:20:06.220 に答える