第一次接触被忽略?

科里·奥格本

我正在研究一个闹钟。作为它的一部分,我有一个IntentService在警报实际响起时启动活动。在“活动”中,onCreate我正在唤醒屏幕,获取唤醒锁,将活动强制为全屏并播放声音。这是onCreate中的所有内容:

super.onCreate(savedInstanceState);

// Get Alarm ID from the extras
Bundle extras = getIntent().getExtras();
int id = extras.getInt("AlarmID", -1);

// Get Alarm info from the DB 
DB = new DatabaseHelper(this);
alarm = DB.getAlarm(id);

if (alarm == null || !alarm.isEnabled()) finish();

getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_alarm);

// My root view
View contentView = findViewById(R.id.fullscreen_content);

// Hide action bar for full screen
ActionBar bar = getActionBar();
if (bar != null) bar.hide();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

// Hide nav bar
mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS);
mSystemUiHider.setup();
mSystemUiHider.hide();

// Show over lock screen
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

// Wake up screen
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "MyWakeLock");
wakeLock.acquire();

// Get UI Elements
TextView time = (TextView)findViewById(R.id.Time);
TextView name = (TextView)findViewById(R.id.SmallAlarmName);

// Fill UI Elements
time.setText(Alarm.FormatTime(alarm.getHour(), alarm.getMinute()));
name.setText(alarm.getName());

// Play selected ringtone
tone = RingtoneManager.getRingtone(this, alarm.getSound());
tone.setStreamType(RingtoneManager.TYPE_ALARM);
tone.play();

该视图非常简单:2个TextView用于显示时间和警报名称,2个可单击的ImageView用于贪睡和禁用。

我遇到的问题是,我第一次触摸屏幕时,什么也没发生。这两个ImageView均以a开头,Log.i因此我知道如果事件触发我何时按下它。第一次推送时,没有日志输出。在第二次推送时,将触发正确的ImageView事件。创建活动时,屏幕最初是打开还是关闭都没有关系,但是第一次触摸非常可重复。发生了什么事,我该如何解决它,以使第一触摸能够按预期工作?

我正在Nexus 5、4.4.3,Rooted,stock rom,Xposed Framework上进行测试(但没有会影响我的应用程序的模块)。由于需要使用铃声(VM没有铃声),因此我无法真正在虚拟机中进行测试。

另外,为记录起见,第一次点击没有其他日志发生。我不知道手机认为我正在窃听。

编辑:我认为这与标志有关。我注意到我正在打电话setFlags而不是addFlags打电话getWindow().setFlags(...)相反,我将其更改为addFlags并尝试将其更改为:

int flags = WindowManager.LayoutParams.FLAG_FULLSCREEN |
            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
            WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING |
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
getWindow().addFlags(flags);

但是没有变化。

有什么方法可以告诉我是什么在拦截第一次点击?

我尝试在onCreate的末尾设置一个断点,并不断执行,直到它最终等待事件发生为止,但是即使在这种状态下,第一次点击也不会在调试器中进行更改。如预期的那样,第二次点击我的ImageViews将在单击处理程序中的第一行停止调试器。

编辑2:我认为我正在做某事。我正在通过过滤器观看logcat,只看到与我的应用程序有关的内容。我尝试查看没有过滤器的logcat,并且能够在第一次点击时可靠地获取以下类型的消息:

06-12 23:28:04.437      812-844/? W/InputEventReceiver﹕ Attempted to finish an input event but the input event receiver has already been disposed.

第一次点击将以以下两个警告响应。第一次之后的其他水龙头不会发出此类警告,并且我的处理程序将按预期执行。

快速搜索返回了这个问题,但对我的情况没有帮助。我认为这不仅是警告,而且可能是为什么忽略第一次轻按的根本原因。但是,我仍然不知道如何解决它。

特杰

不知道这是否是答案还是通用性如何,但是..我设法通过删除以下标志为我解决了这个问题:

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
          //| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
          //| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
          | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

我只能推测这两个标志导致第一次触摸的原因。也许是与这些标签相关联的“沉浸式”模式,因为它应该(并且确实)隐藏导航,所以也许它在幕后发生了冲突。.我不知道:-)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

第一次接触被忽略?

来自分类Dev

第一次接触struct。为什么会发生此输出?

来自分类Dev

一次忽略“下标超出范围”错误,以处理第一次迭代

来自分类Dev

第一次击球太快

来自分类Dev

第一次通过成语

来自分类Dev

广度第一次迭代?

来自分类Dev

第一次流浪失败

来自分类Dev

第一次安装Ubuntu

来自分类Dev

第一次链接功能

来自分类Dev

第一次运行jstree

来自分类Dev

广度第一次迭代?

来自分类Dev

动画是第一次

来自分类Dev

HTTPAsyncClient第一次跳过

来自分类Dev

第一次使用Mockito

来自分类Dev

摩卡第一次测试

来自分类Dev

第一次加载页面

来自分类Dev

第一次击球太快

来自分类Dev

组件的第一次更新

来自分类Dev

Laravel - 第一次使用

来自分类Dev

第一次安装 Ubuntu

来自分类Dev

onTouchListener切换按钮,忽略第一次按下?

来自分类Dev

正则表达式。驼色表壳彰显个性。忽略第一次出现

来自分类Dev

如果以后出现,则忽略字符的第一次出现

来自分类Dev

是什么导致我的循环仅在第一次迭代中忽略此“ \ t”?

来自分类Dev

第一次匹配熊猫时间序列数据后忽略np.where

来自分类Dev

正则表达式。驼色表壳彰显个性。忽略第一次出现

来自分类Dev

onTouchListener切换按钮,忽略第一次按下?

来自分类Dev

Oracle REGEXP_SUBSTR忽略字符的第一次出现,但包括第二次出现

来自分类Dev

docker pull in unit files仅在第一次启动时起作用,稍后会被忽略