J'ai un problème pour capturer une image et la stocker depuis l'application d'appareil photo natif. Voici un exemple de certains de mes codes.
_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 la photo prise et je reviens à mon activité d'origine, lorsque je navigue vers ma carte SD via Android Explorateur de fichiers DDMS, la photo n'est pas là. Quelqu'un sait pourquoi ce n'est pas le cas être sauvé?
Avez-vous vérifié la sortie de Environment.getExternalStorageDirectory (), car si elle ne contient pas de séparateur de fichier de fin (/), votre image se retrouvera dans un répertoire qui ne réside pas sur la carte SD, tel que:
/mnt/sdcardmake_machine_example.jpg
Quand ce que vous voulez vraiment, c'est:
/mnt/sdcard/make_machine_example.jpg
Essayez plutôt ce code:
_path = Environment.getExternalStorageDirectory() + File.separator + "make_machine_example.jpg";
Voici le produit final au cas où quelqu'un visiterait encore 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 simplement
new File(Environment.getExternalStorageDirectory(), "make_machine_example.jpg");
et ne vous souciez pas des séparateurs.
2. Face au même problème avant. Les téléphones SenseUI ont une application d'appareil photo personnalisée qui ne crée pas de fichier. Quel appareil utilisez-vous? Il est peut-être déjà corrigé dans les derniers appareils, mais il peut également être un problème. Voici donc un exemple complet comment le surmonter Problèmes d'enregistrement d'une photo dans un fichier .
Vous devez effectuer une numérisation des supports après avoir enregistré l'image
sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));