Question

J'ai un problème de capturer une image et à le stocker de l'application de la caméra native. Voici un exemple d'une partie de mon 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 );

Après la photo a été prise et je suis retourné à mon activité d'origine, lorsque je navigue sur ma carte SD via Android DDMS File Explorer l'image est pas là. Quelqu'un sait pourquoi ce n'est pas sauvé?

Était-ce utile?

La solution

Avez-vous vérifié ce que la sortie de Environment.getExternalStorageDirectory () est, parce que si elle ne contient pas de seperator de fichier de fin (/), votre image se retrouver dans un répertoire qui ne se trouve pas sur la carte SD tels que:

 /mnt/sdcardmake_machine_example.jpg

Quand ce que vous voulez vraiment est:

 /mnt/sdcard/make_machine_example.jpg

Essayez ce code à la place:

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

Autres conseils

Voici le produit final était au cas où quelqu'un est en visite encore cette discussion:

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. Il suffit d'utiliser

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

et ne se soucient pas de séparateurs.

2. avant Face au même problème. téléphones SenseUI ont une application caméra personnalisée qui ne crée pas de fichier. Quel appareil utilisez-vous? Il peut déjà être fixé dans les derniers appareils, mais il peut aussi être encore un problème. Voici donc un échantillon complet comment surmonter problèmes enregistrement d'une photo à un fichier .

Vous devez effectuer une analyse des médias après l'enregistrement de l'image

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

Ajoutez cette ligne dans le fichier AndroidManifest.xml et supprimer l'extension make_machine_example:

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

Il va commencer à capturer la photo et de stocker dans la carte SD.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top