Je souhaite obtenir sous forme de chaîne l'extension de l'image (par exemple "jpg", "png", "bmp" etc.) des images chargées à partir de la galerie ou sélectionnées à partir de l'appareil photo.
J'ai utilisé une méthode sous cette forme pour charger des images de la galerie
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;
}
}
filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png
ou
filePath.substring(filePath.lastIndexOf(".") + 1); // Without dot jpg, png
Je sais que c'est assez tard, mais pour ceux qui ont toujours un problème lorsque getContentResolver (). GetType (uri) renvoie null lorsque le chemin contient des espaces Cela résout également le problème lorsqu'une image est ouverte via le Gestionnaire de fichiers plutôt que par la galerie. Cette méthode retourne l'extension du fichier (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;
}
getContentResolver().getType(theReceivedUri);
L'extrait ci-dessus vous donne le type "média/format"
Je pense que cela devrait vous amener où vous voulez (je ne l'ai pas essayé, lisez-en un peu et je pense que cela fonctionne).
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();
vous avez le choix multiple d'obtenir l'extension du fichier: comme:
1 -String filename = uri.getLastPathSegment();
voir ce link
2- vous pouvez aussi utiliser ce code
filePath .substring(filePath.lastIndexOf(".")+1);
mais ce n'est pas bon aproch.
3-si vous avez un URI de fichier, utilisez ce code
String[] projection = { MediaStore.MediaColumns.DATA,
MediaStore.MediaColumns.MIME_TYPE };
4-si vous avez une URL, utilisez ce code
public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;}
si vous obtenez content://media
Uris comme résultat et que vous voulez l'extension, vous devez interroger la base de données comme vous le faites et extraire si de filePath
. Par exemple. avec this
Pour extraire le nom de fichier d’un chemin complet, la solution la plus simple est
String filename = (new File(filePath)).getName();
Cher ami, nous pouvons trouver l’extension de n’importe quel fichier, image, vidéo et n'importe quelle documentation . Pour cela.
Tout d'abord, nous allons créer une méthode GetFileExtension
que nous voulons appeler pour trouver l'extension d'un fichier, d'une image, de données et de documents. Ici j'ai pris une variable nommée:
Uri videouri = data.getData();
dans OnActivity
Résultat, je l'invoque dans,
onclick(View view)
{
GetFileExtension(videouri);
Toast.makeText(this, "Exten: "+GetFileExtension(videouri), Toast.LENGTH_SHORT).show();
}
Maintenant créez une classe dans la classe GetFileExtension
:
// Get Extension
public String GetFileExtension(Uri uri)
{
ContentResolver contentResolver=getContentResolver();
MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();
// Return file Extension
return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}
Grâce à cette méthode, nous pouvons trouver l’extension de n’importe quel fichier en Java et Android . Je suis sûr à 100% que cela fonctionnera pour tous ceux qui créent une application d'entreprise . Si vous aimez, votez pour moi ..
Je pense que cela devrait utiliser MediaStore.MediaColumns.MIME_TYPE
String[] projection = { MediaStore.MediaColumns.DATA,
MediaStore.MediaColumns.MIME_TYPE };