startActivityForResult没有回调(onActivityResult)

时间:2018-06-18 07:39:28

标签: android android-camera-intent

我正在尝试在应用中添加功能以拍照。相机活动出现了,我可以拍照并点击勾选标记以使用刚刚拍摄的照片,但应用程序从未收到它,因为从未调用onActivityResult。

以下是激活相机活动的代码:

    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }

REQUEST_IMAGE_CAPTURE设置为1。

从未调用的onActivityResult方法如下所示:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   ...
}

该应用只有一项活动,即主要活动。 我已经在清单中尝试了不同的设置,没有运气。

2 个答案:

答案 0 :(得分:0)

如上所述here,您必须在清单中添加此内容。

添加后:

<uses-feature android:name="android.hardware.camera"
                  android:required="true" />

拍摄照片并接受照片后,回调称为

答案 1 :(得分:0)

<uses-feature
    android:name="android.hardware.camera"
    android:required="false"/>


    private Uri mCapturedImageURI;

    ContentValues values = new ContentValues();
                        values.put(MediaStore.Images.Media.TITLE, System.currentTimeMillis() + "PRESCRIPTION");
                        mCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                        Intent intentPicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        intentPicture.putExtra(MediaStore.EXTRA_OUTPUT, mCapturedImageURI);
                        startActivityForResult(intentPicture, 1);

     public String getCameraPathFromURI(Uri contentUri) {
            try {
                String[] proj = {MediaStore.Images.Media.DATA};
                Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                cursor.moveToFirst();
                return cursor.getString(column_index);
            } catch (Exception e) {
                return "";
            }
        }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
                case 1:
                if (resultCode == RESULT_OK) {
                    if (mCapturedImageURI != null) {
                        realImagePath = getCameraPathFromURI(mCapturedImageURI);

                    }
                }
                break;
    }