android - tipo - Obtenga la extensión de archivo de las imágenes seleccionadas de la galería o cámara, como una cadena
formato de imagen para celular (8)
Quiero obtener como cadena la extensión de la imagen (por ejemplo, "jpg", "png", "bmp", etc.) de las imágenes cargadas de la galería o seleccionadas de la cámara.
He utilizado un método en este formulario para cargar imágenes de la galería.
private static final int SELECT_PICTURE_ACTIVITY_REQUEST_CODE = 0;
....
private void selectPicture() {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, SELECT_PICTURE_ACTIVITY_REQUEST_CODE);
}
....
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case SELECT_PICTURE_ACTIVITY_REQUEST_CODE:
if (resultCode == RESULT_OK) {
Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
.........
}
cursor.close();
}
break;
}
}
Creo que esto debería llevarte a donde quieres (no lo he probado, solo leí un poco y creo que funciona).
Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DISPLAY_NAME};
Cursor cursor =
getContentResolver().query(selectedImage, filePathColumn, null, null, null);
if (cursor.moveToFirst()) {
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
int fileNameIndex = cursor.getColumnIndex(filePathColumn[1]);
String fileName = cursor.getString(fileNameIndex);
// Here we get the extension you want
String extension = fileName.replaceAll("^.*//.", "");
.........
}
cursor.close();
Creo que esto debería usar MediaStore.MediaColumns.MIME_TYPE
String[] projection = { MediaStore.MediaColumns.DATA,
MediaStore.MediaColumns.MIME_TYPE };
Estimado amigo, podemos encontrar la extensión de cualquier archivo, imagen, video y cualquier documento. para esto.
Primero, crearemos un método GetFileExtension
que queremos llamar para encontrar la extensión de un archivo, imagen, datos y documentos. Aquí tomé una variable llamada:
Uri videouri = data.getData();
en OnActivity
Result entonces lo invoco en,
onclick(View view)
{
GetFileExtension(videouri);
Toast.makeText(this, "Exten: "+GetFileExtension(videouri), Toast.LENGTH_SHORT).show();
}
Ahora haga una clase a clase GetFileExtension
:
// Get Extension
public String GetFileExtension(Uri uri)
{
ContentResolver contentResolver=getContentResolver();
MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();
// Return file Extension
return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}
Debido a este método, podemos averiguar la extensión de cualquier archivo en java y en android. Estoy 100% seguro de que funcionará para todos los que están haciendo una aplicación corporativa. Si te gusta entonces vota por mí ..
Sé que es bastante tarde, pero para aquellos que todavía tienen un problema cuando getContentResolver (). GetType (uri) devuelve un valor nulo cuando la ruta contiene espacios en blanco. Esto también resuelve el problema cuando una imagen se abre a través del Administrador de archivos en lugar de la galería. Este método devuelve la extensión del archivo (jpg, png, pdf, epub, etc.).
public static String getMimeType(Context context, Uri uri) {
String extension;
//Check uri format to avoid null
if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
//If scheme is a content
final MimeTypeMap mime = MimeTypeMap.getSingleton();
extension = mime.getExtensionFromMimeType(context.getContentResolver().getType(uri));
} else {
//If scheme is a File
//This will replace white spaces with %20 and also other special characters. This will avoid returning null values on file name with spaces and special characters.
extension = MimeTypeMap.getFileExtensionFromUrl(Uri.fromFile(new File(uri.getPath())).toString());
}
return extension;
}
Si obtiene content://media
Uris como resultado y desea la extensión, debe consultar la base de datos como lo hace y extraerla de filePath
. Eg con this
Para obtener el nombre de archivo de una ruta completa, la solución más sencilla es
String filename = (new File(filePath)).getName();
Usted tiene varias opciones para obtener la extensión del archivo: como:
1- String filename = uri.getLastPathSegment();
ver este link
2- puedes usar este código también
filePath .substring(filePath.lastIndexOf(".")+1);
Pero este no es un buen aproch.
3-Si tiene un URI de archivo, use este Código
String[] projection = { MediaStore.MediaColumns.DATA,
MediaStore.MediaColumns.MIME_TYPE };
4-Si tienes una URL, usa este código
public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;}
filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png
o
filePath.substring(filePath.lastIndexOf(".") + 1); // Without dot jpg, png
getContentResolver().getType(theReceivedUri);
El fragmento anterior le da el tipo como "medio / formato"