মাইম টাইপের কোনও ফাইলের উরি থাকা আমি কীভাবে পেতে পারি?


86

আমার কাছে গ্যালারী এবং ক্যামেরার সাথে পাওয়া উরিসের একটি তালিকা রয়েছে। এই URIs ভালো আছেন: content://media/external/images/media/94। আমি এর মাইম টাইপটি কীভাবে পেতে পারি?

উত্তর:


181

আপনি চেষ্টা করতে পারেন

ContentResolver cR = context.getContentResolver();
MimeTypeMap mime = MimeTypeMap.getSingleton();
String type = mime.getExtensionFromMimeType(cR.getType(uri));

সম্পাদনা করুন:

mime.getExtensionFromMimeType(cR.getType(uri)) 

রিটার্ন -> "জেপিইগ"

cR.getType(uri);

প্রত্যাশিত মানটি "চিত্র / জেপিগ" প্রদান করে।


15
mime.getExtensionFromMimeType(cR.getType(uri))আমাকে ফেরৎ "jpeg"কিন্তু cR.getType(uri)আয় "image/jpeg"প্রত্যাশিত মান হয়।
ব্রেইস গাবিন

এটি কিছু ডিভাইসের জন্য কাজ করছে না..এই কোনও বিকল্প আছে?
অদিতি পরীখ

4
@ অদিতিপরিখ এই উত্তরটি আমার পক্ষে কাজ করে ...
কৌতূহল

4
@ ব্রাইসগাবিন আমি একটি .csv ফাইলে পড়ার চেষ্টা করছি। কোনও কারণে আমি "পাঠ্য / সিএসভি" পাই cR.getType(uri)তবে ime.getExtensionFromMimeType(cR.getType(uri));আমি শূন্য হয়ে যাই। .Csv কি কেবল সমর্থিত নয় কিছু?
জাস্টিন লিউ

না, এটি সমর্থিত নয়। আপনি বর্তমানে এই উত্স কোডটিতে সমর্থিত এক্সটেনশনের একটি তালিকা দেখতে পাচ্ছেন ।
ব্রাইস গাবিন

34

এই পদ্ধতিটি ফাইলের প্রসারকে (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;
}

4
এটি আমার জন্য কাজ করছে .. আমি বিকাশকারীকে
amitabha2715

অ্যারন ধন্যবাদ এটি অ-ইংরাজী ফাইলের নামের জন্য পুরোপুরি কাজ করে।
ঘাসেম সাদেঘি

12

জন্য Content Uri

ContentResolver cr = context.getContentResolver();
mimeType = cr.getType(contentUri);

জন্য File Uri

String fileExtension = MimeTypeMap.getFileExtensionFromUrl(fileUri
            .toString());
mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
            fileExtension.toLowerCase());

উভয়ের জন্য, Contentপাশাপাশি কাজ করে File

public String getMimeType(Context context, Uri uri) {
    String mimeType = null;
    if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        ContentResolver cr = context.getContentResolver();
        mimeType = cr.getType(uri);
    } else {
        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri
                .toString());
        mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                fileExtension.toLowerCase());
    }
    return mimeType;
}

মাইমটাইপম্যাপ.জেটফাইএল এক্সটেনশনফ্রুম ইউআরএল () এর সাথে সতর্ক থাকুন, মনে হয় এটি সমস্ত ফাইলের নাম হ্যান্ডেল করতে সক্ষম হবে না। উদাহরণস্বরূপ, আমার এমুলেটরটিতে, ক্যামেরার সাথে তোলা ফটোতে ফাইলনামে কমা এবং স্পেস থাকে, যার ফলে এই পদ্ধতিটি একটি খালি স্ট্রিং ফিরিয়ে দেয়। আমি যদি পদ্ধতি কল ব্যর্থ হয় তবে ম্যানুয়াল পার্সিংয়ে ফিরে যাওয়ার পরামর্শ দিই (শেষের সূচকটি '।' পেতে এবং সাবস্ট্রিংটি ব্যবহার করতে এটি ব্যবহার করুন)
lbenedetto

8

এর পরিবর্তে:

String type = mime.getExtensionFromMimeType(cR.getType(uri));

এটা কর:

String type = cR.getType(uri);

আর তুমি এই পাবেন: image/jpeg


14
শুধুমাত্র সামগ্রী ইউরিসের জন্য কাজ করে (সামগ্রী: //)। ফাইল ইউরিস (ফাইল: //) এর জন্য কাজ করে না
zyamys

আসলে পাথটি গেটটাইপের জন্য কিছু যায় আসে না। এটি কেবলমাত্র এমন হয় যে অভিপ্রায়টির অপর প্রান্তটি সুস্পষ্টভাবে অভিপ্রায়টির জন্য প্রকারটি নির্ধারণ করে। প্রায়শই বার পথগুলির জন্য এটি ঘটে না।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.