2012-03-17 11 views
1

私は自分のアプリケーションにカメラを追加しようとしていますが、基本的にはインテントを追加してカメラに組み込むことにしました。インテントは機能しますが、それはちょうどいいと言われますが、セーブすると変わってしまいます。 Eclipseによると、写真はSDカードに保存されているので、FileExplorerの下に移動したときにそれらを見ることができます。しかし、実際にSDカードを調べてみると、そのファイルはありません。アンドロイドカメラのセーブは、SDカードには表示されません

public class C4Main extends Activity { 
private static final int REQUEST_CODE = 1; 
private Bitmap bitmap; 
private ImageView imageView; 
private Camera cam; 
private SurfaceHolder sh; 
private Uri fileUri; 

/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Log.d("testing","before intent"); 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

    fileUri = getOutputMediaFileUri(1); // create a file to save the image 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name 
    Log.d("testing","fileUri: "+fileUri); 
    // start the image capture Intent 
    startActivityForResult(intent, 100); 
    Log.d("testing","after startactivity"); 
} 
private static Uri getOutputMediaFileUri(int type){ 
     return Uri.fromFile(getOutputMediaFile(type)); 
} 

/** Create a File for saving an image or video */ 
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 == 1){ 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
     "IMG_"+ timeStamp + ".jpg"); 
     Log.d("testing loop","Filepath: "+mediaFile.getPath()); 
    } else if(type == 2) { 
     mediaFile = new File(mediaStorageDir.getPath() + File.separator + 
     "VID_"+ timeStamp + ".mp4"); 
    } else { 
     return null; 
    } 

    return mediaFile; 
} 
} 

これは私が使用しているコードで、developer.google.comからコピーされています。そして、EclipseのFileExplorerによると、指定されたパスに保存されていると言われていますが、SDカードには保存されていません。私のハードウェアは、ASUS Transformer prime running android 4.0.3です。 Thaマニフェストは、外部書き込みとカメラ使用の両方の許可を得てセットアップされています。

ご協力いただければ幸いです。

+0

[OK]を、問題はまだ解決されていないが、私はタブレットを再起動した後、画像が正しいファイルに表示されませんでした。しかし、写真を撮るたびにそれを再起動しなければならないと、非常に迷惑になります。 –

+0

あなたのアンドロイドデバイスでは、どのファイルエクスプローラを使用していますか? – user370305

+0

ハードウェアグリッチでなければなりません。私がデバイス上でファイルマネージャを使用する場合、すぐに表示されるように画像が表示されます。ただし、組み込みのギャラリーを使用する場合は表示されません。実際のコンピュータでファイルエクスプローラを使用した場合も同様です。 user370305-デバイスに言及してくれてありがとうございました。そのため、コンピュータ上でなく、実際のデバイスでファイルマネージャを使用することを考えました。 –

答えて

2

私は内蔵カメラの使用にこの意図を使用しています。自動的にSDカードに画像を保存します。

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
        flagImage=1; 
        startActivityForResult(cameraIntent, CAMERA_REQUEST); 
0
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
try { 
     if (requestCode == CAMERA_REQUEST) { 
      Bitmap photo = (Bitmap) data.getExtras().get("data"); 
Cursor c1 = cr.query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, 
        null, p1[1] + " DESC"); 
if (c1.moveToFirst()) { 
       String uristringpic = "content://media/external/images/media/" 
         + c1.getInt(0); 
       Uri newuri = Uri.parse(uristringpic); 
       // Log.i("TAG", "newuri "+newuri); 
       String snapName = getRealPathFromURI(newuri); 

       Uri u = Uri.parse(snapName); 

       File f = new File("" + u); 
ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
       photo.compress(CompressFormat.PNG, 0 /* ignored for PNG */, 
         bos); 
       byte[] bitmapdata = bos.toByteArray(); 
// Storing Image in new folder 
       StoreByteImage(mContext, bitmapdata, 100, fileName); 
関連する問題