从浏览器启动Android Intent

4
这个话题以前已经讨论过了,但我找不到特定于我问题的答案。 我的情况:我遵循了hackmod在这里给出的第一个建议:如何使Android浏览器中的链接启动我的应用程序?并通过网页上的链接使其工作。
然而,我在理解第二个选项(意图URI)方面遇到了麻烦。以下是我的代码:
    <activity android:name="com.myapps.tests.Layout2"
        android:label="Auth Complete"
        >
        <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="mydomain.com"
                android:path="/launch" />
        </intent-filter>
    </activity>

现在,我可以进入“mydomain.com/launch”,然后它会启动我的活动。这一切都很顺利,但是我得到了选择器。我想要的是它只是启动我的活动而不给出选项。
根据我引用的帖子中的解释,似乎这就是意图URI所用之处,但是我找不到一个简单明了的例子。为了启动此操作而无需选择器,我的网页上的链接应该是什么?
我已经看到了几个类似于以下内容的示例:
<a href="intent:#Intent;action=com.myapp.android.MY_ACTION;end">

然而,当我尝试时似乎并不起作用。 我的测试设备是 Galaxy Tab 2。 非常感谢任何帮助。

有没有人可以具体解释一下如何构建这个意图:#Intent type URL,因为这是推荐的方法。 - Chris
4个回答

8
我也尝试以推荐的方式启动应用程序。以下代码适用于我。
在AndroidManifest.xml中块中的内部代码:
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
    <action android:name="your.activity.namespace.CUSTOMACTION" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
</intent-filter>

在活动的onCreate()方法中编写代码:

Intent intent = getIntent();
if(intent != null && intent.getAction() == "your.activity.namespace.CUSTOMACTION") {
    extraValue = intent.getStringExtra("extraValueName");
    Log.e("AwseomeApp", "Extra value Recieved from intent : " + extraValue);
}

对于HTML中的代码,编写一个意图来启动特定的Activity,使用操作your.activity.namespace.CUSTOMACTION,以及您的应用程序包名称your.activity.namespace。您还可以在意图中添加一些额外的内容。例如:intent.putExtra("extraValueName", "WOW")。然后通过在日志中打印intent.toUri(Intent.URI_INTENT_SCHEME)的值来获取所需的URL。它应该看起来像:

intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.activity.YourActivity;S.extraValueName=WOW;end

因此,您的HTML代码应如下所示:
<a href="intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.activity.YourActivity;S.extraValueName=WOW;end">
    Launch App
</a>

这是根据 @hackbod 在 这里 和来自 developers.google.com 的 此页面 的建议。


在这个意图链接中,是否可以指定启动标志? - Edward Gargan

7

根据您的意图筛选器,此链接应该有效:

<a href="http://mydomain.com/launch">start my app</a>

但是请注意,安卓系统会询问用户是否启动您的应用程序或其他浏览器。

如果您想避免这种情况,可以实现一个自定义协议处理程序。这样,只有您的应用程序会监听,用户就不会得到意图选择器。

尝试添加此数据意图:

<data android:scheme="mycoolapp" android:host="launch" />

使用上述代码,此链接应该可以正常工作:
<a href="mycoolapp://launch">start my app</a>

可以工作。但它提供了选择器。即 - 用浏览器或应用程序打开...我想做的是不让它出现。 - Chris
我有时间会试一下这个。然而,Android 不鼓励使用自定义的 scheme/命名空间。因此,我想按照推荐的方式完成这个任务。 - Chris
这是最好的答案,它有效。虽然我仍然想知道如何使用意图URI来完成它。但是嘿,现在这个方法可行 :-) - Chris

5

我需要对abhishek89m的回答进行微小更改,以使其起作用。

<a href="intent:#Intent;action=your.example.namespace.CUSTOMACTION;package=your.example.namespace;component=your.example.namespace/.YourActivity;S.extraValueName=WOW;end">
    Launch App
</a>

我在组件名称的斜杠后面移除了“.activity”。另外,如果你不想让应用程序选择器出现,那么自定义操作可能是解决此问题的最佳答案。
附注:我会将其添加为评论,但我是新用户,没有足够的声望点数。

2
<a href="your.app.scheme://other/parameters/here">

您的浏览器上的此链接将使用特定模式启动应用程序,类似于您的意图。
<intent-filter>
<data android:scheme="your.app.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接