2012-12-10 2 views
6

私はカメラアプリで作業していますが、「キャプチャ」ボタンを押すと写真が撮られてSDカードに保存されますそれはギャラリーで見ることができます。Androidカスタムカメラのアプリの画像がギャラリーに表示されない場合は、携帯電話を再起動してください

しかし、現時点では、私がそれをどのようにして保存するのに失敗します。現時点では、キャプチャを押すと写真が撮られますが、写真をギャラリーに表示するのは、携帯電話を完全に再起動した後だけです。

この問題は、数週間私と一緒にいたずらされている、私は主にチュートリアルに従っているアンドロイドが与えます。

ここでは、写真を扱うメインクラスのコードを示します。

private PictureCallback mPicture = new PictureCallback() 
    { 

    @Override 
    public void onPictureTaken(byte[] data, Camera camera) 
     { 
     File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE); 
     if (pictureFile == null){ 
      Log.d(TAG, "Error creating media file, check storage permissions: "); 
      return; 
     } 

     try { 
      FileOutputStream fos = new FileOutputStream(pictureFile); 
      fos.write(data); 
      fos.close(); 
     } catch (FileNotFoundException e) { 
      // Log.d(TAG, "File not found: " + e.getMessage()); 
     } catch (IOException e) { 
     // Log.d(TAG, "Error accessing file: " + e.getMessage()); 
     } 
    } 
}; 


private static File getOutputMediaFile(int type){ 
    // To be safe, you should check that the SDCard is mounted 
    // using Environment.getExternalStorageState() before doing this. 

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_PICTURES), "MyCameraApp"); 
    // This location works best if you want the created images to be shared 
    // between applications and persist after your app has been uninstalled. 

    // Create the storage directory if it does not exist 
    if (! mediaStorageDir.exists()){ 
     if (! mediaStorageDir.mkdirs()){ 
      Log.d("MyCameraApp", "failed to create directory"); 
      return null; 
     } 
    } 

    // Create a media file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    File mediaFile; 
    if (type == MEDIA_TYPE_IMAGE){ 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
     "IMG_"+ timeStamp + ".jpg"); 
    } else if(type == MEDIA_TYPE_VIDEO) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
     "VID_"+ timeStamp + ".mp4"); 
    } else { 
     return null; 
    } 

    return mediaFile; 
} 

public void onClick(View v) { 

    mCamera.takePicture(null, null, mPicture); 
    Context context = getApplicationContext(); 
    CharSequence text = "Click Detected"; 
    int duration = Toast.LENGTH_SHORT; 

    Toast toast = Toast.makeText(context, text, duration); 
    toast.show(); 

    } 

マイログ猫は、次の私は、キャプチャをクリックし

レベルを示しています。E タグ:カメラ テキスト:のhandleMessageにCAMERA_MSG_RAW_IMAGEため

私の許可が

uses-permission android:name="android.permission.CAMERA" 
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 
ですが

何か助けていただければ幸いです。おかげ

答えて

6

この質問はImage, saved to sdcard, doesn't appear in Android's Gallery appの重複(ShadowGodによって特に答)

)(fos.close後onPictureTakenに以下を追加し、あなたのコードを修正することです

File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
    Environment.DIRECTORY_PICTURES), "MyCameraApp"); 
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
    Uri.parse("file://"+ mediaStorageDir))); 
+0

キットカットでは動作しません。回避策があれば手助けをしてください。 –

2
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory()))); 

んKITKATでは動作しないようです。許可の拒否の例外がスローされ、アプリがクラッシュします。ですから、私は以下のことをしました。

String path = mediaStorageDir.getPath() + File.separator 
       + "IMG_Some_name.jpg"; 
CameraActivity.this.sendBroadcast(new Intent(
         Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri 
         .parse("file://" + path))); 

希望に役立ちます。

関連する問題