点击标记时,我想点击它3次

时间:2017-04-13 19:34:13

标签: react-native react-native-maps

在Android上有an issue地图标记,似乎没有人可以修复它。解决方法是点击地图标记3次,它将正确打开带有图像的标注/注释。

如何以编程方式执行此操作?我想在每次用户点击时点击标记3次。

36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-03
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-08
36,53,90478,0.58699759849,0.33616,4.83449759849,0.0695335954050315,MI-14
36,53,15596,0.58454577855,0.26119,2.24878677855,0.116147072052964,MI-12

1 个答案:

答案 0 :(得分:5)

tl; dr:出于安全原因,这是不可能的。如果用户应用程序能够创建"合成"触摸,恶意应用程序可以使用此功能,以强制用户的设备自行行动。如果您想阅读我对该主题的研究,请继续阅读

就我所知,你不能在React Native的JavaScript端做到这一点。您需要设置一些自定义逻辑才能在本机端发出本机事件。

原因是React Native的JS端只能处理它通过本机桥接收的本机事件(如触摸)。然后,这些事件将触发事件处理代码,例如Touchable*组件(例如TouchableHighlightTouchableOpacity和其他组件)提供的代码。据我所知,根据单向数据流的原则,无法从JS端发出本机事件。

另一方面,当你可以从本机端发出任意本机事件时,除非你以某种方式检查数据获取,否则你无法知道JavaScript方面正在做什么发送到Native端的渲染方法,如果不是不可能的话,这可能会非常困难。

因此,最好的方法是在本机代码中创建一个自定义视图类,在触摸时触发多个触摸事件,并将其包装到React Native组件中,如iOS中所述, Android指南。但是,执行此操作时会出现问题:

在iOS中,用户代码没有公开可用的方式来创建UITouch个对象并将它们分发到UI。您需要使用未公开的API方法来执行此操作,如果您尝试将其提交到App Store, 让您的应用被拒绝。有一种方法可以记录here,但它可能已经过时,因为Apple不保证未公开的API保持稳定。有a few answers on SO already关于为什么在iOS上模拟触摸事件不是一个好主意,让您的应用被拒绝。

在Android上,this has been discussed at length on the android-platform mailing list,普遍的共识是不应该从用户代码触发任意触摸事件。尝试以编程方式发送MotionEvent似乎会导致奇怪和不可靠的行为,如this question的第二个答案所示,对该答案的后续评论以及this question的答案。< / p>

即使React Native也不会创建自己的触摸事件 - 它只接收本机视图生成的触摸事件。所有React Native Gesture Responder System只包含本机上可用的公共API - 用于创建触摸事件的API似乎不公开。

所有这一切让我相信,如果不使用私有iOS / Android API,你很想做的就是根本不可能,很可能是出于安全考虑