从URL中使用意图过滤器打开Android应用程序无法正常工作(Open Android app f

2019-06-21 00:06发布

我有一个Android应用程序,人们对于一个网站的替代品使用。 因此,当用户遇到一个网址的网站,我想给他们在我的应用程序,而不是在浏览器中“打开URL”选项。 换句话说,我想弹出出现,让他们我的应用程序和浏览器(以及可能的其他应用程序)之间进行选择。

我从我需要一个意图过滤器在我的应用程序的“数据”过滤器上的正确形式的URL过滤器添加到活动各种渠道了解。

有问题的网站http://members.iracing.com ,所以我增加了以下意图过滤器:

    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <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" />
            <data android:scheme="http" />
            <data android:host="members.iracing.com" />
        </intent-filter>
    </activity>

我曾尝试过各种形式的这些数据过滤器,例如使用具有两个属性的单一“数据”节点:

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" android:host="members.iracing.com"/>
        </intent-filter>

它根本就没有工作。 我不知道还有什么要告诉你。 我托管在我的网站上简单的HTML页面与几个链接到不同页面该网站上(全部是以“http://members.iracing.com / ...”),当我点击其中任何一个,他们只需打开在而没有问我要使用的应用程序的浏览器。 我试了一下两者在模拟器上以及我的物理设备上安装应用程序后,没有什么工作。 我在一个完全空白的,新的Android项目尝试这样做只是为了看看是否能够正常工作,什么都没有。

后来我意识到,该网站需要身份验证,如果您还没有登录它重定向到登录页面,在https://members.iracing.com/membersite/login.jsp ,所以我试图用“https”开头替换方案。 我甚至试图改变主机“www.members.iracing.com”,并在最后我甚至尝试了所有这些事情的组合(不知道这应该工作,但是,嘿,我在这一点绝望.. ...)

       <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="http" />
            <data android:scheme="https" />
            <data android:host="members.iracing.com" />
            <data android:host="www.members.iracing.com" />
        </intent-filter>

仍然没有去。 我不知道如果重定向是相关的,虽然,浏览器显然会先转到非重定向的网站,然后做重定向到登录页面,但在任何时候,我会得到选择在我的应用程序将其打开。 此外,如果我在浏览器中手动登录第一,没有重定向,它仍然无法正常工作。

我失去了一些东西明显在这里吗? 我拉我的头发为什么这不工作,我不能调试它除了尝试各种可能的组合我能想到的(我没有...)。 谢谢你的帮助!

Answer 1:

使用这三个在<intent filter>

<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />


Answer 2:

我以为我会张贴此在这里,因为我花了一些时间寻找到为什么我的意图过滤器不工作。 事实证明,这是一直以来的工作,但比赛是准确的。 因此,如果您注册您的意图http://myexample.com和您单击http://myexample.com/blah将无法正常工作。

添加下面的固定问题:

<data android:pathPattern="/.*" />

因此,意图过滤的样子:

<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:host="example.com" />
            <data android:scheme="https" />
            <data android:pathPattern="/.*" />
</intent-filter>


Answer 3:

@nurieta,你的答案的伎俩对我的感谢!

因为我处理潜在的查询字符串建议的一个字,我处理它通过在名为.java的一些代码,以确定是否只是打开应用程序或向您发送到应用程序的特定位置。 我的应用程序只是运行一个jQuery移动应用的WebView。

    if(getIntent().getData()!=null){//check if intent is not null
        Uri data = getIntent().getData();//set a variable for the Intent
        String scheme = data.getScheme();//get the scheme (http,https)
        String fullPath = data.getEncodedSchemeSpecificPart();//get the full path -scheme - fragments

        combine = scheme+"://"+fullPath; //combine to get a full URI
    }

    String url = null;//declare variable to hold final URL
    if(combine!=null){//if combine variable is not empty then navigate to that full path
        url = combine;
    }
    else{//else open main page
        url = "http://www.example.com";
    }
    webView.load(url);


文章来源: Open Android app from URL using intent-filter not working