使用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);
}
但我似乎没有找到任何快乐。
有没有人碰到过这个?关于我还能看到的其他地方的任何建议?此时切换到第三方不是一种选择,但如果我们无法解决此问题,可能会在未来。
谢谢!