【发布时间】:2015-07-22 20:30:30
【问题描述】:
我想制作一个 android 应用程序,它可以用作打开某种链接的默认应用程序(例如,如果我点击 http://facebook.com,它会显示建议的应用程序来打开该链接、浏览器或 Facebook 的应用程序)
【问题讨论】:
标签: android
我想制作一个 android 应用程序,它可以用作打开某种链接的默认应用程序(例如,如果我点击 http://facebook.com,它会显示建议的应用程序来打开该链接、浏览器或 Facebook 的应用程序)
【问题讨论】:
标签: android
这些被称为Implicit Intents
假设您想在网络链接上打开您的应用,点击链接"myApp://someapp"
然后在您的应用清单中
<activity android:name="MyActivity">
<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="myApp" android:host="path" />
</intent-filter>
</activity>
当你点击上面的链接时,它会提示你打开你的应用程序。
【讨论】:
如果您想开发允许其他应用程序使用您的应用程序完成操作的应用程序,例如在您想要处理任何 url 用户点击的情况下,您的应用程序将被列出以完成操作。您必须创建将处理深度链接的活动。为此,您需要在您的 android 清单中为您的句柄活动添加一些属性。见下例
以下 XML sn-p 显示了如何在清单中指定意图过滤器以进行深度链接。以“http”开头的 URI
<activity
android:name="com.example.android.BrowseActivity"
>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
<!-- Accepts URIs that begin with custom url "example://gizmos” -->
<data android:scheme="com.example.android"
android:host="gizmos" />
</intent-filter>
</activity>
一旦您将带有活动内容 URI 的 Intent 过滤器添加到您的应用清单中,Android 就可以在运行时将任何具有匹配 URI 的 Intent 路由到您的应用。
一旦系统通过 Intent 过滤器启动您的 Activity(BrowseActivity),您就可以使用 Intent 提供的数据来确定您需要渲染的内容。调用 getData() 和 getAction() 方法来检索与传入 Intent 关联的数据和操作。您可以在 Activity 的生命周期中随时调用这些方法,但通常应该在早期回调(例如 onCreate() 或 onStart() )期间这样做。
这是一个 sn-p,它显示了如何从 BrowseActivity 中的 Intent 中检索数据:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
如果您在这一点上需要更多帮助,请告诉我。
【讨论】: