使用 Sharesheet分享Android 应用链接

news2024/11/26 18:52:52

使用 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)


这是一个基本的例子,我们更有可能分享比纯文本更有趣的内容。如果您的应用程序支持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 with title&image

参考链接

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/649678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《Lua程序设计》--学习8

编译&#xff0c;执行和错误 编译 可以认为dofile函数就是这样&#xff1a; loadfile函数从文件中加载Lua代码段&#xff0c;但它不会运行代码&#xff0c;只是编译代码&#xff0c;然乎将编译后的代码段作为一个函数返回 函数loadfile更灵活。在发生错误的情况中&#xff0…

100种思维模型之排列组合思维模型-78

说到模型&#xff0c;一般人会觉得特别难&#xff0c;会觉得是学霸级别的人才能做出来的高科技。 然实际上并不是&#xff01; 西方人常说Model&#xff0c;模型在西方人眼里是一个非常常见的词。 查理芒格&#xff0c;多元思维模型倡导者和践行者&#xff0c;他说任何能够帮助…

Elasticsearch:实用 BM25 - 第 1 部分:分片如何影响 Elasticsearch 中的相关性评分

作者&#xff1a;Shane Connelly 背景 在 Elasticsearch 5.0 中&#xff0c;我们切换到 Okapi BM25 作为我们的默认相似度算法&#xff0c;这是用于对与查询相关的结果进行评分的算法。 在本博客中&#xff0c;我不会过多地介绍 BM25 与替代措施&#xff0c;但如果你想了解 B…

3天没睡吐血整理,性能测试瓶颈问题+分析,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 如何定位性能瓶颈…

白鲸优化算法优化VMD参数,并提取特征向量,以西储大学数据为例,附MATLAB代码

大家看到这篇文章&#xff0c;肯定会有疑问&#xff0c;难道本篇文章和上一篇文章不是一个意思嘛&#xff0c;这是来凑数的嘛……其实不然&#xff0c;如果各位读者仔细看&#xff0c;就会发现本篇文章和上一篇文章大有不同&#xff0c;这篇文章也是我一直以来想在上一篇文章基…

TALL论文笔记

TALL论文笔记 0.论文来源1摘要2引言3模型结构3.1视觉编码器3.2句子编码器3.3模态融合3.4时间定位回归网络 4训练4.1损失函数4.2采集训练样本 5 评估5.1数据集5.2评价指标5.3实验结果 0.论文来源 2017 TALL 1摘要 问题描述&#xff1a;通过语言来对未修剪视频中动作的时间定位…

【JVM】日志分析工具--gcviewer的使用

文章目录 gcviewer是什么&#xff1f;gcviewer的使用最后 gcviewer是什么&#xff1f; GCViewer是一个小工具&#xff0c;可以可视化Sun / Oracle、IBM、HP和BEA Java虚拟机生成的详细GC输出。它是在GNU LGPL下发布的自由软件。—官网翻译 gcviewer的使用 文章使用的配置 工具…

Dubbo面试题

Dubbo 基础知识为什么要用 Dubbo&#xff1f;Dubbo 是什么&#xff1f;Dubbo 的使用场景有哪些&#xff1f;Dubbo 核心功能有哪些&#xff1f; 架构设计Dubbo 服务器注册与发现的流程&#xff1f;Dubbo 的整体架构设计有哪些分层?Dubbo Monitor 实现原理&#xff1f; 分布式框…

一键部署通义千问预体验丨阿里云云原生 5 月动态

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 本栏目每月更新。 01 趋势热点 &#x1f947; Apache RocketMQ 入选可信开…

如何创建 GitHub 配置文件自述文件

背景 最近再搞GitHub Actions的东西。突然看到了 github推出的这项服务。就搞了一下。主要目的&#xff1a;装扮自己的GitHub主页。俗称装逼&#xff08;小声&#xff09; 步骤 创建一个与 GitHub 用户名同名&#xff08;包括大小写&#xff09;的新仓库。比如我的就是 创建…

Docker学习(一)

第1章 docker简介 1.1 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目&#xff0c;它是基于 dotCloud 公司多年云服务技术的一次革新&#xff0c;并于 2013 年 3 月以 Apache 2.0 授权协议开源&#xff0c;主要项目代码在 …

ethers.js常用的操作方法

安装&#xff1a;npm install --save5.7.2 ethers --ethers比web3来说使用方式相对简洁很多&#xff0c;主要就操作三个大对象 1. Provider&#xff0c;&#xff08;提供者&#xff09;是一个用于连接以太坊网络的抽象类&#xff0c;提供了只读形式来访问区块链网络和获取链上…

8年测试老鸟总结,性能测试案例经验,高级测试之道...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能基准测试&…

测试员最令程序员讨厌的十种行为,你中了几条?

在做软件测试这些年&#xff0c;总会有程序员给我吐槽某某测试员令其发指的一些事。这里我总结了一些&#xff0c;看你有没有中呢&#xff1f; 1、爱较真&#xff0c;只要逮着问题&#xff0c;哪怕是技术文档中的错别字也要提到bug管理工具中&#xff0c;更让程序员绝望的是&a…

测试员与程序员那些烂在心里的共同秘密

1、生产环境出现了一个较严重的bug&#xff0c;赶在用户没发现的情况下&#xff0c;测试员与程序员悄悄地改了&#xff0c;并跳过了N个步骤做了次发布。 2、程序员告诉测试员&#xff0c;新来的技术leader每天做得最多的事就是copy他们的代码&#xff0c;一份不够还再来一份&a…

VR全景智慧园区,沉浸式数字化体验,720度全视角展示

导语&#xff1a; 随着科技的迅猛发展&#xff0c;虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;全景技术已经成为了人们趋之若鹜的新兴领域。 而城市园区作为现代社会的重要组成部分&#xff0c;也正在积极寻求创新的方式来吸引更多的人流和投资。 一&…

【QQ界面展示-设置文本框的leftView属性 Objective-C语言】

一、这个搞定以后,接下来,就实现另外一个效果, 1.注意,我们上午把这个文本框,是不是本来说文本框,直接放这儿就OK了吧,但是,我们上午为了能让这个文本框兼容iOS6,是不是把这个文本框的边框,设为None,然后呢,边框设为nil边框,是不是设了一个背景图啊, 但我们做完…

Ansys Zemax | 如何在OpticStudio中建模和设计真实波片

本文介绍了如何在 OpticStudio 中建模和设计真实的单色和消色差波片。它将演示如何使用双折射材料&#xff0c;通过构建评价函数来计算相位延迟&#xff0c;并使用 Universal Plot 将相位延迟与波片厚度的关系可视化。&#xff08;联系我们获取文章附件&#xff09; 双折射材料…

搜索树的逻辑以及代码实现-重点删除结点的逻辑

目录 搜索二叉树概念 代码 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除&#xff08;非常重要&#xff09; a、b、c情况&#xff1a;删除14 d情况 打印结点中序遍历 整体代码&#xff1a;&#xff08;有R开头的就是递归写法&#xff0c;逻辑一样&#xff09; 搜…

合宙Air724UG Cat.1模块硬件设计指南--UART接口

UART接口 简介 串行接口简称串口&#xff0c;同时串口又分为同步收发串口与异步收发串口两种方式&#xff0c;而CAT1模块支持的串口为异步收发方式&#xff0c;简称UART口。串口作为设备的外部接口&#xff0c;是调试开发的一种重要的开发手段。 特性 UART1串口 包括数据线TXD…