这是我正在使用的代码

Intent i = new Intent(
                    android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(i, cameraData);


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        try {
            InputStream is = getContentResolver().openInputStream(data.getData());
            Main.this.getContentResolver().delete(data.getData(), null,
                    null);

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            String error = e.toString();
            Dialog d = new Dialog(this);
            TextView tv = new TextView(this);
            tv.setText(error);
            d.setContentView(tv);
            d.show();
        }
    } else {
        is = null;
    }
}


我这样做是因为我不想将图片保存到dcim文件夹。
它在三星,htc和其他设备上运行良好,但在阿尔卡特一键式5020x Jelly Bean 4.1.1上崩溃了,
返回空指针异常。

有另一种方法可以执行此操作,但不能将图片保存到dcim文件夹。
我已经看到许多解决方案,但是所有解决方案都将图片保存到dcim文件夹

谢谢

最佳答案

我这样做是因为我不想将图片保存到dcim文件夹。


然后在EXTRA_OUTPUT ACTION_IMAGE_CAPTURE中包含Intent,以告知处理请求的相机应用程序将图像放置在何处。引用the documentation


  调用方可以传递一个额外的EXTRA_OUTPUT来控制该图像的写入位置。如果不存在EXTRA_OUTPUT,则会在Extra字段中将一个小型图像作为Bitmap对象返回。


您的代码编写为不执行任何已记录的内容。相反,您假设照相机应用程序将返回图像所在位置的Uri。这不是已记录的协议的一部分,因此与许多相机应用程序交互时,您的代码将失败。


  有另一种方法可以执行此操作,但不能将图片保存到dcim文件夹。


此代码会将图像放置在外部存储设备的另一个位置:

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import java.io.File;

public class CameraContentDemoActivity extends Activity {
  private static final int CONTENT_REQUEST=1337;
  private File output=null;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent i=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    output=new File(getExternalFilesDir(null), "CameraContentDemo.jpeg");
    i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(output));

    startActivityForResult(i, CONTENT_REQUEST);
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode,
                                  Intent data) {
    if (requestCode == CONTENT_REQUEST) {
      if (resultCode == RESULT_OK) {
        // use the output File object
      }
    }
  }
}

07-26 09:30