Android12 部分应用(客户大型游戏)使用鼠标点击无效,鼠标模拟触摸点击

这篇具有很好参考价值的文章主要介绍了Android12 部分应用(客户大型游戏)使用鼠标点击无效,鼠标模拟触摸点击。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        如标题,在某些较大的游戏应用中,会限制鼠标点击不生效,导致我们的鼠标在系统其他应用上都能使用,就是某个游戏应用无法点击。调试发现,触摸事件不受影响,那么我们可以在当前游戏应用中,点击的时候模拟一下触摸点击,查看是否生效。安卓有一个触摸命令input tap x y,通过试验发现该触摸命令可以生效,那么我们可以在游戏应用界面,点击鼠标时发送一次input命令模拟触摸点击,从而解决在游戏界面鼠标点击不生效的问题。话不多说,直接上代码

        framework/base/core/java/android/view/ViewRootImpl.java

     private static final boolean DEBUG_BLAST = false || LOCAL_LOGV;
 
+    private static final String PACKAGE_NAME = "com.Vishee.Cycling2";
+    static boolean JUST_CLICK_ONCE = true;




         public final void deliver(QueuedInputEvent q) {
             if ((q.mFlags & QueuedInputEvent.FLAG_FINISHED) != 0) {
+               //final List<ActivityManager.RunningTaskInfo> tasks = mActivityTaskManager.getTasks(1);
+               //if(tasks.get(0).topActivity.getPackageName().equals(PACKAGE_NAME)){
+               String appName = ActivityThread.currentOpPackageName();
+               if(appName.equals(PACKAGE_NAME)){
+                   final MotionEvent event = (MotionEvent)q.mEvent;
+                   final int action = event.getAction();
+                   //Log.d(TAG,"appName="+appName+" x="+event.getX()+" y="+event.getY());
+                   if(action == MotionEvent.ACTION_DOWN){
+                       if(JUST_CLICK_ONCE) {
+                           event.setTouchInstruct(event.getX(),event.getY());
+                           JUST_CLICK_ONCE = false;
+                       }else{
+                           JUST_CLICK_ONCE = true;
+                       }
+                   }
+               }
                forward(q);
            } else if (shouldDropInputEvent(q)) {
                finish(q, false);
            } else {
                traceEvent(q, Trace.TRACE_TAG_VIEW);
                final int result;
                try {
                    result = onProcess(q);
                } finally {
                    Trace.traceEnd(Trace.TRACE_TAG_VIEW);
                }
                apply(q, result);
            }
        }

        通过打日志发现该游戏apk是在deliver函数里的mflag判断一直为FLAG_FINISHED,未进入到onProcess函数,导致一直点击无效。添加的代码的目的是在进入FLAG_FINISHED后,判断当前包名是否为该游戏应用,通过ActivityThread.currentOpPackageName()获取包名,android12的tasks.get(0).topActivity.getPackageName()方法获取包名会报错,在android11上用tasks获取包名没问题,这一块我还没看懂,有明白的朋友麻烦跟我说一下。

        判断当前应用为我们的游戏应用后,判断当前action是否为鼠标点击ACTION_DOWN事件,然后执行setTouchInstruct方法模拟一次触摸事件。JUST_CLICK_ONCE是因为一次点击会有两次ACTION_DOWN事件,所以需要JUST_CLICK_ONCE过滤一次ACTION_DOWN,否则一次点击会执行两次触摸。setTouchInstruct方法添加代码如下

framework/base/core/java/android/view/MotionEvent.java

+import java.lang.Runtime;
+import java.lang.Process;

+    /** @hide */
+    public void setTouchInstruct(float x,float y){
+       try{
+           Log.d(TAG,"setTouchInstruct x="+x+" y="+y);
+            String[] commands = { "bin/sh", "-c","input tap "+Float.toString(x)+" "+Float.toString(y)};
+            Process process = Runtime.getRuntime().exec(commands);
+               }catch(Exception e){
+            e.printStackTrace();
+               }
+    }

至此,实现了某些游戏应用鼠标点击无效的问题。文章来源地址https://www.toymoban.com/news/detail-785118.html

到了这里,关于Android12 部分应用(客户大型游戏)使用鼠标点击无效,鼠标模拟触摸点击的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 今天吃什么小游戏(基于Flask框架搭建的简单应用程序,用于随机选择午餐选项。代码分为两部分:Python部分和HTML模板部分)

    今天吃什么 一个简单有趣的外卖点饭网站,不知道吃什么的时候,都可以用它自动决定你要吃的,包括各种烧烤、火锅、螺蛳粉、刀削面、小笼包、麦当劳等午餐全部都在内。点击开始它会随意调出不同的午餐,点击停止就会挑选一个你准备要吃的,如果没有想吃的,你还能

    2024年01月16日
    浏览(46)
  • 12.1 使用键盘鼠标监控钩子

    本节将介绍如何使用 Windows API 中的 SetWindowsHookEx 和 RegisterHotKey 函数来实现键盘鼠标的监控。这些函数可以用来设置全局钩子,通过对特定热键挂钩实现监控的效果,两者的区别在于 SetWindowsHookEx 函数可以对所有线程进行监控,包括其他进程中的线程,而 RegisterHotKey 函数只能

    2024年02月08日
    浏览(44)
  • Android Mediatek 禁用拨号应用的部分UI显示

    目录 修改的文件: 文件修改说明: 1. InCallActivity.java 2. InCallPresenter.java 3. StatusBarNotifier.java 这个是早期客制化需求 , 当时我记得是需要拨号的同时需要禁止系统通话被拉起 , 意思就是  电话过来了, 不能显示UI的同时还在通话 , 然后我做个了自定义的APP去控制通话。 这个修改

    2024年02月17日
    浏览(46)
  • 【干货】Android系统定制基础篇:第七部分-Android OTA升级(系统、应用)

    项目地址:https://github.com/aystshen/Android-RomUpgrade. 这是一个负责 Android OTA 升级的后台应用,开机后自动运行后台 Service,支持系统升级和应用升级,支持本地升级(tf卡、u盘)和在线升级(百度),支持推荐升级和静默升级。 已知兼容版本: ● Android 5.1 ● Android 6.0 ● Android

    2024年02月09日
    浏览(62)
  • 大型语言模型,第 1 部分:BERT

            2017是机器学习中具有历史意义的一年,当 变形金刚 模型首次出现在现场时。它在许多基准测试上都表现出色,并且适用于数据科学中的许多问题。由于其高效的架构,后来开发了许多其他基于变压器的模型,这些模型更专注于特定任务。         其中一个模

    2024年02月09日
    浏览(51)
  • Android studio socket客户端应用设计

    一、XML布局设计:

    2024年02月03日
    浏览(42)
  • android 12.0app应用安装白名单

    在12.0定制化开发中,客户需求要实现应用安装白名单功能,在白名单之中的应用可以安装,其他的app不准安装,实现一个 控制app安装的功能,这需要从app安装流程入手就可以实现功能 PMS就是负责管理app安装的,功能就添加在这里就可以了, 实现功能需求: 首选需要在IPacka

    2024年02月10日
    浏览(58)
  • 教你一步解决大部分wallpaper engine使用时卡顿、鼠标延迟的问题

    解决方法: 在英伟达的Geforce Experience里点击设置,如果不知道怎么进,只需要搜索Experience就可以了 将里面的“在游戏内覆盖”勾选去掉即可 OK,解决了

    2024年02月15日
    浏览(367)
  • 高通Android 12/13 默认应用程序授予权限

    1、一提到权限很多Android开发者都会想到 比如拨打电话 读取手机通讯录 定位 这些都是需要申请权限,Google Android 6.0之后(sdk 23) 需要app动态申请权限 或者权限组 2、我这里打个比方 比如需要在fm应用 默认打开mic权限  3、我们需要知道这个默认应用程序的包名 (例如 xxx.

    2024年02月01日
    浏览(56)
  • android 12.0app应用卸载黑名单

    在12.0在进行定制化开发中,最近由需求要求对于安装卸载app的功能做限制,对于限制app卸载的功能也是常有的功能,就是常说的app卸载黑名单功能,而app的安装和卸载都是有pms进行管理的

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包