18

我已经研究了大部分自定义 URL 方案问答,但没有找到可能的答案。

我希望通过单击浏览器中的某个 URL(移动设备上的任何 URL)来启动我的应用程序,问题是我给定的 URL 无法修改,因为它也服务于 IOS 应用程序,它看起来像这样:

“myapp:// http ://www.name.com/path/path2/ ”

我不确定如何处理“myapp://http://”并构造一个适当的意图过滤器,我尝试的一切都不起作用。任何帮助将不胜感激,如果我错过了相关答案,请除了我的道歉。

这是我到目前为止所尝试的:

      <activity
        android:name="com.myapp.test.SplashScreen"
        android:exported="true"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <!-- Test for URL scheme -->
        <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="www.name.com"
                android:path="/path/path2/"
                android:scheme="http" />
            <data
                android:host="www.name.com"
                android:path="/path/path2/"
                android:scheme="https" />

            <data android:scheme="myapp" />
        </intent-filter>
        <!-- End Test for URL scheme -->
    </activity>

注意:我尝试使用/不使用 export:true

4

3 回答 3

14

正如 CommonsWare 所说,在我需要创建方案时给定的 URI 不是有效的 URI,因此方案不起作用并且应用程序没有启动。在这个解释之后,服务器端的人被说服将 URI 更改为 myapp://... 它就像魔术一样工作:)。

Activity 现在看起来像这样:

 <activity
    android:name="com.myapp.test.SplashScreen"
    android:exported="true"
    android:label="@string/app_name"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <!-- Test for URL scheme -->
    <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="myapp" />
    </intent-filter>
    <!-- End Test for URL scheme -->
</activity>
于 2013-08-08T12:05:00.873 回答
1

这是对 URI 方案的滥用,并且是无效的。您要传递的 HTTP URL 是一段数据,因此应该在查询字符串中发送。

myapp://somehost/action?url=http%3A%2F%2Fwww.name.com%2Fpath%2Fpath2%2F
于 2014-06-06T09:13:42.600 回答
-1

您需要使用超链接来启动应用程序。例如,您设置了 scheme="yourpackagename" ,您需要设置一个像这样的超链接:yourpackagename://host ,并且您应该在移动浏览器上查看超链接。如果您没有主机标签,只需将其删除。

<!-- Test for URL scheme -->
<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="host" android:scheme="yourpackagename" />
</intent-filter>
<!-- End Test for URL scheme -->

如果您的活动有多个方案,则应使用 2 或更多来指定它

于 2016-03-15T05:58:06.550 回答