1

私のアプリの機能の 1 つにカメラがあります。ユーザーが写真を撮ると、アプリが画像を表示します。

StartActivityForResult を使用して ACTION_IMAGE_CAPTURE でインテントを開始し、onActivityResult で応答をキャプチャします。通常は、onActivityResult で受け取ったインテントでgetData()を呼び出すだけで、MediaProvider のコンテンツ uri を取得できます。

私の問題は次のとおりです。私のテスト デバイスの 1 つである Huawei ALE-L21 では、onActivityResult で取得したインテントにはデータがありませんが、代わりにパーセル可能なエクストラがあります。そこからユーザーの写真を取得するにはどうすればよいですか? Android Studio もパーセル可能なエクストラの名前を教えてくれません


免責事項: このコードをフラグメントで使用しているため、 getActivity() を呼び出します


これは私がカメラを取得するために使用するものです。

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) {
    startActivityForResult(takePictureIntent, getResources().getInteger(R.integer.RQ_PERMISSION_WRITE_EXTERNAL_STORAGE));
}

そして、これが私のonActivityResultのコードです

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

    switch (requestCode) {
        case 1: //RQ_ImageCapture
        case 2: //RQ_ImageSelected
            if (resultIntent != null) {
                try {
                    Uri selectedImage = resultIntent.getData();
                    if(selectedImage != null) {
                        Bitmap bitmap = 
                        MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImage);
                        setImageAsBackground(selectedImage, bitmap);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            break;
    }
}
4

1 に答える 1

2

通常は、onActivityResult で受け取ったインテントで getData() を呼び出すだけで、MediaProvider のコンテンツ uri を取得できます。

あなたのコードは、最近のすべての Nexus デバイスを含め、それらの多くで失敗します。ACTION_IMAGE_CAPTUREを返すことは想定されていませんUriドキュメントの引用:

EXTRA_OUTPUT が存在しない場合、小さいサイズの画像がビットマップ オブジェクトとして extra フィールドに返されます。これは、小さな画像のみが必要なアプリケーションに役立ちます。EXTRA_OUTPUT が存在する場合、フルサイズの画像が EXTRA_OUTPUT の Uri 値に書き込まれます。

を含めていないためEXTRA_OUTPUT、サムネイル画像付きのdata余分な ( ) が表示されます。getData().getExtra("data")

onActivityResult で取得したインテントにはデータがありませんが、代わりにパーセル可能なエクストラがあります

ACTION_IMAGE_CAPTUREあなたの要求を考えると、それはあなたが得るべきものです。

フルサイズの画像が必要な場合は、このサンプル アプリで示すように、おそらくアプリ内で をEXTRA_OUTPUT指している を含めます。次に、指定したため、写真の移動先がわかります。FileProviderUriUri

于 2016-08-09T13:18:38.513 に答える