特定の拡張子のファイルを自アプリで起動する(pathPatternが無視されている?)

2,693 views
Skip to first unread message

鈴木盛雄

unread,
Sep 4, 2013, 2:46:28 AM9/4/13
to android-g...@googlegroups.com
鈴木です。

Gmailの添付ファイル(SQLiteファイル 拡張子=「.db」)を開く際、
自アプリで開きたいと思っています。

そこで、AndroidManifest.xmlに以下のインテントフィルターを追加しました。

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="*/*" android:pathPattern=".*\\.db" />
</intent-filter>


当初「android:mimeType="*/*」を指定していましたが、拡張子「db」意外の全てのファイルが対象となってしまいました。
mimeTypeが優先されて、pathPatternが全く無視されているようなんです。

以下環境で試しました。結果は同じです。2台ともSQLite向けのアプリはインストールしておりません。
Nexus7(Android4.3)
GalaxyS2(Android4.0.4)

何か記述がおかしいのでしょうか・・?
恐れ入りますが、ご教授お願いします。
憶測でも結構です。何かヒントを頂ければ・・・

宜しくお願いします。




MORIHIRO

unread,
Sep 4, 2013, 3:28:03 AM9/4/13
to android-g...@googlegroups.com
schemeとhostが設定されていないのが問題なんだと思いますよ。

参考
https://sites.google.com/a/techdoctranslator.com/jp/android/guide/manifest/data-element

2013年9月4日水曜日 15時46分28秒 UTC+9 鈴木盛雄:

鈴木盛雄

unread,
Sep 4, 2013, 4:19:55 AM9/4/13
to android-g...@googlegroups.com
MORIHIRO様

ご返信ありがとうございます。
ご指摘頂いた点、以下のように追加して実行してみましが、、
「この添付ファイルを開いて表示できるアプリはありません」とダイアログ表示され、
インテントを受け付けない結果でした。
hostとscheme属性を外さないと関連付けたアプリとして認識されませんでした。

<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />

  <data android:mimeType="*/*" />
  <data android:pathPattern=".*\\.db" />
  <data android:host="*" />
  <data android:scheme="file"/>
</intent-filter>

そこで、hostとschemeを外し、mimeTypeを「application/octet-stream」としたところ、
一応、拡張子dbも含め、未知の拡張子ファイルのみインテントを受け取れるようになりました。
例えば、「.aaaa」等の拡張子のファイルを添付してみて実行してみました。
拡張子db以外も認識してしまうので、根本的な解決にはなっていませんが・・・範囲を絞った感じでしょうか。
pathPattern属性が意味をなしてない状態です。

ちなみに、ファイラーで開くとどうなのかと思いまして、ESファイルエクスプローラーで試したところ、
host、scheme属性を付けても問題なく関連付けられ開く事ができ、且つpathPatternも
認識しました。

もしかするとGMailアプリだけの問題なのでしょうか・・?
もちろんメーラーは、Android端末にデフォルトで入っているGmailアプリです。





2013年9月4日 16:28 MORIHIRO <morihi...@gmail.com>:

--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/android-group-japan からこのグループにアクセスしてください。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。

MORIHIRO

unread,
Sep 4, 2013, 10:46:23 AM9/4/13
to android-g...@googlegroups.com
logcatの出力を見ても分かるように、GMAILの添付ファイルは
ContentProvider(scheme="content")経由になるので、
オリジナル拡張子でのFilterはできないような気がします。
(100% NGかどうかは分かりません。。。)

2013年9月4日水曜日 17時19分55秒 UTC+9 鈴木盛雄:
このグループから退会し、メールの受信を停止するには、android-group-japan+unsubscribe@googlegroups.com にメールを送信します。
このグループに投稿するには、android-group-ja...@googlegroups.com にメールを送信してください。

鈴木盛雄

unread,
Sep 4, 2013, 11:15:24 PM9/4/13
to android-g...@googlegroups.com
MORIHIRO

返信遅くなりましたスミマセン。。
ありがとうございましたm(__)m

一応以下のように、Gmail添付ファイルから起動用とその他(ファイラー起動用)
2種類フィルターを作成してどちらからでも開けるようにしました。
解決にはなっていませんが・・・

<!-- GMail添付ファイル用 -->
<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="application/octet-stream" />
  <data android:pathPattern=".*\\.db" />
</intent-filter>

<!-- ファイラー用 -->
<intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <data android:mimeType="*/*" />
  <data android:pathPattern=".*\\.db" />
  <data android:host="*" />
  <data android:scheme="file"/>
</intent-filter>

ありがとうございました。



2013年9月4日 23:46 MORIHIRO <morihi...@gmail.com>:
このグループから退会し、メールの受信を停止するには、android-group-j...@googlegroups.com にメールを送信します。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
Reply all
Reply to author
Forward
0 new messages