【问题标题】:Android Holding back button freezes my UIAndroid 按住后退按钮会冻结我的 UI
【发布时间】:2014-11-11 02:35:05
【问题描述】:

我正在使用 ZXING 的 Capture Activity 项目实施一个应用程序。一切正常,但我发现了一个古怪的问题。如果我单击界面上的按钮启动扫描,它会切换到 zxing 扫描仪。如果我点击后退按钮,它就会退出 - 完全没有问题。我偶然发现了这样一个事实:如果我没有“点击”后退按钮,而是按住它的时间过长,应用程序会返回,但 UI 上的任何内容都无法点击。

我已经登录了我的班级,无论我点击还是按住,都显示相同的 EXIT 正在发生,所以这很奇怪。如果我点击并按住主页按钮,则应用程序被“冻结”,然后向上滑动(好像我要进入谷歌搜索)然后再向下滑动(好像我改变了对谷歌搜索的想法) 然后用户界面不再冻结,我可以再次点击按钮。堆栈或 logcat 中没有出现错误。这是一些代码sn-ps。希望有大神指教!

// This is what is called when I click my "scan" button.
public void menuScanMember(View view) {
    try {
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE,PRODUCT_MODE");
        startActivityForResult(intent, 0);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这是退出意图时调用的内容(使用后退按钮或扫描)

//In the same activity you'll need the following to retrieve the results:
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            p_strScanMemId = intent.getStringExtra("SCAN_RESULT");
            String strId = getMemberByMemberId(db, p_strScanMemId);

            if (strId != null && !("".equalsIgnoreCase(strId))) {
                // If found, send to member info landing page
                Intent detailIntent = new Intent(this, MemberDetail.class);
                detailIntent.putExtra(EXTRA_MESSAGE, p_strScanMemId);
                startActivity(detailIntent);
            } else {
                // If not found, ask user if they want to create the member account now.
                createYesNoDialog("Member Not Found.  Register Now?");
            }

        } else if (resultCode == RESULT_CANCELED) {
            Log.v("CANCELLED CANCELLELD", "RESULT CANCELLED");
            // Nothing to do here - we'll just exit the activity
        }
    }
}
  • 无论我点击还是按住返回按钮,“已取消”语句都会显示在我的日志中。

【问题讨论】:

  • 按住返回键时,手机滑条会出现在左边还是右边?
  • 与其在onActivityResult 方法中返回结果,不如在Activity 中通过onNewIntent 方法处理结果不是更好,因为您传递了一个额外的("SCAN_MODE ") 与Intent 一起返回?

标签: android android-camera zxing barcode-scanner


【解决方案1】:

我实际上找到了一个很好的解决方案。我查看了 CaptureActivity 代码附带的代码。有一个 onKeyDown 处理程序,带有一个寻找后退按钮的开关。我最终覆盖了 onKeyUp 并将后退按钮检测移至该方法,因此如果后退按钮被按住,则意图不再退出,只有当它松开时。

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多