如何以编程方式关闭 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 中的共享系统对话框?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式避免android手机中的深度睡眠模式?

应用程序运行时如何在android中以编程方式关闭通知?

如何以编程方式将音乐从 pc 同步到 iphone 音乐库? [关闭]

如何在 Android 上以编程方式关闭 3G/数据?

如何在 android Pie 和 UP 中以编程方式打开/关闭扬声器

如何在android中以编程方式关闭3G数据连接?