使用 Sharesheet分享Android 应用链接

使用 Sharesheet分享Android 应用链接_第1张图片

使用 Sharesheet分享Android 应用链接

使用 Sharesheet 进行丰富的链接共享

Android App Links 允许您的应用程序打开网页链接,而不是使用网络浏览器。处理这些深层链接已在我们的《深层链接入门课程》中介绍过。除了能够打开深层链接外,您的应用程序还应能够创建和共享指向特定内容的深层链接。

在安卓中,分享应用内的链接内容是一项重要的操作。链接分享使您的应用程序及其用户能够进行协作、交流、社交网络等活动。所有这些活动都能增加用户对应用程序的参与度,并充分发挥您的应用程序的深层链接支持。一个很好的用于分享链接内容的工具是Android Sharesheet

https://developer.android.com/training/sharing/send

本文将展示您为何应该使用Sharesheet,并演示如何在链接内容中使用它。让我们开始吧!
首先,什么是Sharesheet?安卓为选择用户或应用程序直接发送内容提供了一个应用内界面。这个界面被称为Sharesheet,在调用具有 ACTION_SEND 操作的意图的Intent.createChooser时显示。Sharesheet为与其他应用程序共享数据提供了一种有效的方式,而无需使用显式意图。

下面的示例将调用Sharesheet,向用户展示相关目标以供分享。每个用户都将拥有适合他们已安装的应用程序和联系人的表单。

val sendIntent: Intent = Intent().apply {
    action = Intent.ACTION_SEND
    putExtra(Intent.EXTRA_TEXT, "This is my text to send.")
    type = "text/plain"
}

val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)

使用 Sharesheet分享Android 应用链接_第2张图片
这是一个基本的例子,我们更有可能分享比纯文本更有趣的内容。如果您的应用程序支持Android App链接,它可以直接分享到应用程序内部内容的链接。让我们看一个示例链接:“https://example.com/specials/spaghetti"。这个链接对应用程序的用户来说很明确,它是一个意大利面特价,我们可能无需修改分享表单。

然而,有时链接的目标可能不够清晰。例如,一个指向Google Doc的链接通常看起来像这样:https://docs.google.com/document/d/1TejHHDrz…NotARealLink。仅凭链接,用户可能不知道他们实际上正在分享什么信息。在这种情况下,我们应考虑添加一个更丰富的预览。

巧合的是,这也是来自Android文档的指导 https://developer.android.com/training/sharing/send。

Consider sharing a complicated URL like: 
https://www.google.com/search?ei=2rRVXcLkJajM0PEPoLy7oA4. 
A richer preview can reassure your users what is being shared.

对于我们的使用,更丰富的预览包括额外的标题文本和图像缩略图。我们可以通过将描述添加到Intent.EXTRA_TITLE来设置标题文本。要在Sharesheet中嵌入图像,我们将Intent的clipData参数设置为通过文件提供程序提供的内容URI。本文的其余部分将指导您通过从任意URL嵌入图像来提供在Sharesheet中更丰富的共享内容预览。

首先: 让我们在我们的AndroidManifest.xml文件中创建一个文件提供程序。

<provider
   android:name=".AndroidFoodFileProvider"
   android:authorities="com.example.fileprovider"
   android:exported="false"
   android:grantUriPermissions="true">
   <meta-data
       android:name="android.support.FILE_PROVIDER_PATHS"
       android:resource="@xml/filepaths" />
</provider>

现在,我们需要将filepaths.xml文件添加到我们的XML资源目录中。对于我们的示例,我们将从根目录或缓存目录提供图像。这个filepaths.xml文件将把我们的缓存根目录链接到内容URI上的/images

<paths xmlns:android="http://schemas.android.com/apk/res/android">
   <cache-path name="images" path="/" />
</paths>

尽管不是严格必要的,但根据FileProvider API文档的要求,我们应该为我们的应用程序创建一个存根实现。引用:“直接使用FileProvider而不是扩展它是可能的。然而,在某些设备上这种方式并不可靠,会导致崩溃。”

import androidx.core.content.FileProvider

class AndroidFoodFileProvider : FileProvider() {
}

那么这实际上做了什么?我们声明了一个文件提供程序,可以为我们缓存目录中的图像创建内容URI。我们可以调用FileProvider.getUriForFile来创建一个URI,供共享表格用于显示图像。

import androidx.core.content.FileProvider

class AndroidFoodFileProvider : FileProvider() {
}

拥有图像的链接、标题和内容URI后,我们现在可以准备创建Intent

val sendIntent: Intent = Intent().apply {
       val destination = "https://example.com/specials/spaghetti"
       putExtra(Intent.EXTRA_TITLE, "Link Description")
       val imageUri = FileProvider.getUriForFile(context, "com.example.fileprovider", File(context.cacheDir, "spaghetti.jpg"))
       clipData = ClipData.newUri(context.contentResolver, "", imageUri)
       flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
       putExtra(Intent.EXTRA_TEXT, destination)
   }

val shareIntent = Intent.createChooser(sendIntent, null)
context.startActivity(shareIntent)

下面是很赞的分享链接效果
使用 Sharesheet分享Android 应用链接_第3张图片

参考链接

https://medium.com/androiddevelopers/the-deep-links-crash-course-part-1-introduction-to-deep-links-2189e509e269
https://developer.android.com/reference/androidx/core/content/FileProvider

你可能感兴趣的:(Android新特性,Android技术汇总,android,开发语言,java)