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

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

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

  • 写回答

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日