Có cách nào để sử dụng intent.setType()
và cung cấp nhiều loại rộng (như hình ảnh và video) không?Nhiều loại MIME trong Android
Tôi đang sử dụng ACTION_GET_CONTENT
. Dường như chỉ hoạt động với các loại được phân tách bằng dấu phẩy.
Có cách nào để sử dụng intent.setType()
và cung cấp nhiều loại rộng (như hình ảnh và video) không?Nhiều loại MIME trong Android
Tôi đang sử dụng ACTION_GET_CONTENT
. Dường như chỉ hoạt động với các loại được phân tách bằng dấu phẩy.
Rất tiếc, tính năng này hiện không được hỗ trợ. Bạn có hai tùy chọn:
(1) Sử dụng loại MIME là */*
và chấp nhận rằng có một số thứ mà người dùng có thể chọn mà bạn sẽ không thể xử lý (và có đường khôi phục tốt); hoặc
(2) Thực hiện trình chọn hoạt động của riêng bạn, thực hiện cuộc gọi trực tiếp trên trình quản lý gói để nhận các hoạt động có thể xử lý cả hai loại MIME cho mục đích, hợp nhất các danh sách đó và hiển thị chúng cho người dùng.
Ngoài ra, setType()
không hoạt động với các loại được phân tách bằng dấu phẩy. Nó phải là một và chỉ một loại MIME.
Thực ra, nhiều loại mime được hỗ trợ. Bạn đã thử nó chưa ??? Ví dụ: hình ảnh/*, video/* sẽ hiển thị ảnh và video ... – vchelbanster
Thực tế, nhiều loại mime được hỗ trợ. Bạn đã thử nó chưa ???
Ví dụ: intent.setType("image/*,video/*")
sẽ hiển thị ảnh và video ...
Đối với tôi nó hoạt động. Nó cũng sẽ làm việc cho bạn ...
Giải pháp này đang hoạt động ... nhưng chỉ với các ứng dụng cho phép hai loại mime. "Thư viện" mặc định không có. – Corbella
Thực ra, nó phụ thuộc vào ứng dụng "Thư viện" mà bạn đã cài đặt. Có nhiều phiên bản khác nhau của chúng được phân phối với các ROM Android khác nhau. – vchelbanster
Chỉ hoạt động với tôi trong những trường hợp nhỏ. Các hình ảnh giống nhau có thể hoặc không thể chọn được. Android 5.0.1 – Ingweland
cho công việc của tôi với dấu chấm phẩy.
Ví dụ:
intent.setType("image/*;video/*")
hoặc
sIntent.putExtra("CONTENT_TYPE", "image/*;video/*");
Trong Android 4.4 khi sử dụng Storage Access Framework bạn có thể sử dụng EXTRA_MIME_TYPES
để vượt qua nhiều kiểu MIME.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimetypes = {"image/*", "video/*"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(intent, REQUEST_CODE_OPEN);
Cái này hoàn hảo. –
Tính năng này không hoạt động trong Android 7.0. Chỉ hiển thị video. – clocksmith
@clocksmith Dường như hoạt động tốt trên Nexus 9 của tôi với Android 7.0. –
bạn có thể chuyển nhiều loại mime nếu bạn tách biệt với |
Intent.setType("application/*|text/*");
Đối với tôi những gì làm việc tốt nhất là:
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
Bạn có thể thêm một số loại kịch câm như thế này
intent.setType("image/*|application/pdf|audio/*");
Nhưng tính năng chọn ý định sẽ chỉ ứng dụng hiển thị mà có thể xử lý hình ảnh vì nó là hình ảnh đầu tiên trong chuỗi loại mime.
Tuy nhiên nếu bạn đã cài đặt trình quản lý tệp (tôi đã thử nghiệm với trình quản lý tệp CyanogenMod), bạn có thể chọn tệp có âm thanh hoặc pdf hoặc hình ảnh.
Nếu loại mime âm thanh là một trong những đầu tiên, như thế này:
intent.setType("audio/*|image/*|application/pdf");
Các tính năng chọn ý định sẽ chỉ hiển thị các ứng dụng có thể xử lý âm thanh.
Một lần nữa sử dụng trình quản lý tệp, bạn có thể chọn hình ảnh hoặc pdf hoặc âm thanh.
Bạn có thể cụ thể hơn không. setType() trên ... cái gì? Vì mục đích sử dụng và mục đích gì? Vv – CommonsWare
Bạn đã tìm ra cách để thực hiện việc này chưa? –