Wou*_*uzz 8 android dialog system detect
嗨Stackoverflowers(我知道,这听起来不应该......)
好吧,我认为这几乎都是问题所在:我想抓住任何导致我的活动显示甚至部分隐藏的东西,例如电源选项,最近的应用程序托盘,低电量通知等等......我是很难检测到这些系统事件.
我很确定onPause()会在发生这样的事件时被调用,但它似乎是错误的......或者是我?
还有其他任何想法吗?...我最好不要单独挂钩每个系统广播动作,因为我希望尽可能地通用(并对任何隐藏我的活动的行为做出反应).
感谢您的任何意见!
在处理自助服务终端风格的应用程序时,我知道一些对话框来到前台并且可以被检测到
ActivityManager activityManager = (ActivityManager)getBaseContext()
.getSystemService(Activity.ACTIVITY_SERVICE);
String className = activityManager.getRunningTasks(1).get(0).topActivity.getClassName();
Run Code Online (Sandbox Code Playgroud)
一个例子是蓝牙绑定对话框,它将com.android.settings带到前台.
反例是未出现在前台的电源按钮对话框(关闭,重启等).
请注意,您可以使用此广播关闭系统对话框(甚至是电源按钮对话框):
Intent closeDialog = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
sendBroadcast(closeDialog);
Run Code Online (Sandbox Code Playgroud)
但是在大多数(所有较新的?)设备上,这个广播甚至会关闭软件键盘,因此不建议运行频繁发送的服务,因为用户将无法在文本字段中输入任何内容.
请注意,此类行为肯定会使您的应用程序成为恶意软件的状态,从而防止它在Google Play上发布.
我很确定 onPause() 会在此类事件发生时被调用,但它似乎是错误的......或者是我?
onPause()如果另一个活动接管前台输入,将被调用。因此,如果第三方应用程序进入前台,即使具有以对话框为主题的活动,onPause()也会被调用。
不过,不需要onPause()从操作系统组件调用。
我最好不要单独挂钩每个系统广播操作,因为我希望尽可能通用(并对隐藏我的 Activity 的任何内容做出反应)。
你想要的东西是不可能的。并非您列出的所有内容都已广播Intents,并且人们可以使用其他技术(例如,Toasts)来掩盖您不知道的部分活动。
| 归档时间: |
|
| 查看次数: |
5877 次 |
| 最近记录: |