telefono reinicia recuperar puedo puede porque por iniciar funciona favor error como celular camara arreglar acceder android android-camera android-camera-intent

reinicia - Intento de la cámara Android



no se puede iniciar la camara por favor reinicia tu telefono (6)

Necesito presionar un intento para la aplicación de la cámara por defecto para que tome una foto, la guarde y devuelva un URI. ¿Hay alguna manera de hacer esto?


Encontré una manera bastante simple de hacer esto. Use un botón para abrirlo usando un oyente on click para iniciar la función openc() , como esta:

String fileloc; private void openc() { Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File f = null; try { f = File.createTempFile("temppic",".jpg",getApplicationContext().getCacheDir()); if (takePictureIntent.resolveActivity(getPackageManager()) != null) { takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,FileProvider.getUriForFile(profile.this, BuildConfig.APPLICATION_ID+".provider",f)); fileloc = Uri.fromFile(f)+""; Log.d("texts", "openc: "+fileloc); startActivityForResult(takePictureIntent, 3); } } catch (IOException e) { e.printStackTrace(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == 3 && resultCode == RESULT_OK) { Log.d("texts", "onActivityResult: "+fileloc); // fileloc is the uri of the file so do whatever with it } }

Puedes hacer lo que quieras con la cadena de ubicación uri . Por ejemplo, lo envío a un recortador de imágenes para recortar la imagen.


Me tomó algunas horas para que esto funcione. El código es casi un copiar y pegar de developer.android.com , con una pequeña diferencia.

Solicite este permiso en AndroidManifest.xml :

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

En su Activity , comience por definir esto:

static final int REQUEST_IMAGE_CAPTURE = 1; private Bitmap mImageBitmap; private String mCurrentPhotoPath; private ImageView mImageView;

Luego active esta Intent en un onClick :

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (cameraIntent.resolveActivity(getPackageManager()) != null) { // Create the File where the photo should go File photoFile = null; try { photoFile = createImageFile(); } catch (IOException ex) { // Error occurred while creating the File Log.i(TAG, "IOException"); } // Continue only if the File was successfully created if (photoFile != null) { cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photoFile)); startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE); } }

Agregue el siguiente método de soporte:

private File createImageFile() throws IOException { // Create an image file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); String imageFileName = "JPEG_" + timeStamp + "_"; File storageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES); File image = File.createTempFile( imageFileName, // prefix ".jpg", // suffix storageDir // directory ); // Save a file: path for use with ACTION_VIEW intents mCurrentPhotoPath = "file:" + image.getAbsolutePath(); return image; }

Luego recibe el resultado:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { try { mImageBitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath)); mImageView.setImageBitmap(mImageBitmap); } catch (IOException e) { e.printStackTrace(); } } }

Lo que lo hizo funcionar es MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath)) , que es diferente del código de developer.android.com . El código original me dio una FileNotFoundException .


Prueba lo siguiente que encontré here

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(intent, 0); @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK && requestCode == 0) { String result = data.toURI(); // ... } }


Prueba lo siguiente que encontré Aquí hay un enlace

Si su aplicación se dirige a M y más arriba y declara que usa el permiso CAMERA que no se concede, intentar usar esta acción dará como resultado una SecurityException.

EasyImage.openCamera(Activity activity, int type);

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); EasyImage.handleActivityResult(requestCode, resultCode, data, this, new DefaultCallback() { @Override public void onImagePickerError(Exception e, EasyImage.ImageSource source, int type) { //Some error handling } @Override public void onImagesPicked(List<File> imagesFiles, EasyImage.ImageSource source, int type) { //Handle the images onPhotosReturned(imagesFiles); } }); }


prueba este código

Intent photo= new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(photo, CAMERA_PIC_REQUEST);


private static final int TAKE_PICTURE = 1; private Uri imageUri; public void takePhoto(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); File photo = new File(Environment.getExternalStorageDirectory(), "Pic.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); imageUri = Uri.fromFile(photo); startActivityForResult(intent, TAKE_PICTURE); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case TAKE_PICTURE: if (resultCode == Activity.RESULT_OK) { Uri selectedImage = imageUri; getContentResolver().notifyChange(selectedImage, null); ImageView imageView = (ImageView) findViewById(R.id.ImageView); ContentResolver cr = getContentResolver(); Bitmap bitmap; try { bitmap = android.provider.MediaStore.Images.Media .getBitmap(cr, selectedImage); imageView.setImageBitmap(bitmap); Toast.makeText(this, selectedImage.toString(), Toast.LENGTH_LONG).show(); } catch (Exception e) { Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT) .show(); Log.e("Camera", e.toString()); } } } }