アクティビティの1つで特定のURLを取得したいと思います。パターンは次のとおりです。
http://www.example.com/abc123/foo/xyz789
パスコンポーネント「abc123」および「xyz789」は、長さが1より大きい任意の英数字のシーケンスにすることができます。
私のマニフェストでこれを行う:
<activity>
<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.com"
Android:pathPattern="/.*/foo/.*" />
しかし、私のドメインのパターンはすべて一致しているようです。
myexample.com
myexample.com/whatever
両方が一致します。おそらく。*演算子がここで期待どおりに機能していないのではないでしょうか。どんな助けも素晴らしいでしょう、
ありがとう
http://developer.Android.com/guide/topics/manifest/data-element.html
今日も同じ問題がありました。解決策は次のとおりです。
<data Android:pathPattern="/remotes/..*/..*"/>
(。+)の代わりに(.. *)を使用する
元の質問の場合、これでうまくいくと思います。
<data
Android:Host="example.com"
Android:pathPattern="..*/foo/..*"
Android:scheme="http"/>
Android OSは PatternMatcher を使用し、 ソースコード とドキュメントを監視しているため、.
*
でのみ機能します。 \\
(エスケープ文字)少しクリエイティブにする必要があるかもしれません。つまり、\\
を使用して正規表現の評価を停止し、それ以降に再開します。
<data
Android:Host="example.com"
Android:pathPattern=".*\\/foo/.*"
Android:scheme="http"/>
これはmyexample.com/whatever
にのみ一致し、myexample.com
には一致しません
さまざまなURIでさまざまなインテントフィルターを作成するには、URIの最後に/
を使用します。
サンプルソリューション、http:/の代わりにhttp://www.example.com/abc123/foo/xyz789/を使用します/www.example.com/abc123/foo/xyz789そして使用する
example.com/abc123/ Android:pathPattern=".*\\/
example.com/abc123/foo/xyz789/ Android:pathPattern=".*\\/foo/.*\\/
example.com/abc123/foo/xyz789/bar/uvx456/ Android:pathPattern=".*\\/foo/.*\\/bar/.*\\/
問題は、。*がすべてに一致し、何も一致しないことです。したがって、「/。*/」は「//」に一致します。これは、パス内の「/」だけに相当します。
また、例の2つのパスセグメント「abc123」が、ここでサポートされている式マッチャーと等しいことを確認できます。
言い換えれば、パスをより単純で一致するものに変更したいということです。インテントを受信しているのがコンポーネントである場合は、実際のURLの可変部分にすぎない偽のURLを渡すことができます。たとえば、一致させたい場合は、
http://www.example.com/.+/foo/.+
キャプチャされた2つのグループが等しい場合は、インテントに http:// mystuff/abc12 を渡し、データパターンを http:// mystuff / *に設定します。
次に、インテントを受け取ったときにそれを解析し、既知の定数部分を入力して実際のURLに変換します。