2012-09-03 25 views
11

trong ứng dụng của chúng tôi, chúng tôi muốn xuất hiện trong trình đơn "Chia sẻ qua". Vì vậy, chúng tôi đã thêm bộ lọc ý định này vào hoạt động của chúng tôi:Bộ lọc chỉ cho các tệp chỉ

<intent-filter> 
    <action android:name="android.intent.action.SEND" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <data android:mimeType="application/*" /> 
    <data android:mimeType="audio/*" /> 
    <data android:mimeType="image/*" /> 
    <data android:mimeType="text/*" /> 
    <data android:mimeType="video/*" /> 
</intent-filter> 

Nó hoạt động và ứng dụng của chúng tôi xuất hiện trong trình đơn Chia sẻ.

Tuy nhiên, bộ lọc ý định không thực hiện chính xác những gì chúng ta muốn đạt được:

  1. chúng tôi muốn xuất hiện trong menu cho tất cả các file, bất cứ điều gì có loại mime là
  2. chúng tôi muốn chỉ xuất hiện cho các tệp. Và cho đến giờ, nếu người dùng muốn chia sẻ một văn bản đơn giản, vì loại mime của nó sẽ là văn bản/đồng bằng, ứng dụng của chúng tôi sẽ xuất hiện trong trình đơn và chúng tôi không muốn nó.

Bộ lọc ý định chính xác cho tất cả các tệp và chỉ dành cho tệp là gì?

Xin cảm ơn trước.


Chúng tôi đã cố gắng thêm scheme = file và host = "" hoặc "*" và nó không hoạt động khi nhiều ứng dụng sử dụng lược đồ = nội dung để chia sẻ nội dung dựa trên tệp.

+0

Xin lỗi vì đã mang lên một câu hỏi cũ, tôi đã cố gắng sử dụng loại "android.intent.category.OPENABLE" và có vẻ làm việc. Nó không hiển thị chia sẻ một trang web từ chrome, nó cho thấy chia sẻ tập tin từ Solid Explorer. Có an toàn để sử dụng điều này hoặc nó tốt hơn với các đề án? –

+0

@Giorgio Aresu, không rõ bạn đang hỏi gì. Bạn đã thử cả hai tùy chọn? – Snicolas

+0

Tôi đã thử cả hai. Với các lược đồ như được đề cập trong các câu trả lời, thậm chí tôi không hiển thị khi chia sẻ, với _openable_ là danh mục, nó hoạt động chia sẻ tệp từ trình quản lý tệp nhưng không chia sẻ văn bản thuần túy từ trình duyệt. Đây là những gì tôi muốn: nhận được các tập tin (tất cả các loại mime), chỉ các tập tin (không phải văn bản), chính xác những gì bạn muốn trong câu hỏi của bạn.Thử nghiệm thêm cho thấy một số ứng dụng (photoshop express, gallery) chia sẻ uris dưới dạng văn bản thuần túy hoặc với các định dạng như "image: 3710" không hoạt động với danh mục có thể mở. Tôi đang cố gắng tìm ra ... –

Trả lời

7

chúng tôi muốn xuất hiện trong menu cho tất cả các file, bất cứ điều gì có loại mime là

Hãy thử một kiểu MIME của */*.

chúng tôi chỉ muốn xuất hiện cho tệp. Và cho đến giờ, nếu người dùng muốn chia sẻ một văn bản đơn giản, vì loại mime của nó sẽ là văn bản/đồng bằng, ứng dụng của chúng tôi sẽ xuất hiện trong trình đơn và chúng tôi không muốn nó. Chúng tôi đã cố gắng thêm scheme = file và host = "" hoặc "*" và nó không hoạt động khi nhiều ứng dụng sử dụng lược đồ = nội dung để chia sẻ nội dung dựa trên tệp.

Sau đó có hai phần tử <data>, một cho sơ đồ content và một cho sơ đồ file.

<data android:mimeType="*/*" /> 
<data android:scheme="content" /> 
<data android:scheme="file" /> 

Tuy nhiên, hãy nhớ rằng chương trình content không có nghĩa là nó nhất thiết phải là tệp.

+6

Sử dụng điều này, chúng tôi không xuất hiện trong trình đơn chia sẻ nữa, không có trình thám hiểm tệp nào chúng tôi đã cài đặt. – Snicolas

+0

@Snicolas: OK, hãy thử hai phần tử '', một cho mỗi lược đồ. – CommonsWare

+0

Không, nó không hoạt động bằng cách sử dụng 2 bộ lọc ý định, một cho mỗi lược đồ. – Snicolas

1
  1. Nếu bạn muốn được gọi cho bất kỳ loại kịch câm, không đặt một loại mỏ duy nhất trong bộ lọc
  2. scheme="file" là câu trả lời cho chỉ chạy trên các tập tin. Bây giờ nếu các bên thứ 3 Application vượt qua các dữ liệu như content, sau đó nó là (bởi defiinition) không phải là một tập tin nữa
+1

Sử dụng tính năng này, chúng tôi không xuất hiện trong trình đơn chia sẻ nữa, không có trình thám hiểm tệp nào mà chúng tôi đã cài đặt. – Snicolas