2013-04-22 38 views
5

Tôi đang sử dụng Mục đích để cho phép người dùng chọn tệp và sau khi người dùng đã thực hiện điều đó, tôi muốn biết loại tệp được chọn là tệp nào.ACTION_GET_CONTENT: Cách nhận tệp kết thúc khi tìm kiếm nhiều loại tệp?

Mục đích:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 

Trong onActivityResult của tôi, tôi muốn trích xuất các đường đi từ mục đích thông qua intent.getData() và tất cả đó là "submethods" (getScheme(), getLastPathSegment() vv). Tuy nhiên, tôi chỉ nhận được Uri cho tập tin được chọn.

Ví dụ về URI:

Uri: content://media/external/audio/media/15185 //This is an audiofile 
Uri: content://media/external/audio/media/20 //Another audiofile 
Uri: content://media/external/images/media/20577 //this is a picture 
Uri: file:///storage/emulated/0/testWed%20Apr%2017%2011%3A10%3A34%20CEST%202013 //This is a file 

Tôi đã nhìn thấy các giải pháp như thế nào để có được những đường dẫn tuyệt đối khi người dùng chỉ được phép chọn hình ảnh hoặc âm thanh. Nhưng làm cách nào để tôi nhận được absolutePath (đường dẫn thực sự có tên và đuôi tệp, ví dụ: MyPicture.jpeg) nếu tôi muốn cho phép người dùng chọn từ các loại tệp khác nhau?

Mã Tôi đã twiggling với thử để có được những con đường có tên tuổi trong onActivityResult (int requestCode, int resultCode

  String fileName = data.getData().getLastPathSegment().toString(); 
     System.out.println("Uri: " +data.getData().toString()); 
     File f = new File(fileName); 
     System.out.println("TrYinG wIWThA Da FiLE: " +f.getAbsolutePath()); 
     System.out.println("FileNAME!!!: "+fileName); 

Trả lời

4

By tập tin kết thúc tôi giả sử bạn có nghĩa là phần mở rộng tập tin? (tức là mp4)

Nếu vậy bạn có thể sử dụng ContentResolver để có được những mimetype:

String mimeType = getContentResolver().getType(sourceUri); 

này sẽ cung cấp cho bạn mimetype giả sử họ nằm trong MediaStore mà họ nên nếu bạn có nội dung Uri. vì vậy bạn sẽ có được một cái gì đó như "image/png", "video/mp4", vv

Sau đó, bạn có thể sử dụng MimeTypeMap để có được phần mở rộng tập tin từ Mimetype:

String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType); 

Lưu ý rằng bạn nên không bao giờ substring mimetype sau "/" để nhận được phần mở rộng như một số mimetype không sử dụng phần mở rộng của nó như ".mov" tập tin có mimetype "video/quicktime"

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