android - 选择“复制”时,未在 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
谢谢。
解决方案
“复制”可能不是应用程序,而是共享表本身的一部分,将项目复制到剪贴板。我对他们没有在那种情况下调用你IntentSender
的情况并不感到非常惊讶,因为没有报告用户选择的组件。这类似于用户通过 BACK 按钮关闭共享表。正如文档所述,“不应假设此回调始终会发生而编写应用程序。”
推荐阅读
- excel - 查询表在尚未完成时打开 Excel 文件(VB.NET)
- wordpress - 通过 URL 添加 WooCommerce 优惠券
- amazon-ec2 - Ansible -- 在动态清单中使用 Ec2 标签中的条件
- javascript - 匹配字符串,除非以字符开头和结尾
- javascript - 如何使用 puppeteer 自动化 Amazon Connect CCP 登录?
- angular - 如何调用多个 URL 并只处理使用 RxJS 返回的第一个值?
- hadoop - 如何在 Hue Cloudera 上的 Hive 中获取下 n 行
- powershell - 如何在数组上使用带有 IF -contains 的通配符?
- java - 将 Docker 用于 Spring Boot REST 应用程序
- javascript - 为什么我会收到 Invariant Violation: Invariant Violation: Maximum update depth exceeded。在 setState 上?