LDG1998 2024-02-26 14:56 采纳率: 50%
浏览 7

安卓开发如何同时触发悬浮窗和当前游戏应用响应点击事件?

刚学习了安卓开发,开发悬浮窗的时候遇到一个问题想要解决。
创建了一个应用,里面有个按钮点击后可以生成悬浮窗。
现在是在玩游戏的时候,点击悬浮窗不能触发点击事件。
只有停下游戏操作,专门点击悬浮窗才能触发点击事件。
是有什么配置能够实现在操作游戏的时候能够还能点击悬浮窗,触发悬浮窗的点击事件吗?

  • 写回答

4条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-02-26 14:57
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如需一对一服务私聊我哦
    问题:在游戏操作时无法触发悬浮窗的点击事件,如何解决? 解决方案:使用权限 SYSTEM_ALERT_WINDOW,让悬浮窗获得系统级别权限,可以在任何情况下触发点击事件。 代码示例: 在 AndroidManifest.xml 中添加权限声明:
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    

    修改创建悬浮窗的代码,添加 SYSTEM_ALERT_WINDOW 权限声明:

    // 创建悬浮窗
    WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
    // 设置 LayoutParams.FLAG_NOT_FOCUSABLE 以及 LayoutParams.TYPE_SYSTEM_ALERT
    WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);
    // 添加 SYSTEM_ALERT_WINDOW 权限声明
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
        !Settings.canDrawOverlays(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
            Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, PERMISSION_REQUEST_CODE);
        return;
    }
    // 显示悬浮窗
    View view = LayoutInflater.from(this).inflate(R.layout.view_float_window, null);
    windowManager.addView(view, layoutParams);
    

    在 onActivityResult 方法中处理权限请求回调:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PERMISSION_REQUEST_CODE) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
                Settings.canDrawOverlays(this)) {
                // 拥有 SYSTEM_ALERT_WINDOW 权限,继续创建悬浮窗
                createFloatWindow();
            } else {
                // 没有 SYSTEM_ALERT_WINDOW 权限,提示用户
                Toast.makeText(this, "需要 SYSTEM_ALERT_WINDOW 权限才能显示悬浮窗", Toast.LENGTH_SHORT).show();
            }
        }
    }
    

    注意:在 Android 6.0 及以上版本中,需要动态申请 SYSTEM_ALERT_WINDOW 权限,否则会出现运行时异常。在 onActivityResult 方法中处理权限请求的回调。

    评论

报告相同问题?

问题事件

  • 修改了问题 2月26日
  • 创建了问题 2月26日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度