android - samsung - como hacer una captura de pantalla en el celular
Cómo capturar una imagen y almacenarla con la cámara nativa de Android (5)
¿Ha comprobado cuál es el resultado de Environment.getExternalStorageDirectory (), porque si no contiene un separador de archivo final (/) su imagen terminará en un directorio que no reside en la tarjeta SD, como por ejemplo:
/mnt/sdcardmake_machine_example.jpg
Cuando lo que realmente quieres es:
/mnt/sdcard/make_machine_example.jpg
Pruebe este código en su lugar:
_path = Environment.getExternalStorageDirectory() + File.separator + "make_machine_example.jpg";
Tengo problemas para capturar una imagen y almacenarla desde la aplicación de cámara original. Aquí hay una muestra de algunos de mis códigos.
_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 );
Después de que se ha tomado la foto y regreso a mi actividad original, cuando navego a mi tarjeta SD a través de Android DDMS File Explorer, la imagen no está allí. Alguien sabe por qué esto no se guarda?
1. Solo usa
new File(Environment.getExternalStorageDirectory(), "make_machine_example.jpg");
y no te preocupes por los separadores.
2. Se enfrentó al mismo problema antes. Los teléfonos SenseUI tienen una aplicación de cámara personalizada que no crea archivos. ¿Qué dispositivo estás usando? Es posible que ya se haya solucionado en los últimos dispositivos, pero también puede ser un problema. Así que aquí hay una muestra completa de cómo solucionarlo. Problemas para guardar una foto en un archivo .
Agregue esta línea al archivo AndroidManifest.xml y elimine la extensión make_machine_example:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Comenzará a capturar la foto y almacenarla en la tarjeta SD.
Aquí estaba el producto final en caso de que alguien todavía esté visitando este hilo:
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();
}
}
}
Debe realizar una exploración de medios después de guardar la imagen
sendBroadcast(new Intent(
Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));