Comment capturer une image et la stocker avec la caméra Android native

J'ai l'impression de capturer une image et de la stocker à partir de l'application caméra native. Voici un exemple 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 ); 

Une fois que la photo a été prise et je suis retourné à mon activité initiale, lorsque je navigue vers ma carte SD via Android DDMS File Explorer, l'image n'est pas là. Quelqu'un sait pourquoi cela n'est pas enregistré?

  • Android: StaggeredGridLayoutManager fait défiler vers le haut lors de l'initialisation
  • Android: plusieurs pistes audio dans un VideoView?
  • Comment tachez-vous un bitmap dans Android?
  • Faites de votre application une application par défaut pour ouvrir un certain fichier
  • Boîte de dialogue pour choisir l'image de la galerie ou de la caméra
  • Utilisation du nouveau mode IMMERSIVE dans Android Kitkat
  • Studio Android collé au projet Refreshing Gradle
  • WebView dans une boîte de dialogue (chargement des actifs) et non présentée
  • Comment générer un fichier PDF avec image dans Android?
  • Comment configurer la hauteur d'un composant de disposition à la même hauteur d'un autre composant?
  • Développement Android: avoir un AsyncTask dans un fichier de classe distinct
  • Limitations de stockage Web SQL dans Chrome et Android?
  • 5 Solutions collect form web for “Comment capturer une image et la stocker avec la caméra Android native”

    Avez-vous vérifié quelle est la sortie de Environment.getExternalStorageDirectory (), car si elle ne contient pas de séperateur de fichier (/), votre image se retrouvera dans un répertoire qui ne réside pas sur la carte SD, par exemple:

      /mnt/sdcardmake_machine_example.jpg 

    Lorsque ce que vous voulez vraiment, c'est:

      /mnt/sdcard/make_machine_example.jpg 

    Essayez ce code à la place:

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

    Voici le produit final dans le cas où quelqu'un continue de visiter ce fil:

     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 . Utilisez juste

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

    Et ne dérangez pas les séparateurs.

    2. Face au même problème avant. Les téléphones SenseUI ont une application de caméra personnalisée qui ne crée pas de fichier. Quel appareil utilisez-vous? Il peut déjà être corrigé dans les derniers appareils, mais cela peut encore être un problème. Voici donc un exemple complet de la façon de le résoudre. Problèmes de sauvegarde d'une photo dans un fichier .

    Vous devez effectuer une analyse multimédia après avoir enregistré l'image

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

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

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

    Il va commencer à capturer la photo et le magasin dans la carte SD.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.