s-h*_*ter 4 android uri deep-linking
例如,有一个uri 示例:// activityone?foo = bar,它可以打开一个应用程序并通过此adb命令启动其中一个活动
adb shell am start -W -a android.intent.action.VIEW -d "example://activityone?foo=bar" com.example.deeplinking
Run Code Online (Sandbox Code Playgroud)
有没有其他方法通过这个uri启动Android应用程序(例如:// activityone?foo = bar)?如何将这个uri放入电子邮件中,点击它后,它会启动应用程序?
首先,您应该阅读以下文档:Intents和Intent Filters.特别是"接受隐含意图"一节.
正如其他人所说,使用自定义方案存在问题.
因此,您应该使用针对主机的intent过滤器在Manifest中定义一个活动,并使用真实的方案.请参阅Intent&Intent Filters文档的"Action Test","Category Test"和"Data Test"部分,了解如何针对您的特定用例配置它.
<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>
Run Code Online (Sandbox Code Playgroud)
然后,您将能够使用如下链接.
http://example.com/activityone?foo=bar
Run Code Online (Sandbox Code Playgroud)
由于这是一个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");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您在意图过滤器中使用自定义方案,那么您(很可能)将是唯一注册处理该意图的应用程序,用户将不必选择您的应用程序.但是,在电子邮件中包含带有自定义方案的链接会更加困难.大多数电子邮件客户端都不会识别任何自定义方案作为链接,并且不会被点击.
| 归档时间: |
|
| 查看次数: |
5818 次 |
| 最近记录: |