Android意图从浏览器启动

Android意图从浏览器启动

问题描述:

此主题已经被覆盖过,但我找不到具体针对我所问的答案。Android意图从浏览器启动

我在哪里:我跟着hackmod的第一条建议在这里:Make a link in the Android browser start up my app?和得到这个与网页中的链接工作。

但是,我无法理解第二个选项(intent uri's)。这里是我得到的:

<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"> 

然而,这似乎并不当我尝试它的工作。

我的测试设备是银河标签2.

任何帮助,将不胜感激。

+0

特别是有人可以向我解释如何构建该意图:#Intent类型的URL,因为它是推荐的方法。 – Chris 2013-03-24 21:08:51

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

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

但是你要注意的是,Android系统将询问用户是否您的应用程序或任何其他浏览器应该启动。

如果你想避免这个实现一个自定义的protcol处理程序。所以只是你的应用程序会听取这个,用户不会得到意向选择器。

尝试添加该数据的意图:

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

有了这个链接上面的代码应该工作:

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

工作。但它提供了选择器。即 - 与浏览器或应用程序打开...我想要做的是没有出现。 – Chris 2013-03-24 09:29:56

+0

我刚刚更新了关于该问题的答案 – rekire 2013-03-24 09:31:36

+0

我试过这个时,我得到了一秒。但是,android不鼓励自定义方案/名称空间。所以我想按照推荐的方式完成这个工作。 – Chris 2013-03-24 21:06:39

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

我也试图以推荐的方式启动应用程序。以下代码适用于我。

AndroidManifest中的<activity>块内的代码YourActivity中的代码。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代码,写意图关于开展具体活动,用行动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 herethis页面上提示。

我需要一个小小的改变abhishek89m'a这个工作的答案。

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

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

p.s.我会将此添加为评论,但我是新用户,并且我没有足够的声望点。