打开自定义相机,拍照,保存图片,发送图片

时间:2011-06-14 11:45:23

标签: java android email camera sd-card

这次我有一个关于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。

1 个答案:

答案 0 :(得分:2)

我猜测可能发生的事情是你的回调发生在一个单独的线程上。因此,当您的图像仍然保存时,您的“开放邮件客户端”操作正在发生。您应该尝试的是,有一种标志,告诉您是否正在进行发送或保存。在打开相机之前在onOptionsItemSelected中设置它。然后,在你的mPictureCallback中执行你的ACTION_SEND意图(或保存动作)