我有下面的代码使用Android共享表共享视频文件(.mp4)。代码工作正常,视频确实得到共享,但我有几个问题不符合我的要求。
我希望有人能帮助我或给我指出一个方向来解决我的问题。
1.要使此代码工作,必须首先下载文件。这是不可取的,因为用户必须等待下载,然后弹出共享表。这会导致两个问题。a)用户必须等待DL完成,b)如果他们取消下载,则下载是不必要的。
- 问题1:如何打开共享表,然后在用户选择目的地后下载文件?这似乎是TikTok的工作原理,选择目的地,下载过程中的进度,使用对话框完成操作。
1.例如,如果用户选择Instagram,则会出现第二个对话框,显示“使用以下工具完成操作”
- 问题2:如何自定义“完成操作时使用”对话框?
我看了这些文章和其他人:
我们的网站上有一https://developer.android.com/training/sharing/send#send-binary-content。
但这些似乎都没有展示如何像TikTok和其他公司那样执行共享功能。
我的共享代码:
if (status == DownloadManager.STATUS_SUCCESSFUL) {
val fullPath: String?
val source: File?
val columnLocalURI = c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)
fullPath = c.getString(if (columnLocalURI > 0) columnLocalURI else 0)
source = File(Uri.parse(fullPath).path ?: "")
val share = source.toString()
val subject = context.getString(R.string.my_video)
val filename = share.substring(startIndex = share.lastIndexOf("/") + 1, endIndex = share.lastIndexOf("."))
MediaScannerConnection.scanFile(context, arrayOf(share), null) { _, uri ->
val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.type = "video/*"
shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject)
shareIntent.putExtra(Intent.EXTRA_TITLE, filename)
shareIntent.putExtra(Intent.EXTRA_STREAM, uri)
shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)
val pi = PendingIntent.getBroadcast(
context,
1001,
Intent(context, MyBroadcastReceiver::class.java),
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
ContextCompat.startActivity(
context,
Intent.createChooser(shareIntent, "ShareWith", pi.intentSender),
null
)
showBusy.value = false
}
以下是一些屏幕截图示例:
TikTok选择目的地(Instagram)
TikTok文件下载后会显示此信息(因应用程序而异,请参见其他屏幕截图)
使用另一个应用程序时,点击应用程序共享按钮下载文件,然后出现共享表。点击Instagram目标
然后在Instagram被选中后,这个出现了。注意它与TikTok不同,所以它必须以某种方式定制。
1条答案
按热度按时间dddzy1tm1#
你的第一张截图显示了一个由TikTok创建和渲染的底部表单,由TikTok开发者编写。该表单中的几乎所有内容都代表了TikTok服务中的私人操作。如果你想渲染自己的底部表单,并在其中包含一些第三方应用的按钮,你可以use
queryIntentActivities()
onPackageManager
to find who can handle someIntent
,比如asACTION_SEND
。注意the preferred method signature forqueryIntentActivities()
is a bit different on API Level 33。并注意在较新版本的Android上,清单中需要一个<queries>
元素。我猜你的第二个截图是一个
ACTION_VIEW
附近的选择器,你可以通过查看当工作表显示时以及当所选Activity开始时Logcat中报告的内容来确认这一点。第三个屏幕截图显示了一个典型的Android平台“共享表”,用于
ACTION_SEND
。你的第四张截图显示了同样的“分享表”。我怀疑操作菜单来自Instagram开发者发布的sharing shortcuts。