我正在做一个非常小的应用程序,只需按一下按钮即可启动内置摄像头应用程序。拍摄照片后,我想返回应用程序并显示照片。
下面的代码直到onActivityResult方法才能正常工作。确实创建了图像文件,并将图片保存到其中。但由于某种原因,在运行onActiveResult之前,会发生两个不同错误之一(无法找到出现错误的模式)。
有时应用程序会停止,并且logcat中没有错误。其他时候我得到例外:Failure delivering result ResultInfo{who=null, request=100, result=-1, data=null}
看来返回结果代码是-1(应该是100) - 这是什么意思?此外,返回数据本身为空。为什么?
这是代码(我一直关注Androids camera app guide)
package se.danielsetreus.dansetcamera1;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends Activity {
public static final int MEDIA_TYPE_IMAGE = 1;
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("DansetCamera1", "Start the app!");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Tried adding this - but it did not help
//super.onActivityResult(requestCode, resultCode, data);
Log.d("Danset", "RequestCode is " + requestCode);
Log.d("Danset", "ResultCode is " + resultCode + " Needed to be " + RESULT_OK);
if (resultCode == RESULT_OK)
Log.d("danset", "Image saved to \n" + data.getData());
else if (resultCode == RESULT_CANCELED)
Log.d("danset", "You canceled");
else
Log.d("danset", "Image capture failed");
}
// Create a file Uri for saving an image or video
private static Uri getOutputMediaFileUri(int type){
Uri i = Uri.fromFile(getOutputMediaFile(type));
Log.d("Danset", "Created file " + i.toString());
return i;
}
// Create a File for saving an image or video
private static File getOutputMediaFile(int type){
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "DansetCamera1");
// 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){ // Prepares for also handling video
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
private void startCamera(Uri uri) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
public void snapPic(View view) {
Uri pictureFile = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
Log.d("Danset", "Created file!");
startCamera(pictureFile);
}
}
万分感谢您的帮助!