Domanda

Sto avendo un problema di acquisire un'immagine e la memorizzazione dal app fotocamera nativa. Ecco un esempio di alcuni dei miei codice.

_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 );

Dopo che la foto è stata scattata e sto tornato di nuovo alla mia attività originaria, quando navigo alla mia scheda SD tramite File DDMS Android Explorer l'immagine non c'è. Qualcuno sa perché questo non viene salvato?

È stato utile?

Soluzione

Hai controllato ciò che l'output di Environment.getExternalStorageDirectory () è, perché se non contiene un file di trascinamento separatore (/) allora la vostra immagine sarà finire in una directory che non risiede sulla scheda SD come ad esempio:

 /mnt/sdcardmake_machine_example.jpg

Quando ciò che si vuole veramente è:

 /mnt/sdcard/make_machine_example.jpg

Prova questo codice invece:

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

Altri suggerimenti

Qui era il prodotto finale nel caso qualcuno è ancora visitare questa discussione:

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. Proprio l'uso

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

e non preoccuparsi di separatori.

2. Di fronte lo stesso problema prima. telefoni SenseUI hanno un'applicazione della fotocamera personalizzato che non crea file. Che dispositivo stai usando? Si potrebbe già essere fissato in tutti i dispositivi, ma può anche essere ancora un problema. Quindi, ecco un campione completo come superarla salvataggio di una foto a un file .

Si dovrebbe eseguire una scansione media dopo il salvataggio dell'immagine

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

Aggiungi questa linea nel AndroidManifest.xml file e l'estensione rimuovere make_machine_example:

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

Si inizierà a scattare la foto e memorizzare nella scheda SD.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top