RN - Android - Modal +主页按钮长按=应用程序崩溃

时间:2017-08-09 21:28:09

标签: android react-native modal-dialog android-homebutton long-press

使用ReactNative遇到一个有趣的问题。

在Android端,在我的应用中的任何位置,当模式打开时,如果用户在主页按钮上执行长按,则应用程序崩溃。

单击一下就可以了,当屏幕不是模态时,它没有问题。 iOS没有任何问题。

在半相关的说明中,如果我们使用touchid,并且注册了指纹,则应用程序不会崩溃,并且用户已登录。这告诉我应该有一个我可以捕获的事件来处理这个......但我不知道那个事件会是什么。

模态是非常基本的(为了清晰起见,我删除了样式,但是它们都添加了<View style = {styles.modalStyle}>

模态:

<Modal
    onRequestClose={()=> {
        props.waitingForResponse(false);
    }}
    visible={props.visible}>
    <View>
        <View>
            <View>
                <Image source={modalImageSrc} />
                <Text>
                    {props.showErrorMesage ? "Error" : props.title}
                </Text>
                <Text>{props.showErrorMesage ? "Item disabled" : props.text}</Text>
            </View>
            <View>
                <Button
                    onPress={()=> {
                        props.waitingForResponse(false);
                    }}
                    title="Cancel"
                />
            </View>
        </View>
    </View>
</Modal>

所有模态都以类似的方式创建。

到目前为止,我认为我可以直接向Modal本身添加一些内容 - 一个onError或onPause(不,这些事件对于Modals来说不存在?!?)......我似乎无法“抓住“在这种环境下长期坚持按住家庭 所以现在,我试图覆盖Java端的一些函数 - 在MainActivity.java中,我尝试了onKeyUp,onKeyDown,onKeyLongPress的覆盖 - 但是这些都不会在长按KeyEvent.KEYCODE_HOME时触发。 (见下文)

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if( keyCode == KeyEvent.KEYCODE_HOME){
        Toast.makeText(MainActivity.this, "onKeyDown KeyEvent.KEYCODE_HOME", Toast.LENGTH_LONG).show();
        event.startTracking();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if( keyCode == KeyEvent.KEYCODE_HOME){
        Toast.makeText(MainActivity.this, "onKeyUp KeyEvent.KEYCODE_HOME", Toast.LENGTH_LONG).show();
        return true;
    }
    return super.onKeyUp(keyCode, event);
}
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    if( keyCode == KeyEvent.KEYCODE_HOME){
        Toast.makeText(MainActivity.this, "onKeyLongPress KeyEvent.KEYCODE_HOME", Toast.LENGTH_LONG).show();
        return true;
    }
    return super.onKeyLongPress(keyCode, event);
}

但我似乎没有找到任何快乐。

有没有人碰到过这个?关于我还能看到的其他地方的任何建议?此时切换到第三方不是一种选择,但如果我们无法解决此问题,可能会在未来。

谢谢!

0 个答案:

没有答案