web-dev-qa-db-ja.com

ギャラリーまたはカメラから選択した画像からファイル拡張子を文字列として取得します

ギャラリーから読み込まれた画像またはカメラから選択された画像の画像拡張子(たとえば、「jpg」、「png」、「bmp」など)を文字列として取得したい。

このフォームのメソッドを使用して、ギャラリーから画像をロードしました

    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;
    }
}
29
AndreaF
 filePath.substring(filePath.lastIndexOf(".")); // Extension with dot .jpg, .png

または

 filePath.substring(filePath.lastIndexOf(".") + 1); // Without dot jpg, png
62

私はそれがかなり遅いことを知っていますが、パスに空白が含まれているときにgetContentResolver()。getType(uri)がnullを返すときにまだ問題がある人にとっては。これにより、ギャラリーではなくファイルマネージャーで画像を開いたときの問題も解決されます。このメソッドは、ファイルの拡張子(jpg、png、pdf、epubなど)を返します。

 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;
}
17
Aaron
getContentResolver().getType(theReceivedUri);

上記のスニペットは、タイプを「メディア/フォーマット」として取得します

7
Anand

file:likeの拡張子を取得するには複数の選択肢があります。

1 -String filename = uri.getLastPathSegment();こちらをご覧ください link

2-このコードも使用できます

 filePath .substring(filePath.lastIndexOf(".")+1);

しかし、これは良いアプローチではありません。

3-ファイルのURIがある場合は、このコードを使用します

String[] projection = { MediaStore.MediaColumns.DATA,
    MediaStore.MediaColumns.MIME_TYPE };

4- URLがある場合は、このコードを使用します

public static String getMimeType(String url) {
String type = null;
String extension = MimeTypeMap.getFileExtensionFromUrl(url);
if (extension != null) {
    type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
return type;}
6
John smith

これで目的の場所に移動できるはずです(試したことはありませんが、少し読んでみて、うまくいくと思います)。

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();
5
Boris Strandjev

あなたが取得する場合 content://media結果としてUrisであり、拡張機能が必要な場合は、データベースを照会し、filePathから抽出する必要があります。例えば。 this

フルパスからファイル名を取得するには、最も簡単な解決策です

String filename = (new File(filePath)).getName();
0
zapl

親愛なる友人、私たちはあらゆるファイル、画像、ビデオ、あらゆるドキュメントの拡張子を見つけることができます。このため。

最初に、ファイル、画像、データ、ドキュメントの拡張子を見つけるために呼び出すメソッドGetFileExtensionを作成します。ここでは、次の名前の変数を取りました。

Uri videouri = data.getData();

OnActivity結果で、それを呼び出して、

onclick(View view)
{
    GetFileExtension(videouri);
    Toast.makeText(this, "Exten: "+GetFileExtension(videouri), Toast.LENGTH_SHORT).show();
}

次に、クラスをクラスGetFileExtensionに作成します。

// Get Extension
public String GetFileExtension(Uri uri)
{
        ContentResolver contentResolver=getContentResolver();
        MimeTypeMap mimeTypeMap=MimeTypeMap.getSingleton();

        // Return file Extension
        return mimeTypeMap.getExtensionFromMimeType(contentResolver.getType(uri));
}

この方法により、JavaおよびAndroidで任意のファイルの拡張子を見つけることができます。企業アプリを作成しているすべてのユーザーに確実に機能することを確信しています。私に投票して..

0
Pradeep Sheoran

これにはMediaStore.MediaColumns.MIME_TYPE

String[] projection = { MediaStore.MediaColumns.DATA,
        MediaStore.MediaColumns.MIME_TYPE };
0
gianguyen