首页 > 解决方案 > 选择“复制”时,未在 Android 10 中接收来自意图发送者的广播

问题描述

当用户完成共享操作(无论是将 url 复制到剪贴板还是选择任何应用程序)时,我正在尝试从 IntentSender 获取 BroadcastReceiver 中的回调

我已按照此处的 android 文档了解如何检测用户何时在 Android Sharesheet 中完成共享。它适用于 Android 10 以下的所有 Android,但不适用于 Android 10。在 Android 10 中,当在选择器中选择“复制”时,不会调用我的广播接收器(但如果用户选择其他应用程序,它仍然可以正常工作)。

有谁知道为什么或面临同样的问题?我不确定该问题是否特定于某些设备。我已经使用 Pixel2 和华为 P30(均使用 Android 10)对此进行了测试。

我已经像这样创建了我的 BroadcastReceiver:

class MyBroadCastReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        //receiving broadcast here
    }
}

我还在清单文件中声明了我的广播接收器:

<receiver
    android:name=".MyBroadCastReceiver"
    android:exported="false" />

这是调用 CreateChooser 对话框的代码:

val shareIntent = Intent(Intent.ACTION_SEND)
shareIntent.type = "text/plain"
shareIntent.putExtra(Intent.EXTRA_TEXT, shareUrl)

val receiver = Intent(this, MyBroadCastReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this, 0, receiver, PendingIntent.FLAG_UPDATE_CURRENT)
val intent = Intent.createChooser(shareIntent, "Share url", pendingIntent.intentSender)
startActivity(intent)

截图: https ://i.ibb.co/477JMPb/Screen-Shot-2563-04-12-at-09-01-10.png

谢谢。

标签: androidkotlinandroid-10.0

解决方案


“复制”可能不是应用程序,而是共享表本身的一部分,将项目复制到剪贴板。我对他们没有在那种情况下调用你IntentSender的情况并不感到非常惊讶,因为没有报告用户选择的组件。这类似于用户通过 BACK 按钮关闭共享表。正如文档所述,“不应假设此回调始终会发生而编写应用程序。”


推荐阅读