2012-02-09 29 views
7

Gents,Nhiều tập tin mở rộng/Mimetype ý-bộ lọc với một hoạt động

Tôi đang cố gắng để có được nó để ứng dụng Android của tôi có thể đáp ứng tất cả các tập tin được mở (thông qua phù hợp với phần mở rộng của họ) và mime-loại (vì vậy họ sẽ làm việc từ trình duyệt).

Tôi đã làm theo lời khuyên ở đây:

Android intent filter for a particular file extension?

nhưng vẫn không có may mắn.

Các phần có liên quan từ file manifest android của tôi là như sau:

<activity android:name="MuPDFActivity" 
       android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/vnd.ms-xpsdocument"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/pdf"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <data android:mimeType="application/x-cbz"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.xps"/> 
      <data android:host="*"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.pdf"/> 
      <data android:host="*"/> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.VIEW"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
      <category android:name="android.intent.category.BROWSABLE"/> 
      <data android:scheme="file"/> 
      <data android:mimeType="*/*"/> 
      <data android:pathPattern=".*\\.cbz"/> 
      <data android:host="*"/> 
     </intent-filter> 
    </activity> 

Như bạn thấy, tôi muốn ứng dụng được gọi cho .pdf, .xps, và các tập tin .cbz, cũng file với các mimetypes có liên quan. Các thử nghiệm cục bộ ở đây dường như gợi ý rằng các phần .pdf và application/pdf đều hoạt động, nhưng hãy thử như tôi có thể, các phần .xps (và có lẽ .cbz) thì không.

Tôi có thiếu điều gì đó hiển nhiên ở đây không? Mỗi Hoạt động có thể chỉ có một mẫu mimetype/tệp không?

Mọi trợ giúp sẽ được đánh giá cao.

Cảm ơn,

Robin

+0

Phiên bản Android nào? Tôi lưu ý rằng có sự khác biệt ở đây.Xem câu hỏi của tôi: http://stackoverflow.com/questions/20650378/how-did-intent-filter-change-from-android-2-to-android-4 – Martin

Trả lời

0

thể từng Hoạt động chỉ có một Mimetype/mô hình tập tin?

Không. Khi bạn nhập học, hai người đang làm việc (PDF x 2).

Tôi có thiếu điều gì đó hiển nhiên ở đây không?

Tôi nghi ngờ rằng yếu tố BROWSABLE sẽ giúp bạn làm tốt những thứ bạn có trên đó và bạn cần nó cho những người khác. BROWSABLE dành cho trình duyệt, sẽ đi xuống đường dẫn loại MIME.

2

afaik, rằng thà như thế (một bộ lọc với các giá trị khác nhau):

<intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <data android:mimeType="application/vnd.ms-xpsdocument"/> 
     <data android:mimeType="application/pdf"/> 
</intent-filter> 

Ngoài ra, nó có thể là mime-type là không chính xác?

+0

Thú vị. Tôi đã từng cố gắng kết hợp 'android: mimeType' và' android: pathPattern' và điều đó không hoạt động. – Martin

+0

Đối với 'android: pathPattern', tất cả bốn thuộc tính của thẻ' 'cần phải được đặt trong Android 4. Vì vậy, gợi ý của bạn sẽ không giúp OP. – Martin

2

Nhiều <data> là hợp lý HOẶC được xử lý riêng. Vì vậy, bạn có một thẻ với android:scheme nhưng không có android:pathPattern và một với android:pathPattern nhưng không có android:host và cứ như vậy. Vì vậy, không có thẻ nào trong số các thẻ <data> hoàn tất và sẽ hoạt động tốt.

Bạn nên sử dụng:

<intent-filter> 
     <action android:name="android.intent.action.VIEW"/> 
     <category android:name="android.intent.category.DEFAULT"/> 
     <category android:name="android.intent.category.BROWSABLE"/> 
     <data 
      android:scheme="file" 
      android:mimeType="*/*" 
      android:pathPattern=".*\\.cbz" 
      android:host="*" 
     ></data> 
    </intent-filter> 

Bạn có thể có một giây <data> nhưng nó sẽ cần tất cả bốn thuộc tính một lần nữa khi tất cả bốn thuộc tính này là bắt buộc với Android 4 nếu bạn muốn sử dụng android:pathPattern. (Họ không có phiên bản Android cũ hơn)

+0

Hi Martin nếu tôi sử dụng bộ lọc ý định ở trên, Ứng dụng của tôi đang hiển thị khi tôi cố gắng mở ứng dụng gmail từ thông báo. –

+0

Kết hợp nhiều ** ** thẻ hoạt động? Nó chỉ phát hiện ra cái đầu tiên cho tôi. –

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