我正在使用手机相机并使用android.provider.MediaStore.ACTION_IMAGE_CAPTURE从我的应用程序中捕获图像。
单击捕获按钮后,显示保存或丢弃。单击保存按钮,它将返回相机而不是应用程序。并且图像以gallary方式保存,而不是保存到我声明的输出文件中。
以下是我的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Intent in=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(in, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode==RESULT_OK) {
Bitmap bm=(Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
//you can create a new file name "test.jpg" in sdcard folder.
File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "player1.jpg");
try {
f.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//write the bytes in file
FileOutputStream fo = null;
try {
fo = new FileOutputStream(f);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
fo.write(bytes.toByteArray());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
Intent pic=new Intent(pic1.this, GameMenu.class);
startActivity(pic);
finish();
}
}
else {
Toast.makeText(getApplicationContext(), "Canceled", Toast.LENGTH_LONG).show();
Intent pic=new Intent(pic1.this, Menu.class);
startActivity(pic);
finish();
}
请建议是否有任何解决方案.. 提前谢谢......
编辑1:我已经在三星galaxy y duos(android 2.3.6)上检查了这段代码,但它无法正常工作。并且在galaxy pop(2.2.1)和HTC野火(2.3.5)上检查它的工作完美。答案 0 :(得分:2)
使用以下意图捕获图像,g etTempFile()
是您提到存储路径的地方
Intent photoPickerIntent= new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, getTempFile());
photoPickerIntent.putExtra("outputFormat",Bitmap.CompressFormat.JPEG.toString());
photoPickerIntent.putExtra("return-data", true);
startActivityForResult(photoPickerIntent,TAKE_PICTURE);
<强> getTempFile:强>
private Uri getTempFile() {
File root = new File(Environment.getExternalStorageDirectory(), "Directory");
if (!root.exists()) {
root.mkdirs();
}
File file;
file = new File(root,filename+".jpeg" );
muri = Uri.fromFile(file);
photopath=muri.getPath();
Log.e("getpath",muri.getPath());
return muri;
}
Read here了解更多主题
答案 1 :(得分:0)
如果这是您的整个代码,则省略了setContentView();可能是它没有回来的原因。
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
// setContentView() here
Intent in=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(in, 0);
}
onActivityResult()方法是否被调用?
答案 2 :(得分:0)
我遇到了同样的问题,我已经重启了我的设备并测试了我的应用程序,现在工作正常。可能有不同的代码实现应用程序没有响应。尝试重新启动设备并进行测试,让我知道它的工作与否
答案 3 :(得分:0)
您应该创建打开相机的文件。您将文件URI作为摄像机意图的额外内容:
/**
* Capturing Camera Image will lunch camera app request image capture
*/
private void captureImage() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri();
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
// start the image capture Intent
startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);
}
这是我创建文件的方式:
/**
* Creating file uri to store image
*
*
* @return Uri
*/
public Uri getOutputMediaFileUri() {
return Uri.fromFile(getTempOutputMediaFile());
}
/**
* returning File
*
*
* @return File
*/
private File getTempOutputMediaFile() {
File appDirectory = this.getFilesDir();
File mediaStorageDir = new File(APP_NAME,
YOUR_IMAGE_DIRECTORY_NAME);
Log.i("mediaStorageDir", mediaStorageDir.getAbsolutePath());
// Create the storage directory if it does not exist
if (!mediaStorageDir.exists()) {
if (!mediaStorageDir.mkdirs()) {
Log.i(YOUR_IMAGE_DIRECTORY_NAME,
"Oops! Failed create "
+ YOUR_IMAGE_DIRECTORY_NAME
+ " directory");
return null;
}
}
// Create a media file name
UUID temporaryImageUuid = UUID.randomUUID();
File mediaFile;
mediaFile = new File(mediaStorageDir.getPath() + File.separator
+ temporaryImageUuid + "." + YOUR_EXTENSION);
return mediaFile;
}