我正在尝试使用内置相机应用程序拍摄照片并通过ImageView查看。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_photo);
addButtonListeners();
startCamera();
}
private void startCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, PHOTO_TAKEN);
}
protected void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (requestCode == PHOTO_TAKEN) {
Bundle extras = intent.getExtras();
photo = (Bitmap) extras.get("data");
if (photo != null) {
ImageView image = (ImageView) findViewById(R.id.image_background);
image.setImageBitmap(photo);
} else {
Toast.makeText(this, R.string.unable_to_read_photo, Toast.LENGTH_LONG)
.show();
}
}
}
当手机处于纵向位置时,此代码可以正常工作,但是当我拍摄横向照片时会出现故障,任何想法为何或如何解决?
答案 0 :(得分:0)
问题没有定义足够的细节来肯定回答,但我的猜测与Shani Goriwal相同。
看起来配置更改事件的问题 - 每次更改方向时都会发生这种情况(从横向到纵向)。
尝试按照以下行添加到您应用的AndroidManifest: 机器人:configChanges = “取向|屏幕尺寸”
(更多详情:http://developer.android.com/guide/topics/resources/runtime-changes.html)
答案 1 :(得分:0)
我找到了一个教程,解释了如何正确使用内置摄像头。这是link。
我在android上是相对新的但是从我所读到的是每次显示器旋转时android会创建某种新的实例。所以你必须保存旋转的实例,这是通过以下代码完成的:
/**
* Here we store the file url as it will be null after returning from camera
* app
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// save file url in bundle as it will be null on scren orientation
// changes
outState.putParcelable("file_uri", fileUri);
}
/*
* Here we restore the fileUri again
*/
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// get the file url
fileUri = savedInstanceState.getParcelable("file_uri");
}
如果您点击链接,则应转到项目符号11. 在拍摄照片后避免NullPointerException 。这里真正的英雄是Ravi Tamada,他使用相机做了一个很好的教程。我建议阅读整个教程。
我再次对此感到陌生,所以如果对我在此处写的内容有任何更正,请更正。