Frage

ich habe ein Problem, ein Bild zu erfassen und es von dem nativen Kamera-App zu speichern. Hier ist ein Beispiel von einigen meiner Code.

_path = Environment.getExternalStorageDirectory() + "make_machine_example.jpg";
File file = new File( _path );
Uri outputFileUri = Uri.fromFile( file );

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );

startActivityForResult( intent, 0 );

Nachdem das Bild aufgenommen wurde, und ich bin zurück zu meiner ursprünglichen Aktivität zurückgeführt, wenn ich auf meine SD-Karte über Android DDMS Datei-Explorer navigieren ist das Bild nicht da. Wer weiß, warum diese nicht gespeichert werden?

War es hilfreich?

Lösung

Haben Sie überprüft, wie die Ausgabe von Environment.getExternalStorageDirectory () ist, denn wenn es keine abschließende Datei seperator enthält (/), dann Ihr Bild in einem Verzeichnis am Ende wird, die auf der SD-Karte befindet sich solche nicht so:

 /mnt/sdcardmake_machine_example.jpg

Wenn, was Sie wirklich wollen, ist:

 /mnt/sdcard/make_machine_example.jpg

Versuchen Sie stattdessen diesen Code:

 _path = Environment.getExternalStorageDirectory() + File.separator +  "make_machine_example.jpg";

Andere Tipps

Hier war das Endprodukt falls jemand besucht noch dieses Thema anschauen:

public class CameraCapture extends Activity {

    protected boolean _taken = true;
    File sdImageMainDirectory;

    protected static final String PHOTO_TAKEN = "photo_taken";

    @Override
    public void onCreate(Bundle savedInstanceState) {

        try {

            super.onCreate(savedInstanceState);         
                    File root = new File(Environment
                            .getExternalStorageDirectory()
                            + File.separator + "myDir" + File.separator);
                    root.mkdirs();
                    sdImageMainDirectory = new File(root, "myPicName");


                startCameraActivity();
            }
        } catch (Exception e) {
            finish();
            Toast.makeText(this, "Error occured. Please try again later.",
                    Toast.LENGTH_SHORT).show();
        }

    }

    protected void startCameraActivity() {

        Uri outputFileUri = Uri.fromFile(sdImageMainDirectory);

        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

        startActivityForResult(intent, 0);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (resultCode) {
        case 0:
            finish();
            break;

        case -1:

            try {
                StoreImage(this, Uri.parse(data.toURI()),
                        sdImageMainDirectory);
            } catch (Exception e) {
                e.printStackTrace();
            }

            finish();
            startActivity(new Intent(CameraCapture.this, Home.class));

        }

    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        if (savedInstanceState.getBoolean(CameraCapture.PHOTO_TAKEN)) {
            _taken = true;
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        outState.putBoolean(CameraCapture.PHOTO_TAKEN, _taken);
    }

        public static void StoreImage(Context mContext, Uri imageLoc, File imageDir) {
        Bitmap bm = null;
        try {
            bm = Media.getBitmap(mContext.getContentResolver(), imageLoc);
            FileOutputStream out = new FileOutputStream(imageDir);
            bm.compress(Bitmap.CompressFormat.JPEG, 100, out);
            bm.recycle();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

1. Verwenden Sie einfach

new File(Environment.getExternalStorageDirectory(),  "make_machine_example.jpg");

und nicht die Mühe über Separatoren.

2. Konfrontiert vor dem gleichen Problem. SenseUI Telefone haben eine Anwendung benutzerdefinierte Kamera, die nicht-Datei erstellen ist. Was Gerät verwenden Sie? Es kann bereits in neuesten Geräten festgelegt werden, aber es kann auch noch ein Thema sein. Also hier ist ein vollständiges Beispiel, wie es zu überwinden Probleme ein Foto gespeichert zu eine Datei .

Sie sollten ein Medien-Scanning durchführen, nachdem das Bild zu speichern

 sendBroadcast(new Intent(
            Intent.ACTION_MEDIA_MOUNTED,
            Uri.parse("file://" + Environment.getExternalStorageDirectory())));

Fügen Sie diese Zeile in AndroidManifest.xml Datei und entfernen Erweiterung make_machine_example:

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

Es beginnt das Foto und Laden in die SD-Karte zu erfassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top