JMR*_*ies 20 camera android android-camera
所以我知道相机在三星设备上的问题.您需要在调用相机意图之前创建一个Uri,如下所示:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, m_username);
mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
Run Code Online (Sandbox Code Playgroud)
此示例为相机创建一个Uri来存储数据.我的应用程序在两个位置具有相机功能.两者都是相同的(直接复制粘贴),但在一个活动中,mImageUri对象在相机处理期间变为空,而在另一个活动中它不会.后者工作正常,但前者给出一个空值,这反过来阻止我保存图像,预览它等.我将提供下面的onResult代码:
case CAMERA_PIC_REQUEST :
if(resultCode == RESULT_OK) {
if(intent != null) {
//For non-Samsung devices
Log.e("Intent value:", intent.toString());
mImageUri = intent.getData();
}
mAvatar = BitmapStatic.createImage(mImageUri, this);
Drawable draw = new BitmapDrawable(getResources(), mAvatar);
m_photoButtonE.setImageDrawable(draw);
m_imageChanged = true;
}
break;
Run Code Online (Sandbox Code Playgroud)
以上示例来自工作活动.以下是不起作用的活动:
//On pressing the "Take Photo" button:
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, mUsername);
mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
if(mImageUri == null) {
Log.e("image uri is null", "what?");
}
else {
Log.e("oh nevermind", "image uri is NOT null");
}
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
//On Result:
case CAMERA_PIC_REQUEST :
if(resultCode == RESULT_OK) {
if(intent != null) {
Log.e("Intent value:", intent.toString());
mImageUri = intent.getData();
}
else {
Log.e("Intent is null", "yep it is.");
if(mImageUri == null) {
Log.e("nullcheck on memberimageuri", "its null");
}
else {
Log.e("nullcheckon memberimage", mImageUri.toString());
}
}
mImage = BitmapStatic.createImage(mImageUri, this);
Drawable draw = new BitmapDrawable(getResources(), mImage);
mPhotoPreview.setImageDrawable(draw);
}
break;
Run Code Online (Sandbox Code Playgroud)
请注意我在第二个例子中添加的日志文件.单击"拍照"按钮时,mImageUri对象的空检查返回true.所以这个对象不是null.但是在拍照过程中的某个地方,值DOES变为空.onResult()期间的第二次检查返回false.同样,这几乎与我在其他活动中的设置完全相同,它可以正常工作.
有什么想法吗?
Ser*_*nko 64
您的活动在Camera活动操作期间被销毁,之后重新创建.您应该在活动中使用onSaveInstanceState/onRestoreInstanceState机制来保留活动重新启动时的图像URI(以及任何其他数据).
像这样:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mImageUri != null) {
outState.putString("cameraImageUri", mImageUri.toString());
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState.containsKey("cameraImageUri")) {
mImageUri = Uri.parse(savedInstanceState.getString("cameraImageUri"));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18738 次 |
| 最近记录: |