android - studio - start activity for result camera
Obtener uri desde la cámara intento en Android (3)
al hacer clic
takePic.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent m_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageUri = getImageUri();
m_intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(m_intent, REQUEST_IMAGE_CAPTURE);
}
});
En el resultado:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE
&& resultCode == RESULT_OK) {
Log.d("test1",""+imageUri);
Intent shareIntent = new Intent(this, SharePicForm.class);
shareIntent.putExtra("photo",""+imageUri);
startActivity(shareIntent);
}
}
getImageUri ()
private Uri getImageUri(){
Uri m_imgUri = null;
File m_file;
try {
SimpleDateFormat m_sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
m_curentDateandTime = m_sdf.format(new Date());
m_imagePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + m_curentDateandTime + ".jpg";
m_file = new File(m_imagePath);
m_imgUri = Uri.fromFile(m_file);
} catch (Exception p_e) {
}
return m_imgUri;
}
Lo que me gustaría lograr es muy simple, llamar a la cámara y obtener el uri de la foto de resultados. Pero parece que hay un dispositivo diferente incoherente y en mi dispositivo no funciona en absoluto. Intenté almacenar la ruta en una variable pública, pero cuando la recupero, es nula, ¿existe una forma formal y estándar para implementarla y debería funcionar en todos los dispositivos? Además, ¿hay alguna forma de no proporcionar la ruta personalizada, pero obtener la ruta uri predeterminada del intento de la cámara?
Gracias por ayudar
En primer lugar, asegúrese de que su directorio esté creado ...
final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+ "/Folder/";
File newdir = new File(dir);
newdir.mkdirs();
en el botón, haga clic en llamar a esta función.
private void capturarFoto() {
String file = dir+DateFormat.format("yyyy-MM-dd_hhmmss", new Date()).toString()+".jpg";
File newfile = new File(file);
try {
newfile.createNewFile();
} catch (IOException e) {}
Uri outputFileUri = Uri.fromFile(newfile);
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {
Log.d("Demo Pic", "Picture is saved");
}
}
Asegúrate de agregar permisos en manifiesto
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Si su dispositivo no respeta cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
aún puede usar
Uri imageUri = data.getData();
en onActivityResult(int requestCode, int resultCode, Intent data)
. Pero en la mayoría de los casos, el problema es que la memoria RAM es limitada y el sistema destruye su actividad para proporcionar suficiente memoria a la aplicación de la cámara para cumplir su propósito. Por lo tanto, cuando se devuelve el resultado, los campos de su actividad no se inicializan, y debe seguir la sugerencia de Amit e implementar onSavedInstance()
y onRestoreInstanceState()
.
simplemente use este Uri imageUri = data.getData ();