我有一个包含多个活动的android应用程序.
在其中一个我正在使用一个按钮,它将调用设备摄像头:
public void onClick(View view) {
Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(photoIntent, IMAGE_CAPTURE);
}
Run Code Online (Sandbox Code Playgroud)
在同一个活动中,我调用OnActivityResult图像结果的方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMAGE_CAPTURE) {
if (resultCode == RESULT_OK) {
Bitmap image = (Bitmap) data.getExtras().get("data");
ImageView imageview = (ImageView) findViewById(R.id.pic);
imageview.setImageBitmap(image);
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "CANCELED ", Toast.LENGTH_LONG).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是intent data是null并且OnActivityResult方法直接转到,(resultCode == RESULT_CANCELED)并且应用程序返回到先前的avtivity.
如何修复此问题,并在调用相机后,应用程序返回当前活动,其中包含ImageView将包含拍摄的照片?
谢谢
我正在创建一个应用程序,我想在其中捕获图像,然后我想将该图像作为附件发送到电子邮件中.
我正在使用android.provider.MediaStore.ACTION_IMAGE_CAPTUREintent动作打开相机,我将文件的Uri作为参数EXTRA_OUTPUT传递给图像以将图像恢复到文件中.这是完美的工作,如果我使用external storage urias作为a 我能够获取捕获的图像, EXTRA_OUTPUT但如果我使用数据文件夹uri它不工作,相机没有关闭,它的所有按钮都不工作.
这是我在外部存储目录中获取结果的代码
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File out = Environment.getExternalStorageDirectory();
out = new File(out, imagename);
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out));
startActivityForResult(i, CAMERA_RESULT);
Run Code Online (Sandbox Code Playgroud)
此代码用于获取数据文件夹中的图像
Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File out = getFilesDir();
out = new File(out, MyPharmacyOptions.PRESCRIPTION_IMAGE_NAME);
i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(out));
startActivityForResult(i, CAMERA_RESULT);
Run Code Online (Sandbox Code Playgroud)
我知道第三个应用程序无法访问数据文件夹,因此可能会导致问题,因此我创建了一个内容提供程序来共享该文件.
这是我的内容提供课程
public class MyContentProvider extends ContentProvider {
private static final String Tag = RingtonContentProvider.class.getName();
public static final Uri CONTENT_URI = Uri
.parse("content://x.y.z/");
private static final HashMap<String, …Run Code Online (Sandbox Code Playgroud) 所以我知道相机在三星设备上的问题.您需要在调用相机意图之前创建一个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); …Run Code Online (Sandbox Code Playgroud) 问题:我onActivityResult(int requestCode, int resultCode, Intent data) 在Samsung S3中获取了相机意图的数据 .但在其他一些设备上运行良好.我自定义了用于获取数据的代码,并在Web中搜索了这个问题但没有任何有用的东西
代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TAKE_CAMERA && data != null && data.getData() != null)
else if (requestCode == TAKE_CAMERA) {
if (resultCode != RESULT_OK) return;
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(tempFileUri, "image/*");
intent.putExtra("outputX", 90);
intent.putExtra("outputY", 90);
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("scale", true);
intent.putExtra("return-data", true);
startActivityForResult(intent, CROP_CAMERA);
} else if (requestCode == CROP_CAMERA && data != null) {
Bitmap photo = data.getExtras().getParcelable("data"); …Run Code Online (Sandbox Code Playgroud)