意图过滤以拦截特定于包的特定意图到Play商店

时间:2016-06-06 08:48:30

标签: android intentfilter

我正在尝试在针对我的应用的游戏商店链接(在网页上)打开我的应用。我尝试了以下的intent-filters,但是我无法使用它:

HTTPS链接

        <intent-filter>
            <!-- Catch web intents for Google Play Store -->
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:host="play.google.com"/>
            <!--<data android:path="/store/apps/details?id=my.app"/>-->
            <data android:scheme="https"/>
            <data android:scheme="http"/>
        </intent-filter>

问题在于Play商店总是被打开。我试图重置它的设置以删除“默认操作”,但没有运气。在我的应用程序页面上浏览并点击地址栏中的小型Android图标时,我有使用ADB shell($ am start -a android.intent.action.VIEW -d https://play.google.com/store/apps/details?id=my.app)或Firefox手机的意图的行为。使用该配置,我应该捕获所有Play商店意图(因为我评论了路径)但事实并非如此。它是否覆盖了选择对话框?

市场链接

        <intent-filter>
            <!-- Catch Google Play Store intents for FB Messenger -->
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="market"/>
            <data android:host="details"/>
        </intent-filter>

对于第二个意图,我成功地抓住了它,但我找不到一种方法来使它特定于我的应用程序。我试着玩其他领域,但没有运气。 ($ am start -a android.intent.action.VIEW -d market://details?id=my.app

所以最后,我的问题是:“如何从针对my.app包的网页拦截所有'开放游戏商店'意图,无论是市场://详细信息......还是{{3} } ... URIs?“

1 个答案:

答案 0 :(得分:0)

只需用app store link打开应用程序。如果安装,将打开应用程序。如果应用程序未安装,您将被重定向到Playstore。

if(ReykjavikUtils.isPackageInstalled("com.whatsapp" , MainActivity.this)){
Intent i = getPackageManager().getLaunchIntentForPackage("com.whatsapp");
                    startActivity(i);
} else
{
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.whatsapp");
}


public static boolean isPackageInstalled(String packageName, Context context) {
        PackageManager pm = context.getPackageManager();
        try {
            pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            return false;
        }
    }