raw*_*064 60 android android-camera
我正在构建一个应用程序,我希望通过默认的相机活动捕获图像并返回到我的活动并在ImageView中加载该图像.问题是相机活动总是返回null.在我的onActivityResult(int requestCode, int resultCode, Intent data)方法中,我得到数据null.这是我的代码:
public class CameraCapture extends Activity {
protected boolean _taken = true;
File sdImageMainDirectory;
Uri outputFileUri;
protected static final String PHOTO_TAKEN = "photo_taken";
private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
setContentView(R.layout.cameracapturedimage);
File root = new File(Environment
.getExternalStorageDirectory()
+ File.separator + "myDir" + File.separator);
root.mkdirs();
sdImageMainDirectory = new File(root, "myPicName");
startCameraActivity();
} catch (Exception e) {
finish();
Toast.makeText(this, "Error occured. Please try again later.",
Toast.LENGTH_SHORT).show();
}
}
protected void startCameraActivity() {
outputFileUri = Uri.fromFile(sdImageMainDirectory);
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE:
{
if(resultCode==Activity.RESULT_OK)
{
try{
ImageView imageView=(ImageView)findViewById(R.id.cameraImage);
imageView.setImageBitmap((Bitmap) data.getExtras().get("data"));
}
catch (Exception e) {
// TODO: handle exception
}
}
break;
}
default:
break;
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState.getBoolean(CameraCapture.PHOTO_TAKEN)) {
_taken = true;
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean(CameraCapture.PHOTO_TAKEN, _taken);
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了吗?
Dha*_*dra 108
你错了,因为你做错了.
如果您MediaStore.EXTRA_OUTPUT使用相机意图传递额外参数,则相机活动会将捕获的图像写入该路径,并且不会返回onActivityResult方法中的位图.
如果您要检查通过的路径,那么您将知道实际上相机已在该路径中写入捕获的文件.
noo*_*oob 18
我是以另一种方式做的.data.getData()字段不保证返回一个Uri,所以我检查它是否为null,如果是,那么图像是额外的.所以代码是 -
if(data.getData()==null){
bitmap = (Bitmap)data.getExtras().get("data");
}else{
bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), data.getData());
}
Run Code Online (Sandbox Code Playgroud)
我在生产应用程序中使用此代码,它正在工作.
我遇到了类似的问题.我在清单文件中注释掉了一些行,导致缩略图数据返回为null.
您需要以下内容才能使其正常工作:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
Run Code Online (Sandbox Code Playgroud)
我希望这能解决你的问题
如果您的手机是三星,则可能与此相关http://kevinpotgieter.wordpress.com/2011/03/30/null-intent-passed-back-on-samsung-galaxy-tab/
还有另一个未解决的问题可能会提供更多信息
| 归档时间: |
|
| 查看次数: |
73653 次 |
| 最近记录: |