2011-12-29 11 views
3

これは以前に一般的に論じられましたが、私は今や特別なケースを持っています。私のアプリケーションは特定のアプリケーション固有のファイルタイプ(.gedstar)を開きます。これは実際にはSQLiteデータベースであり、一般的にはpathPattern修飾子を持つapplication/octet-streamとして処理されます。これは私の意図の定義です:ファイルタイプのAndroidのインテントが失敗する

(これはワイルドカードのmimeTypeを使用した場合と使用しなかった場合のBTW)です。今まで私はDropboxを使ってユーザーのPCからAndroidにファイルを転送してアプリを起動することを推奨してきましたが、これまではうまくいきました。その後、Dropbox V2.0アプリのリリースにより、このファイルタイプのアプリを持たないというトーストメッセージが発生しました。 Logcatでそれをトラップ

が、これはそれが必要のように私には見えた、動作しない意図である:

I/ActivityManager(97):テント{行為= android.intent.action:活動を開始します。 VIEW dat = file:///mnt/sdcard/Android/data/com.dropbox.android/files/scratch/GedStar%20Pro/Gordon.gedstar typ =アプリケーション/オクテットストリームflg = 0x10000003(補足あり)}

奇妙なことは、Dropboxのブラウザインタフェースを使用してこの同じファイルをダウンロードしてから、ブラウザのダウンロードリストに移動して正常に起動できることです。ここで成功したインテントは次のとおりです。

I/ActivityManager(97):開始アクティビティ:インテント{act = android.intent.action.VIEW dat = file:///mnt/sdcard/download/Gordon.gedstar typ = application/octet-stream flg = 0x10000000 cmp = com.ghcssoftware.gedstar/.GedStar}

「flg」と「cmp =一致するインテント。誰もがこれをより完全に説明できますか?

+0

もう1つの違いは '%20'です。スペースがない方法でDropBoxでファイルをダウンロードしてみてください。私はDropBoxの外部ストレージファイルの構造を調べていないが、私は "GedStar Pro"がフォルダであると推測している。 – CommonsWare

+0

私はすでにこの問題を解消していましたが、pathPatternの制限であることが判明しました。下の私の答えを見てください。 – gordonwd

答えて

6

Dropboxの技術サポートのおかげで、私はこの問題を抱える唯一の人ではなかったことがわかりました。その理由は、余分なドットを含むIntent文字列の "com.dropbox.android"です。 PathPatternのマッチングは "greedy"ではないので、specの最初のドットで壊れていることが分かります。また、ユーザがディレクトリやファイル名にドットを持っていると、それは壊れます!

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

これは「.gedstar」の文字列の前の3つのドットのパスに一致します。解決策は(?我々はまだ言葉「その場しのぎ」を使用しない)のようなpathPatternsとインテントフィルタの束を供給することです。考えられるのは、予想できるほど多くの点をカバーするために複数のインテントを含めることです。醜いですが、今はうまくいきます!

+0

独自のベンダーのMIMEタイプを使用しているだけの理由がありますか? – CommonsWare

+0

実際にはSQLiteデータベースファイルなので、Dropboxなどの起動アクティビティをどのように特定のMIMEタイプとして認識させるかはわかりません。 – gordonwd

関連する問題