web-dev-qa-db-ja.com

<intent-filter>のURLパターンのマッチング

アクティビティの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

19
user291701

今日も同じ問題がありました。解決策は次のとおりです。

   <data Android:pathPattern="/remotes/..*/..*"/>

(。+)の代わりに(.. *)を使用する

元の質問の場合、これでうまくいくと思います。

<data
                Android:Host="example.com"
                Android:pathPattern="..*/foo/..*"
                Android:scheme="http"/>
31
CronosNull

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/.*\\/

14
raj

問題は、。*がすべてに一致し、何も一致しないことです。したがって、「/。*/」は「//」に一致します。これは、パス内の「/」だけに相当します。

また、例の2つのパスセグメント「abc123」が、ここでサポートされている式マッチャーと等しいことを確認できます。

言い換えれば、パスをより単純で一致するものに変更したいということです。インテントを受信して​​いるのがコンポーネントである場合は、実際のURLの可変部分にすぎない偽のURLを渡すことができます。たとえば、一致させたい場合は、

http://www.example.com/.+/foo/.+

キャプチャされた2つのグループが等しい場合は、インテントに http:// mystuff/abc12 を渡し、データパターンを http:// mystuff / *に設定します。

次に、インテントを受け取ったときにそれを解析し、既知の定数部分を入力して実際のURLに変換します。

1