2013-03-23 49 views
6

Đầu tiên một số bối cảnh về những gì tôi đang cố gắng đạt được -Xác định loại Mime của một uri trong android được trả về bởi một ý định?

Tôi đang phát triển ứng dụng Chia sẻ hình ảnh mà tôi cần người dùng chọn hình ảnh từ hệ thống tệp.

Đối với điều này, tôi đang sử dụng mã này -

Intent photoPickerIntent = new Intent(Intent.ACTION_GET_CONTENT); 
    photoPickerIntent.setType("image/*"); 
    startActivityForResult(photoPickerIntent, REQUEST_CODE_IMAGE_PICKER_INTENT); 

Bây giờ, điều này gây ra một tính năng chọn trong đó tôi thấy nhiều tùy chọn bao gồm Gallery và một App FileManager mà tôi có trong điện thoại của tôi. Nếu tôi chọn thư viện và chọn một hình ảnh từ đó thì Hoạt động của tôi sẽ nhận được Intent với nội dung của hình ảnh. Nhưng nếu tôi chọn Ứng dụng FileManager, tôi có thể chọn bất kỳ tệp nào có thể không phải là hình ảnh. Vì vậy, những gì tôi cần là để có thể xác định loại mime của uri trở lại trong mục đích. Phương thức getType của intent trả về null.

Có cách nào để xác định hàm từ mục đích được trả về để có thể xác định xem nội dung đó có phải là hình ảnh hay không.

Nếu cách này không hoạt động theo cách này, thì tôi có thể phải sử dụng MimeTypeMap để xác định hàm từ phần mở rộng của tệp.

Trả lời

17

Tôi đã tìm ra cách để có được loại mime của nội dung uri nhưng không có gì làm việc cho các loại uri khác như uri của biểu mẫu 'file: // .....'.

Để có được loại mime của của uri nội dung -

ContentResolver cr = this.getContentResolver(); 
    String mime = cr.getType(YOUR_CONTENT_URI); 

này chỉ hoạt động cho nhân uri nội dung. Vì vậy, đối với uri khác tôi đang sử dụng MimeTypeMap để suy ra loại mime của họ từ phần mở rộng tập tin.

+0

tôi đã cố gắng như nhau, bên trong 'onActivityResult của tôi() ', nhưng' getType (data.getData()) 'trở về tôi rỗng – NarendraJi

4

nếu bạn có URI sau đó bạn có thể nhận Mimetype như

Uri uri = Uri.fromFile(file); 
ContentResolver cR = context.getContentResolver(); 
String mime = cR.getType(uri); 

hoặc thử // url = đường dẫn tập tin hoặc bất cứ điều gì phù hợp URL mà bạn muốn.

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

Để biết thêm chi tiết see these Answers

Các vấn đề liên quan