【问题标题】:Android Intent launch from browser从浏览器启动 Android Intent
【发布时间】:2013-03-24 09:25:06
【问题描述】:

这个主题之前已经讨论过,但我找不到特定于我所问问题的答案。

我在哪里:我在这里遵循了 hackmod 的第一条建议:Make a link in the Android browser start up my app?,并通过网页中的链接实现了这一点。

但是,我无法理解第二个选项(意图 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”并启动我的活动。这一切都很好,除了我得到了选择器。我想要的是让它在不提供选项的情况下启动我的活动。

从我引用的帖子中的解释看来,这就是意图 uris 的用途,但我找不到一个简单的例子。我的网页中的链接应该是什么样子才能在没有选择器的情况下启动它?

我见过几个类似这样的例子:

<a href="intent:#Intent;action=com.myapp.android.MY_ACTION;end">

但是,当我尝试时,这似乎不起作用。

我的测试设备是 Galaxy Tab 2。

任何帮助将不胜感激。

【问题讨论】:

  • 具体来说,有人可以向我解释如何构造该意图:#Intent 类型 URL,因为它是推荐的方法。

标签: android intentfilter


【解决方案1】:

我还尝试以推荐的方式启动该应用程序。以下代码对我有用。

AndroidManifest.xml 中YourActivity 的&lt;activity&gt; 块内的代码:

<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 在 developer.google.com 的 here 和 this 页面中的建议一致。

【讨论】:

  • 是否可以在此意图链接中指定启动标志?
【解决方案2】:

根据您的意图过滤器,此链接应该可以工作:

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

但您应该注意,android 系统会询问用户是否应该启动您的应用或任何其他浏览器。

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

尝试添加此数据意图:

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

使用上面的代码,此链接应该可以工作:

<a href="mycoolapp://launch">start my app</a>

【讨论】:

  • 行得通。但它提供了选择器。即 - 使用浏览器或应用程序打开......我想要做的就是不显示。
  • 等我一会就试试这个。但是,android 不鼓励自定义方案/命名空间。所以我想按照推荐的方式完成这项工作。
  • 这是最好的答案,而且有效。我仍然想知道如何使用意图 uris 来做到这一点。但是,嘿,这现在有效:-)
【解决方案3】:

我需要对 abhishek89m'a answer 进行一些小改动才能完成这项工作。

<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”。

我想补充一点,如果您不想显示应用选择器,那么自定义操作可能是解决此问题的最佳方法。

附言我会将此添加为评论,但我是新用户,我没有足够的声望点。

【讨论】:

    【解决方案4】:
    <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>
    

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2011-08-09
      • 2011-06-05
      相关资源
      最近更新 更多