2012-05-02 8 views
9

私のアプリケーションは、自分のアプリケーションのマーケットリンクに応答させたいと考えています。リンクはmarket:// details?id = my.package.nameです。私がこれをしたい理由は、アプリケーションがインストールされていればそれを開き、アプリケーションがインストールされていなければマーケットページを開くリンクを送ることができるからです。私が実行している問題は、アプリケーションが私のアプリケーションリンクだけでなく、すべての市場リンクに応答することです。その理由は、パッケージ名がUriのクエリ部分で定義されているためです。 Uriのクエリ部分に基づいてインテントをフィルタリングする方法はありますか?クエリに基づいてインテントフィルタを作成できますか?

答えて

6

いいえ、申し訳ありません。 ?の左側のすべてに基づいてフィルタを制約することはできますが、それだけです。

+0

答えをありがとう。なぜ私はこれを動作させることができなかったのかを説明します。それはドキュメントではっきりと呼び出されていません。 – charlest

6

Android API 19からは、ssp,sspPrefixまたはsspPatternを使用して、これを行うことができます。例:このようなフィルタで

<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="https" 
     android:sspPrefix="//play.google.com/store/apps/details?id=com.example.test" 
    /> 
</intent-filter> 

、OSのみid=com.example.testパラメータを使用してURLのあなたのアプリを提供し、そのようなパラメータが存在しない場合にそれを提供しません。しかしこれはAndroid 4.4以降でのみ動作し、古いバージョンはsspPrefixを無視します。

この記事も参照してください。https://chris.orr.me.uk/android-ssp-data-intent-filter/

+0

この方法は、Android 4.4以降を実行する端末であっても信頼性がありません。https://stackoverflow.com/questions/46708662/android-sspprefix-is-ignored – CalumMcCall