例如,有一个uri示例:// activityone?foo = bar,它可以打开一个应用程序并通过此adb命令启动其中一个活动
adb shell am start -W -a android.intent.action.VIEW -d "example://activityone?foo=bar" com.example.deeplinking
有没有其他方法通过这个uri启动Android应用程序(例如:// activityone?foo = bar)?如何将此uri放入电子邮件中,单击它时,它将启动应用程序?
首先,您应该阅读以下文档:Intents and Intent Filters。特别是“接受隐含意图”一节。
正如其他人所说,使用自定义方案存在问题。
因此,您应该使用针对主机的intent过滤器在Manifest中定义一个活动,并使用真实的方案。请参阅Intent & Intent Filters文档的“操作测试”,“类别测试”和“数据测试”部分,以了解如何针对您的特定用例配置此部分。
<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");
}
}
如果您在意图过滤器中使用自定义方案,那么您(很可能)将是唯一注册处理该意图的应用程序,用户将不必选择您的应用程序。但是,在电子邮件中包含带有自定义方案的链接会更加困难。大多数电子邮件客户端都不会识别任何自定义方案作为链接,并且不会被点击。
非标准URL方案(这是example://
所用的)并不总是被视为链接。您最好的选择是以某种方式将该URL包装在应用程序可以识别的链接(http://
或https://
)中,然后通常通过某种自动重定向来处理打开您的应用程序。这就是我们处理事情的方式,以确保无论链接在何处打开,应用程序始终都会启动。