这次我有一个关于Android自定义相机的问题,而不是可以通过Camera_intent访问的内置相机。我不被允许使用那个。我试图做的是允许用户将相机对准某个东西,然后在onOptionsItemMenu上选择“发送”。
我没有任何问题实现这个......分开。如果我要求它通过点击按钮发送内容,它就会发送。如果我告诉相机保存图片而不发送图片,则确实如此。
当我尝试两者时,我遇到了问题。目前,使用此代码:
public boolean onOptionsItemSelected(MenuItem item) {
Intent i;
File file2;
camera.takePicture(null, mPictureCallback, mPictureCallback);
switch (item.getItemId()) {
case R.id.save:
return super.onOptionsItemSelected(item);
case R.id.send:
file2 = new File(filename);
i = new Intent(Intent.ACTION_SEND);
i.putExtra(Intent.EXTRA_SUBJECT, "Sample Picture");
System.out.println("file//" + file2);
i.putExtra(Intent.EXTRA_STREAM, Uri.parse("file//" + file2));
i.setType("image/png");
startActivity(Intent.createChooser(i, "Email file"));
finish();
return super.onOptionsItemSelected(item);
相机“点击”或“闪烁”,就像拍照一样,然后立即打开邮件客户端选择。当我选择要删除的内容时,Gmail会说该位置为空。但是,如果我删除启动电子邮件选择器的部分,图像会正确保存并存在。
几乎就像跳过那台相机一样。
我确定解决这个问题的方法很简单,我现在只有一个烤好的大脑,因为树木可能看不到森林。 (如果这就是说这个类比的方式)。
我是否在另一个线程上运行相机部件?
我的想法是使用布尔值来检查文件的存在和大小,但我不确定如何使程序反复检查,直到它返回true。
答案 0 :(得分:2)
我猜测可能发生的事情是你的回调发生在一个单独的线程上。因此,当您的图像仍然保存时,您的“开放邮件客户端”操作正在发生。您应该尝试的是,有一种标志,告诉您是否正在进行发送或保存。在打开相机之前在onOptionsItemSelected中设置它。然后,在你的mPictureCallback中执行你的ACTION_SEND意图(或保存动作)