Android Uri使用与详解
Android Uri使用与详解
1. Uri使用
使用Uri通常需要有个提供使用的地方比如YourActivity那么需要提供一个intent-filter里面格式大概如下:
<application>
<activity android:name="com.test.YourActivity">
<intent-filter>
<!-- 指定可以响应的动作 -->
<action android:name="android.intent.action.VIEW" />
<!-- 指定可以响应的数据类型 -->
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" /><!--让浏览器拉起-->
<!-- 定义可以处理的URI格式 yourapp://yourhost/yourpath 注意pathPrefix可以写为path-->
<data
android:host="yourhost"
android:pathPrefix="/yourpath"
android:scheme="yourapp" />
</intent-filter>
</activity>
</application>
需要使用的地方(可以是其他App)通过这个uri调用拉起这个页面
Intent intent = new Intent(); // 或者 new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("yourapp://yourhost/yourpath"));
//如果不确定有uri可以通过 intent.resolveActivity(getPackageManager()) != null判断
startActivity(intent); //或ActivityUtils.startActivity(intent)
kotlin实现拉起
var intent = Intent()
intent.data = Uri.parse("yourapp://yourhost/yourpath");
startActivity(intent) // ActivityUtils.startActivity(intent)
通过adb指令拉起
adb shell am start -d yourapp://yourhost/yourpath
#或者加上-a 或加上 -n
adb shell am start -a android.intent.action.VIEW -d yourapp://yourhost/yourpath
adb shell am start -a android.intent.action.VIEW -d yourapp://yourhost/yourpath -n com.test/.YourActivity
2. Uri说明
<data>标签
上面内容核心是<data>标签指定了三个关键部分:
-
android:scheme:这是URI的scheme部分,例如http、https或自定义的如yourapp。 -
android:host:这是URI的主机名部分。 -
android:pathPrefix:这是一个可选的路径前缀,用于匹配URI中的路径。如果你希望匹配完整的路径,则可以使用
android:path属性代替android:pathPrefix
如果你想要支持更复杂的URI匹配,比如带有参数的URI,可以使用正则表达式来匹配路径
<data
android:scheme="yourapp"
android:host="yourhost"
android:pathPattern="/yourpath/[^/]+/[^/]+" />
会匹配形如yourapp://yourhost/yourpath/param1/param2的URI
其他标签
<action> 标签中的<action android:name="android.intent.action.VIEW" />是个通用的匹配
<category>标签的android.intent.category.DEFAULT 是个默认通用匹配;android.intent.category.BROWSABLE是浏览器的匹配
3. 系统里面默认Uri
Android系统中有一些预定义的URI模式和对应的Intent Action,它们通常用于启动系统的某些内置功能或应用。以下是一些常见的系统URI模式及其对应的Activity或功能,以及它们所在的包名和类名(如果适用):
| URI | 描述 | 包名/类名 |
|---|---|---|
content://contacts/people |
显示联系人列表 |
com.android.contacts/ com.android.contacts.activities.ContactsListActivity
|
content://calendar/events |
显示日历事件 |
com.android.calendar/ com.android.calendar.AllInOneActivity
|
content://downloads/public_downloads |
显示下载列表 |
com.android.providers.downloads.ui/ com.android.providers.downloads.ui.DownloadListActivity
|
content://sms/inbox |
显示短信列表 |
com.android.mms/ com.android.mms.ui.ConversationList
|
content://call_log/calls |
显示通话记录 |
com.android.dialer/ com.android.dialer.calllog.CallLogActivity
|
content://browser/bookmarks |
显示书签列表 |
com.android.chrome/ org.chromium.chrome.browser.bookmarks.BookmarkManager
|
content://media/external/audio/albums |
显示音乐专辑列表 |
com.android.music/ com.android.music.MediaFilesActivity
|
content://media/external/audio/artists |
显示音乐艺术家列表 |
com.android.music/ com.android.music.ArtistsActivity
|
content://media/external/audio/playlists |
显示播放列表列表 |
com.android.music/ com.android.music.PlaylistsActivity
|
content://media/external/audio/media |
显示媒体文件列表 |
com.android.music/ com.android.music.MediaFilesActivity
|
content://media/external/images/media |
显示图片列表 |
com.android.gallery3d/ com.android.gallery3d.app.GalleryActivity
|
content://media/external/video/media |
显示视频列表 |
com.android.gallery3d/ com.android.gallery3d.app.VideoListActivity
|
content://com.android.externalstorage.documents/tree/primary%3A |
显示外部存储文件管理器 |
com.google.android.apps.files/ com.google.android.apps.nbu.files.app.ui.FileListActivity
|
请注意,这些目标Activity和包名可能因不同的Android版本和设备制造商而有所不同。例如,一些设备可能使用不同的应用来处理这些内容,如联系人管理、日历、文件管理等。此外,某些系统组件可能不是以Activity的形式直接暴露给用户,而是作为服务或内容提供者运行。