我有一个在手表上运行的应用程序,如果有来电,它会在操作系统的来电屏幕上显示一个半透明的覆盖活动。
95%的时间这很好,但其余5%的时间我的活动在来电时看不到。区别在于,当它不起作用时,我的活动的onPause()和onStop()会在其onCreate()之后立即调用,即。
成功显示时记录:
03-27 10:04:41.958 onCreate()
03-27 10:04:41.981 onStart()
03-27 10:04:41.981 onResume()
不显示时记录:
03-27 09:54:53.346 onCreate()
03-27 09:54:53.367 onStart()
03-27 09:54:53.367 onResume()
03-27 09:54:53.373 onPause()
03-27 09:54:53.437 onStop()
查看它如何直接从onResume()跳到onPause()。我对它这样做的猜测是,这可能是一个时间问题,在这5%的故障中,我的活动是在来电屏幕活动之前的几分之一秒启动的,这导致它移动到onPause()状态。虽然onResume()和onPause()之间只有微秒的时间
问题1)为什么有5%的时间会暂停()呢?
我尝试添加此代码以在发生这种情况时进行纠正:
protected void onStop()
{
Log.i(TAG, " ACTIVITY onStop()");
super.onStop();
if (/*activity isn't being stopped because I am dismissing it*/)
{
moveToFront();
}
}
private void moveToFront()
{
final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<ActivityManager.AppTask> tasks = activityManager.getAppTasks();
Integer count = tasks.size();
// There should only ever be one task as a launchMode of singleInstance is used
ActivityManager.AppTask task = tasks.get(0);
task.moveToFront();
}
但是,这不起作用,因为调用moveToFront()后我的活动不可见。
问题2)有人对我的问题的解决方案有什么建议吗?我如何总是让我的活动始终显示在进线量屏幕的顶部?
您可以尝试延迟启动活动,以便始终在系统调用屏幕之后启动活动。但这可能会在速度较慢的设备上失败,或者可能需要更长的时间才能显示您的活动。更好的方法是使用服务中的SYSTEM\u ALERT\u WINDOW等标志在屏幕上显示视图。
TL;DR:您想在手机窗口出现时检测准确的时刻,或者给您的视图赋予高于WindowManager的优先级。布局参数。键入电话。前者在新的Android版本上很难实现,但仍有可能实现。以后需要权限,但。。。见下文。
使用SYSTEM\u ALERT\u窗口很容易,而且有很多应用程序出于平凡的原因需要此权限。你真的比Facebook更受约束吗?您不必将视图置于活动中以这种方式显示,只需创建一个窗口,将其类型设置得足够高,然后将其附加到WindowManager即可。查看此应用程序的源代码以了解此类方法的示例。
关于检测当前前景活动的详细研究,可以在以下问题的回答中找到:
这是相当丑陋和特别的,但在所有Android版本上仍然是可能的。
但是你真的需要一个活动来完成你的这个技巧吗?吐司有很高的视图优先级,可以包含你想要的任何状态。
问题1)为什么有5%的时间会暂停()呢?
这是一个时间问题,调用应用程序也会听到一些启动意图,以及您的应用程序。首先显示您的活动,然后显示呼叫屏幕。是否检查活动管理器日志?
问题2)有人对我的问题的解决方案有什么建议吗?我如何总是让我的活动始终显示在进线量屏幕的顶部?
获得通话意图后,检查正在运行的应用程序,确保显示通话应用程序,然后启动活动。
下面是一个检查另一个应用程序是否正在运行的示例
或者在达到目的后,增加一点延迟并显示您的活动?
问题内容: 我的PC上没有太多内存,处理器也很弱。尽管到目前为止,netbeans是我最喜欢的IDE,但在我现有的计算机上使用它几乎是难以忍受的,因为打开程序时,项目扫描会自动开始。 有没有办法防止Netbeans扫描项目? 问题答案: 嗨,乔治,我不知道这是否是答案,但是我右键单击并在不需要打开的项目上选择“关闭”。将您过去的所有项目都列出在那里是没有意义的。只需将您正在开发的那个打开。您始终可
我是一名学生,我想知道是否有一种方法可以将一个变量从它的范围块中取出,用于本地范围?我正在尝试对一个商店进行编码,在那里用户可以选择他们想要购买什么,他们想要购买多少,并给他们同一商品的总付款。现在在块范围之外,我想给出他们购买每件商品的总金额。这是我的代码: 感谢:
问题内容: 有谁知道如何修理它。我正在使用Mac OS 10.8.2 问题答案: 在Python 3中是一个函数;它应该是: 正确安装或使用新版本(如果存在错误)。 在Python 3.3上工作正常。
assertEquals(“Amsterdam,Noord-Holland”,Driver.FindElement(by.id(“van”)).getText()); 然而,这导致: org.junit.comparisonfailure:预期:<[荷兰阿姆斯特丹]>但实际:<[]> 所以看起来比较失败是正确的,但我不知道为什么我不能断言我在屏幕上看到的东西。 我正在使用Java、Selenium
问题内容: 我是ElasticSearch的新手,对停用词有疑问。我有一个索引,其中包含美国的州名。例如:纽约/纽约州,加利福尼亚/加拿大,俄勒冈州/俄勒冈州。我相信俄勒冈州的缩写“ OR”是一个停用词,因此当我将状态数据插入索引时,无法搜索“ OR”。有什么办法可以为此设置自定义停用词,还是我做错了什么? 这是我建立索引的方式: 搜索“ NY”,效果很好。例如: 但是搜索“ OR”会返回零命中: