Obtenga uri de la intención de la cámara en android

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

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 intención de la cámara y obtener el uri de la foto de resultado. Pero parece que hay un inconsistente de dispositivo diferente y en mi dispositivo no es trabajo en absoluto. He intentado almacenar el camino en una variable pública, pero cuando lo recupero, es nulo, ¿hay manera formal y estándar para implementar y debe ser el trabajo en todos los dispositivos? Además, ¿hay alguna manera de no proporcionar la ruta personalizada pero obtener el camino uri predeterminado de la intención de la cámara?

Gracias por ayudar

Si su dispositivo no respeta a cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, todavía puede utilizar

 Uri imageUri = data.getData(); 

onActivityResult(int requestCode, int resultCode, Intent data) . Pero en la mayoría de los casos, el problema es que la RAM es limitada, y el sistema destruye su actividad para dar suficiente memoria a la aplicación de cámara para cumplir con su intención. 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() .

En primer lugar asegúrese de que su directorio se crea ……

 final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+ "/Folder/"; File newdir = new File(dir); newdir.mkdirs(); 

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úrese de agregar permiso en el manifiesto

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

Simplemente use este Uri imageUri = data.getData ();

  • Autofocus de la cámara Android cuando el usuario mantiene la cámara inmóvil
  • MediaStore.EXTRA_OUTPUT hace que los datos sean nulos, otra forma de guardar fotos?
  • Compatibilidad con la versión de la API de Android
  • Android Camera - ¿Cómo puedo tomar un "rectángulo" específico de la matriz de bytes?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.