0

次のコードを使用して、SD カード フォルダーに保存されている写真を取得します。これは正常に機能しています。しかし、写真はSDカードの画像フォルダにも保存されており、Androidのフォトギャラリーに表示されています. なんで?

前もって感謝します!

public class Foto extends Activity implements SurfaceHolder.Callback,
    OnClickListener {

private static final int CAMERA_ACTIVITY = 1;
private static final int TAKE_PICTURE = 1;
File archive, root, folder;
String fec;

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    String storageState = Environment.getExternalStorageState();
    if (storageState.equals(Environment.MEDIA_MOUNTED)) {

        String path = Environment.getExternalStorageDirectory().getName()
                + File.separatorChar + "TEST" + "/"
                + "test.jpg";
        archive = new File(path);
        try {
            if (archive.exists() == false) {
                archive.getParentFile().mkdirs();
                archive.createNewFile();
            }
            if (archive.exists() == true) {

                archive.createNewFile();
            }

        } catch (IOException e) {
            Log.e(ACTIVITY_SERVICE, "Could not create file.", e);
        }
        Log.i(ACTIVITY_SERVICE, path);

        Uri _fileUri = Uri.fromFile(archive);
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, _fileUri);
        startActivityForResult(intent, TAKE_PICTURE);


        setResult(RESULT_OK, intent);
        finish();
    } else {
        new AlertDialog.Builder(Foto.this)
                .setMessage(
                        "External Storeage (SD Card) is required.\n\nCurrent state: "
                                + storageState).setCancelable(true)
                .create().show();

        finish();
    }

}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();

}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

}

@Override
public void onClick(View arg0) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
    // TODO Auto-generated method stub

}

}

4

1 に答える 1

1

ほとんどのデバイスでは、MediaStore.ACTION_IMAGE_CAPTURE は、他の処理に加えてギャラリーに保存します。ファイルを返さなくても、URI のみが必要です。Nexus 7ではこれが行われないことは知っていますが、動作が魔法のように異なり、回避するのが面倒です。とにかく、メディア スキャナが追いついた場合、Gallery は実際には .nomedia ファイルのない SD カードの任意の場所を表示することにも注意してください。

于 2012-09-17T02:36:34.147 に答える