2013-12-15 61 views
0

我想调用摄像头在我的应用程序来拍摄照片并将其保存在SD卡上......相机不能保存图像的SD卡(有时工作)

我的代码工作一段时间,而不是有时工作.. 我不明白为什么?这里是我的代码

public class MainActivity extends Activity { 

int TAKE_PHOTO_CODE = 0; 
public static int count = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final String dir = Environment.getExternalStorageDirectory().getPath() + "/picFolder/"; 
    File newdir = new File(dir); 
    newdir.mkdirs(); 

Button capture = (Button) findViewById(R.id.button1); 
capture.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 

     count++; 
     String file = dir+count+".jpg"; 
     File newfile = new File(file); 

     try { 
      newfile.createNewFile(); 
     } catch (IOException e) {}  

     Uri outputFileUri = Uri.fromFile(newfile); 

     Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

     startActivityForResult(cameraIntent, TAKE_PHOTO_CODE); 

    } 
}); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
super.onActivityResult(requestCode, resultCode, data); 

if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) { 
    Log.d("CameraDemo", "Pic saved"); 
    } 

} 

} 

我尝试了很多事情,但没有得到它正确的。

+0

什么是错误?您是否在清单文件中添加了“写入SD卡”的权限? –

回答

1

使用助手方法: 在主要活动类中添加以下方法。这些方法有助于创建和从SD卡获取文件。

/** 
* Creating file uri to store image/video 
*/ 
public Uri getOutputMediaFileUri(int type) { 
    return Uri.fromFile(getOutputMediaFile(type)); 
} 

/* 
* returning image/video 
*/ 
private static File getOutputMediaFile(int type) { 

    // External sdcard location 
    File mediaStorageDir = new File(
      Environment 
        .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
      IMAGE_DIRECTORY_NAME); 

    // Create the storage directory if it does not exist 
    if (!mediaStorageDir.exists()) { 
     if (!mediaStorageDir.mkdirs()) { 
      Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create " 
        + IMAGE_DIRECTORY_NAME + " directory"); 
      return null; 
     } 
    } 

    // Create a media file name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
      Locale.getDefault()).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; 
}