6

ギャラリーまたはカメラのどちらかを選択して写真を選択するピッカーをユーザーに表示しています。カメラを選択すると、カメラが読み込まれたら回転して横向きの写真を撮り、写真を撮り、[完了] をクリックすると、アプリに戻りますが、返される画像は null です。カメラを回転させなければ、画像は正常に返されます。私は何が欠けていますか?ローテーションによってアクティビティが再構築されることはわかっていますが、onActivityResult に正しい情報が含まれていないのはなぜですか? これが私のopenImageインテントです:

public void openImageIntent() {

        // Determine Uri of camera image to save.
        final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyAppImages"
                + File.separator);
        root.mkdirs();
        SimpleDateFormat sdf = new SimpleDateFormat("ddMMyy-hhmmss");
        final String fname = String.format("%s.jpg", sdf.format(new Date()));
        final File sdImageMainDirectory = new File(root, fname);
        outputFileUri = Uri.fromFile(sdImageMainDirectory);

        // Camera.
        final List<Intent> cameraIntents = new ArrayList<Intent>();
        final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        final PackageManager packageManager = getPackageManager();
        final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
        for (ResolveInfo res : listCam) {
            final String packageName = res.activityInfo.packageName;
            final Intent intent = new Intent(captureIntent);
            intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
            intent.setPackage(packageName);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
            cameraIntents.add(intent);
        }

        // Filesystem.
        final Intent galleryIntent = new Intent();
        galleryIntent.setType("image/*");
        galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

        // Chooser of filesystem options.
        final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");

        // Add the camera options.
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[] {}));

        startActivityForResult(chooserIntent, SELECT_PICTURE_REQUEST);
    }

そして onActivityResult メソッド:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_PICTURE_REQUEST) {
                final boolean isCamera;
                if (data == null) {
                    isCamera = true;
                } else {
                    final String action = data.getAction();
                    if (action == null) {
                        isCamera = false;
                    } else {
                        isCamera = true;
                    }
                }

                Uri selectedImageUri;
                if (isCamera) {
                    selectedImageUri = outputFileUri;
                } else {
                    selectedImageUri = data == null ? null : data.getData();
                }

                if (imageDelegate != null) {
                    Log.e(TAG, "imageDelegate not null: " + imageDelegate);
                    imageDelegate.gotNewImageUri(selectedImageUri);
                    imageDelegate = null;

                } else if (getSupportFragmentManager().findFragmentByTag("addofferdialog") != null) {
                    imageDelegate = (AddOfferFragment) getSupportFragmentManager().findFragmentByTag("addofferdialog");
                    Log.e(TAG, "imageDelegate is null but found fragment: " + imageDelegate);
                    Log.e(TAG, "Activity image: " + selectedImageUri);
                    imageDelegate.gotNewImageUri(selectedImageUri);
                    imageDelegate = null;
                } else {
                    Log.e(TAG, "cannot find imageDelegate!!!!");
                }

             Log.e(TAG, "selectedImageUri: " + selectedImageUri);
            }
        }
    }
4

3 に答える 3

3

onSaveInstanceStateに保存outputFileUri し、onRestoreInstanceState に復元するだけです。そうしないと、向きの変更で null になります。

于 2013-06-06T09:14:56.713 に答える
1

これは私にとってはうまくいきました..

<activity
    android:name=".CameraTestActivity"
    android:configChanges="orientation|screenSize|keyboardHidden">
</activity>
于 2015-11-27T09:46:44.423 に答える