Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 屏幕冻结,无法识别触摸事件_Android_User Interface_Hardware - Fatal编程技术网

Android 屏幕冻结,无法识别触摸事件

Android 屏幕冻结,无法识别触摸事件,android,user-interface,hardware,Android,User Interface,Hardware,我们有一个应用程序,它运行在带有安卓4.3的HP Slate 21 Pro上,平板电脑和应用程序功能位于一个信息亭中,用户可以走到该信息亭前执行任务 该应用程序非常小,有两个屏幕: 第一个屏幕允许输入员工编号,该输入使用连接的RFID USB读卡器读取卡。RFID阅读器使用键盘模拟来填充隐藏字段,并使用异步任务将数字“提交”到后端API 一旦用户扫描了他们的卡,他们就有效地“登录”,并加载第二个活动,使用异步任务查找与用户相关的数据,并显示用户的数据。此时用户可以在屏幕上选择项目 我们遇到的问题

我们有一个应用程序,它运行在带有安卓4.3的HP Slate 21 Pro上,平板电脑和应用程序功能位于一个信息亭中,用户可以走到该信息亭前执行任务

该应用程序非常小,有两个屏幕:

第一个屏幕允许输入员工编号,该输入使用连接的RFID USB读卡器读取卡。RFID阅读器使用键盘模拟来填充隐藏字段,并使用异步任务将数字“提交”到后端API

一旦用户扫描了他们的卡,他们就有效地“登录”,并加载第二个活动,使用异步任务查找与用户相关的数据,并显示用户的数据。此时用户可以在屏幕上选择项目

我们遇到的问题是,在使用用户数据加载此活动后,应用程序不会响应任何触摸事件,所有按钮都无法单击或响应。此外,平板电脑的“主页”、“主页”和“最近项目”按钮也不起作用。按下时,所有按钮也不会改变状态

屏幕似乎被锁定,不接受用户输入。挑战在于,这并不是一直都在发生,除了在现场(生产),我们也无法在任何地方重现该问题

最初的想法是有什么东西阻塞了主线程,但是在用户“登录”后加载的屏幕上,有一个屏幕超时,使用处理程序来启动延迟超时调用,如果用户没有与屏幕交互,他们将被带回主屏幕,有效地充当“日志记录”用户已退出不活动状态。此处理程序正在启动并将用户返回到主活动

回到主屏幕后,平板电脑仍然不会响应触摸事件,但是用户可以扫描他们的卡,重复该过程以“登录”,并被带到同一屏幕,此时屏幕不会响应触摸事件,存在相同的行为

以下是实现屏幕超时的基本活动:

public abstract class BaseActivity extends Activity {

    @Override
    public void onResume() {
        super.onResume();
        resetDisconnectTimer();
    }

    @Override
    public void onStop() {
        super.onStop();
        stopDisconnectTimer();
    }

    @Override
    public void onUserInteraction(){
        resetDisconnectTimer();
    }

    public void quit(View view) {

        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }

        Intent intent = new Intent(this, MainActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
    }

    public void resetDisconnectTimer(){
        disconnectHandler.removeCallbacks(disconnectCallback);
        disconnectHandler.postDelayed(disconnectCallback, 10000);
    }

    public void stopDisconnectTimer(){
        disconnectHandler.removeCallbacks(disconnectCallback);
    }

    private Handler disconnectHandler = new Handler(){
        public void handleMessage(Message msg) {
        }
    };

    private Runnable disconnectCallback = new Runnable() {
        @Override
        public void run() {
            quit(getWindow().getDecorView());
        }
    };    

}
我已经做了一些测试,我故意阻塞主线程,超时将被终止 在线程被解锁之前不要开火,这让我相信线程没有被阻塞

最后,经过一段时间(大约10到30秒)后,应用程序再次开始响应触摸事件

编辑2014-09-30

我开始怀疑除了软件之外还有什么东西导致了问题,因为这个设备有一个硬件设置按钮,可以打开设置应用程序

当应用程序冻结时,此硬件按钮打开设置屏幕。但是,设置应用程序与原始应用程序的行为相同,因为它不响应触摸事件

编辑2014-10-02


我已经确认,其他输入设备在触摸屏不工作时。当这种情况发生时,我能够连接鼠标。我使用鼠标导航到主屏幕,然后导航到设置屏幕。在此期间,触摸屏没有响应,但设备对鼠标点击做出响应。这让我相信触摸屏存在硬件问题。

我们已经确认,当这个问题发生时,连接的鼠标和键盘仍然工作。所有其他应用程序也表现出相同的行为。此外,当出现此问题时,我们可以使用鼠标导航到设置屏幕并启用触摸指示灯,以便在屏幕上显示屏幕触摸。当完成此操作并触摸屏幕时,实际事件将显示在屏幕上约6至8英寸远的位置

该设备是由三个摄像头驱动的两点式触摸屏。我们已经联系了HP,他们表示其他用户也报告了类似问题,他们正在调查该问题,并表示这可能是驱动程序问题


这不是一个软件问题,而是一个硬件问题。

我知道这是一个很遥远的目标,但也许你还活着:惠普找到什么了吗?DominikusK@DominikusK说,我们确实在一台设备(不是HP)上遇到了同样的问题(完全冻结触摸,显示的应用程序仍在运行)。惠普承认了这个问题,但从未提供解决方案,我们换了另一款平板电脑。