之前已经讨论过这个主题,但我无法找到特定于我所要求的答案。
我在哪里:我在这里跟随了hackmod的第一条建议:Make a link in the Android browser start up my app?并使用网页中的链接进行操作。
但是,我无法理解第二个选项(意图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>
现在,我可以去&#34; mydomain.com/launch"它启动了我的活动。这一切都运作良好,除了我得到选择器。我想要的是它只是在没有提供选项的情况下启动我的活动。
从我引用的帖子中的解释看起来就像是uris的意图,但我无法找到一个直截了当的例子。我的网页中的链接应该是什么样的,以便在没有选择器的情况下启动它?
我看过几个看起来像这样的例子:
<a href="intent:#Intent;action=com.myapp.android.MY_ACTION;end">
然而,当我尝试它时似乎不起作用。
我的测试设备是Galaxy Tab 2。
任何帮助将不胜感激。
答案 0 :(得分:8)
我还试图以推荐的方式启动应用程序。以下代码对我有用。
AndroidManifest.xml中<activity>
YourActivity
块内的代码:
<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>
答案 1 :(得分:6)
根据您的意图过滤器,此链接应该有效:
<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>
答案 2 :(得分:4)
我需要对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”。
我想补充一点,如果您不希望应用选择器显示,那么自定义操作可能是此问题的最佳答案。
P.S。我会将此添加为评论,但我是新用户,而且我没有足够的声誉点。
答案 3 :(得分: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>