Android相机意图返回null ...有时候

moi*_*tab 6 camera android android-intent

我在两个不同的物理设备上调试我的应用程序:

  • 摩托罗拉Moto G,Android 4.4.2
  • LG OPTIMUS L5 II,Android 4.1.2

我在按钮中调用相机:

buttonCamera.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
            }
        });
Run Code Online (Sandbox Code Playgroud)

我像这样管理意图结果:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
            Uri selectedImage = data.getData(); // <-- Sometimes null
    }
Run Code Online (Sandbox Code Playgroud)

这里的问题是data.getData()在摩托罗拉Moto G 中是空的而在LG OPTIMUS中没有,为什么会这样?我怎样才能避免在摩托罗拉Moto G中获得null?

Gui*_*lhE 3

这个答案有点晚了,但我刚才也遇到了同样的问题,我找到了解决方案:

private static final String STATE_FILE_URI = "state_file_uri";
private static final int BROWSE_CAMERA = 111;
private String fileUri;

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putString(STATE_FILE_URI, fileUri);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        fileUri = savedInstanceState.getString(STATE_FILE_URI);
        super.onRestoreInstanceState(savedInstanceState);
    }

    private void takePictureIntent(){
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        fileUri = "your_uri";
        takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(fileUri)));
        startActivityForResult(takePictureIntent, BROWSE_CAMERA);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {          
            if (requestCode == BROWSE_CAMERA) {
                if (data == null) {
                    onDeliveryPicture(Uri.parse("file://" + fileUri));
                } else {
                    onDeliveryPicture(data.getData());
                }
            }
        }
    }

    private void onDeliveryPicture(Uri uri) {
        ...
    }
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!