如何以编程方式关闭 Android 中的共享系统对话框?
Posted
技术标签:
【中文标题】如何以编程方式关闭 Android 中的共享系统对话框?【英文标题】:How to dismiss share system dialog in Android programatically? 【发布时间】:2018-09-06 17:31:26 【问题描述】:我有一个共享底部表,我想以编程方式手动关闭此底部表。我怎样才能做到这一点?它最初是使用 Intent.createChooser 调用的。
【问题讨论】:
不确定,可以试试this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
@Pavneet_Singh 除非您对系统具有 root 或签名级别访问权限,否则您无法调度 KeyEvents。
developer.android.com/reference/android/app/… ,也许你能提供任何链接来验证这一点
@Pavneet_Singh Activity#dispatchKeyEvent() 不调用该事件。它仅用于 Activity 可以接收 KeyEvents。
是的,如果我们能以某种方式触发后退键事件,那么它会起作用,尽管我知道你有一个观点
【参考方案1】:
我认为您不能直接执行此操作。当你运行 Intent.createChooser()
返回的 Intent 时,它会启动 ChooserActivity。
如果您有签名级别的系统访问权限,则可以使用 Instrumentation#sendKeySync()
,如果您有 root 权限,则可以使用 input keyevent 4
,但对于普通受众应用程序来说,这两种方法都不可能。
ChooserActivity 在清单中定义了一个 IntentFilter 来侦听 Intent.ACTION_CHOOSER
,但它不侦听任何其他内容,包括 Intent.ACTION_CLOSE_SYSTEM_DIALOGS
,这通常是执行此操作的方式。
您可以使用AccessibilityService
,并从中发送GLOBAL_ACTION_BACK
操作,但这对于您正在做的事情可能有点繁重。
【讨论】:
感谢您的回复。您还能想到其他解决方法吗? 另一种仅限 root 的解决方法是杀死 ChooserActivity,但除了 AccessibilityService 之外,对于非 root 用户来说没有什么。以上是关于如何以编程方式关闭 Android 中的共享系统对话框?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式将音乐从 pc 同步到 iphone 音乐库? [关闭]