woshidan's blog

そんなことよりコードにダイブ。

AndroidのIntentFilterのdata要素のpathPatternの挙動について

http://developer.android.com/intl/ja/guide/topics/manifest/data-element.html

data要素のURIでpathPatternの指定が出来るのですが、Patternと言いつつ、 そのパスが一致するか、*のワイルドカードを使ってその階層が入るか、くらいしか指定できず、 android:pathPrefix="/"の指定を入れると、挙動がよく分からない感じになったのでややつらかった。

たぶん、正規表現を使えるようにすると、端末内のアプリを全部検索するには重すぎるのでは、 という気が若干してなんともいえないですが、Google先生頑張って...。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.woshidan.uriintentfilter" >

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </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="http"
                    android:host="example.woshidan.com"/>

                <!--<data android:scheme="http"-->
                    <!--android:host="example.woshidan.com"-->
                    <!--android:pathPattern="/intentfilter/.*" />-->
                <!-- 上記で http://example.woshidan.com/intentfilter/xxxx/yyy...に反応 -->
                <!-- httpsの場合はもう1個intent-filterを同じように書く必要がある -->

                <!--<data android:scheme="http"-->
                    <!--android:host="example.woshidan.com"-->
                    <!--android:pathPattern="/.*/.*" />-->
                <!-- 上記で http://example.woshidan.com/xxxx/yyy...にのみ反応 -->

                <!-- 混乱の原因 -->
                <!--<data android:scheme="http"-->
                    <!--android:pathPrefix="/"-->
                    <!--android:host="example.woshidan.com"-->
                    <!--android:pathPattern="/.*/.*" />-->
                <!-- 上記で Prefixが入るとすべてのPathに反応するような気が... -->
            </intent-filter>
        </activity>
    </application>
</manifest>