相机意图应用程序崩溃
Posted
技术标签:
【中文标题】相机意图应用程序崩溃【英文标题】:camera intent app crash 【发布时间】:2018-05-07 05:10:32 【问题描述】:嘿,有人可以帮帮我吗? 我可以拍照,它会显示在画廊中,但我不能在 imageview 中设置。应用程序崩溃。 我的代码
可能活动结果有问题??
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File photoFile = null;
try
photoFile = createImageFile();
catch (IOException e)
e.printStackTrace();
String authorities = getApplicationContext().getPackageName() + ".fileprovider";
Uri imageUri = FileProvider.getUriForFile(camtest.this, authorities, photoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
if (photoFile != null)
imageUri = FileProvider.getUriForFile(camtest.this,
BuildConfig.APPLICATION_ID + ".fileprovider",
photoFile);
Log.i("Uri", imageUri.toString());
// takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
else
Log.i("Uri", "none");
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(photoFile)));
startActivityForResult(intent, 7);
);
文件创建方法:
File createImageFile() throws IOException
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "LetsTalk_img" + timeStamp;
File storageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File image = File.createTempFile(imageFileName,".jpg", storageDirectory);
mImageFileLocation = image.getAbsolutePath();
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(image)));
return image;
和 onactivityresult: 是不是我搞错了?
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == 7 && resultCode == RESULT_OK)
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
imageView.setImageBitmap(bitmap);
提前致谢
【问题讨论】:
最重要的如何:堆栈跟踪? 您不应在 onClick() 中调用媒体扫描器。很早。用户甚至可以决定不拍照。将 mediascanner 代码移动到 onActivityResult()。 你尝试在onActivityResult中获取位图。但是当你使用 EXTRA_OUTPUT 时你不会得到一个。 【参考方案1】:您只需将cameraIntent()
方法放在您的按钮单击功能中即可。
private void cameraIntent()
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
然后粘贴后。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK)
if (requestCode == 0)
onCaptureImageResult(data);
要在缩略图中设置,请像这样传递 ImageView 变量中的数据:
private void onCaptureImageResult(Intent data)
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
byteArray = bytes.toByteArray();
encodedImage = Base64.encodeToString(byteArray, Base64.DEFAULT);
File destination = new File(Environment.getExternalStorageDirectory(),
System.currentTimeMillis() + ".jpg");
FileOutputStream fo;
try
destination.createNewFile();
fo = new FileOutputStream(destination);
fo.write(bytes.toByteArray());
fo.close();
catch (FileNotFoundException e)
e.printStackTrace();
catch (IOException e)
e.printStackTrace();
imagebox.setImageBitmap(thumbnail);
【讨论】:
我需要 sd 卡吗? 我没有外部存储目录 不,它也可以保存在您的手机内存中。 好的。我会在晚上测试它I have Not an externalstoragedirectory
。你有。每个设备都有。但是你为什么要试试这段代码呢?它将缩略图保存到文件中。您需要存档缩略图吗?更糟糕的是:相机应用程序将不再生成完整的原始文件并将其保存到文件中。因此,您的图库应用中没有图片。坚持你的初衷和代码并解决问题。以上是关于相机意图应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
Android 用图片打开 Instagram 意图导致崩溃