kotlin 选择目标后的Android共享表下载文件

iszxjhcz  于 2022-11-16  发布在  Kotlin
关注(0)|答案(1)|浏览(180)

我有下面的代码使用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不同,所以它必须以某种方式定制。

dddzy1tm

dddzy1tm1#

你的第一张截图显示了一个由TikTok创建和渲染的底部表单,由TikTok开发者编写。该表单中的几乎所有内容都代表了TikTok服务中的私人操作。如果你想渲染自己的底部表单,并在其中包含一些第三方应用的按钮,你可以use queryIntentActivities() on PackageManager to find who can handle some Intent,比如as ACTION_SEND。注意the preferred method signature for queryIntentActivities() is a bit different on API Level 33。并注意在较新版本的Android上,清单中需要一个<queries>元素。
我猜你的第二个截图是一个ACTION_VIEW附近的选择器,你可以通过查看当工作表显示时以及当所选Activity开始时Logcat中报告的内容来确认这一点。
第三个屏幕截图显示了一个典型的Android平台“共享表”,用于ACTION_SEND
你的第四张截图显示了同样的“分享表”。我怀疑操作菜单来自Instagram开发者发布的sharing shortcuts

相关问题