5

インテント経由でカメラを使用するシンプルな Android アプリを立ち上げようとしています。コードはAndroid のドキュメント hereからほとんどそのままですが、うまくいきません。

startActivityForResult() の呼び出し後、カメラ アプリは期待どおりに開きますが、写真を撮った後は戻りません (?!)。具体的には、写真を撮って承認アイコン (Galaxy Nexus のチェック マーク) を選択しても返されません。しかし、キャンセル アイコン (同じ電話の「X」) を選択すると、元に戻ります。

コードは次のとおりです(注、私はアクティビティではなくフラグメントから作業しています):

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.my_layout, container, false);

    final Button btnCamera = (Button) view.findViewById(R.id.cameraid);

    View.OnClickListener handler = new View.OnClickListener() {
        public void onClick(View v) {
            if (v == btnCamera) {
                Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                // create a file to save the image
                File imagesFolder = new File(Environment.getExternalStorageDirectory(), "MyImages");
                imagesFolder.mkdirs();
                File image = new File(imagesFolder, "image_001.jpg");
                Uri uriSavedImage = Uri.fromFile(image);

                // start the image capture Intent
                cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage);
                startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
            }
        }
    }
    btnCamera.setOnClickListener(handler);
}

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

    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            // Image captured and saved to fileUri specified in the Intent
            Toast.makeText(getActivity(), "Image saved to:\n" +
                     data.getData(), Toast.LENGTH_LONG).show();
        }
        else if (resultCode == Activity.RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
        }
    }

これを機能させるには、何を変更する必要がありますか? ありがとう。

4

1 に答える 1

12

おっと、マニフェスト行を追加するとうまくいきました:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>

アプリが外部カメラ アプリに依存している場合、これらの行は必要ないと誤って考えていました。しかし、私はそれについて間違っていました!ありがとう。

于 2012-09-18T20:40:18.400 に答える