3

デフォルトのカメラを使用してカメラアプリケーションを開発しました。このアプリケーションは他のすべてのAndroid携帯電話で動作しますが、SamsungGalaxySに問題があります

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);

このコードは結果を出し、ビットマップ画像を取得しています。しかし、これから画像パスを取得できませんでした。

を与えるEXTRA_OUTPUTと、GalaxySはnull値を返します。そのため、カメラインテントを呼び出す前にファイルのパスと名前を定義できませんでした。このアプリケーションを使用して写真を撮ると、Galaxy Sはこの写真をデフォルトの場所に保存し、事前に定義された場所には保存しません。

誰かがこれに対する解決策を持っているなら、私を助けてください。

4

2 に答える 2

0

これに対して私が行ったことは、EXTRA_OUTPUT の場所を Uri として定義し、それを静的変数またはメンバー変数にキャッシュしてから、onActivity の結果でキャッシュされた場所を使用して画像を取得することです。私はあなたが説明していたのと同じ問題を抱えていましたが、これはうまくいくようです。唯一の欠点は、イメージのコピーが 2 つあることです。1 つは EXTRA_OUTPUT で定義した場所にあり、もう 1 つはデフォルトの場所にあります。

于 2011-10-17T09:07:20.947 に答える
0

ここで見つかった答えは、デバイスについて面倒なことをしている最良の例です!

AndroidCameraUtils -プロジェクトをダウンロードし、以下に含めることでライブラリ プロジェクトから、使用できるコード スニペットを示します。

 private void setupCameraIntentHelper() {
    mCameraIntentHelper = new CameraIntentHelper(this, new CameraIntentHelperCallback() {
        @Override
        public void onPhotoUriFound(Date dateCameraIntentStarted, Uri photoUri, int rotateXDegrees) {
            messageView.setText(getString(R.string.activity_camera_intent_photo_uri_found) + photoUri.toString());

            Bitmap photo = BitmapHelper.readBitmap(CameraIntentActivity.this, photoUri);
            if (photo != null) {
                photo = BitmapHelper.shrinkBitmap(photo, 300, rotateXDegrees);
                ImageView imageView = (ImageView) findViewById(de.ecotastic.android.camerautil.sample.R.id.activity_camera_intent_image_view);
                imageView.setImageBitmap(photo);
            }
        }

        @Override
        public void deletePhotoWithUri(Uri photoUri) {
            BitmapHelper.deleteImageWithUriIfExists(photoUri, CameraIntentActivity.this);
        }

        @Override
        public void onSdCardNotMounted() {
            Toast.makeText(getApplicationContext(), getString(R.string.error_sd_card_not_mounted), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCanceled() {
            Toast.makeText(getApplicationContext(), getString(R.string.warning_camera_intent_canceled), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onCouldNotTakePhoto() {
            Toast.makeText(getApplicationContext(), getString(R.string.error_could_not_take_photo), Toast.LENGTH_LONG).show();
        }

        @Override
        public void onPhotoUriNotFound() {
            messageView.setText(getString(R.string.activity_camera_intent_photo_uri_not_found));
        }

        @Override
        public void logException(Exception e) {
            Toast.makeText(getApplicationContext(), getString(R.string.error_sth_went_wrong), Toast.LENGTH_LONG).show();
            Log.d(getClass().getName(), e.getMessage());
        }
    });
}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    mCameraIntentHelper.onSaveInstanceState(savedInstanceState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    mCameraIntentHelper.onRestoreInstanceState(savedInstanceState);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    mCameraIntentHelper.onActivityResult(requestCode, resultCode, intent);
}
}
  • アクティビティのマニフェスト ファイルに以下を追加しますandroid:configChanges="keyboardHidden|orientation|screenSize"

:- 私はカメラ utils の多くの例を試しました。もちろん、それを処理する別の方法がありますが、初心者やコアの概念にあまり慣れていない人にとっては、このプロジェクトの方が快適です。ありがとう!

于 2016-01-12T12:48:32.007 に答える