例如,有一个uri example://activityone?foo=bar可以打开一个应用程序并通过这个adb命令启动其中一个活动。
adb shell am start -W -a android.intent.action.VIEW -d "example://activityone?foo=bar" com.example.deeplinking有没有其他方法通过这个uri (example://activityone?foo=bar)?启动android应用程序?我如何将这个uri放在电子邮件中,当它被点击时,它将启动应用程序?
发布于 2016-07-24 18:38:12
首先,您应该阅读这方面的文档:意图和意图过滤器。特别是“接收隐含意图”一节。
正如其他人所指出的,为此使用自定义方案是有问题的。
因此,您应该在Manifest中定义一个活动,为您的主机提供一个意图筛选器,并使用一个真正的方案。请参阅意图和意图过滤器文档的“操作测试”、“类别测试”和“数据测试”部分,以了解如何为特定的用例配置这些测试。
<activity android:name="com.example.app.ActivityOne">
<intent-filter>
<data android:scheme="http"/>
<data android:host="example.com"/>
<data android:path="/activityone"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>然后您将能够使用如下所示的链接。
http://example.com/activityone?foo=bar由于这是一个http链接,系统将要求用户选择使用哪个应用程序打开它(您的应用程序或他们喜欢的浏览器)。如果他们选择你的应用程序,它将启动ActivityOne,它可以像这样获取查询数据。
public class ActivityOne extends Activity {
@Override
public void onResume() {
super.onResume();
Intent intent = getIntent();
Uri uri = intent.getData();
String foo = uri.getQueryParameter("foo");
}
}如果您在意向筛选器中使用自定义方案,那么您将(很可能)是唯一注册处理该意图的应用程序,用户将不必选择您的应用程序。但是,在电子邮件中包含带有自定义方案的链接将更加困难。大多数电子邮件客户端不会识别任何与自定义方案作为链接,它将是不可点击的。
发布于 2016-07-13 03:40:42
非标准的URL方案(也就是example:// )并不总是被视为链接。您最好的选择是将该URL以某种方式封装在应用程序可以识别的链接中(http://或https://),然后处理稍后打开应用程序的问题,通常是某种自动重定向。这就是我们如何处理事情,以确保应用程序总是启动,无论链接是在哪里打开。
https://stackoverflow.com/questions/38339032
复制相似问题