当前位置: 首页 > 面试题库 >

Android系统覆盖窗口

姜华翰
2023-03-14
问题内容

我正在尝试创建系统覆盖图。但是我一直在“拒绝权限”。我正在使用SDK版本23。

我的清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test" >

<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".activity.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

我用来创建叠加层的代码:

    //mView = new HUDView(this);
    mButton = new Button(this);
    mButton.setText("Overlay button");
    mButton.setOnTouchListener(this);

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.TRANSLUCENT);
    params.gravity = Gravity.RIGHT | Gravity.TOP;
    params.setTitle("Load Average");
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    wm.addView(mButton, params);

问题答案:

首先,没有名为的权限SYSTEM_OVERLAY_WINDOW。是的SYSTEM_ALERT_WINDOW

其次,如果您的targetSdkVersion年龄为23岁或更高,并且您正在运行Android
6.0+设备,则您的应用一开始将不会获得此权限。致电Settings.canDrawOverlays()查看您是否具有权限,如果没有,则用于ACTION_MANAGE_OVERLAY_PERMISSION将用户引导到“设置”。



 类似资料:
  • 问题内容: 在android 4.0之前,您可以使用TYPE_SYSTEM_OVERLAY创建并覆盖任何应用程序,并通过FLAG_WATCH_OUTSIDE_TOUCH获取触摸…现在,在android 4中,您无法接收触摸。 基本上,这个想法就是遵循这个应用程序的,即 http://www.appbrain.com/app/smart- taskbar-%28sidebar%29/com.smar

  • 我正在尝试学习windows上的opengl编程,虽然我最初是从SDL开始的,但我已经决定放弃它,以便学习如何使用WGL自己启动OpenGL上下文。 我使用nanovg作为一个快速的图形绘制库,用SDL渲染一切都很好,但是,现在我已经移除了SDL,创建了我自己的窗口和OpenGL上下文,我发现窗口的标题栏与渲染区域重叠了。好像渲染区域的原点(0,0)在整个窗口的左上方,而不是标题栏的正下方,如果这

  • 我把另一个项目放在我的主项目中,这个项目叫做OAuthSwift,它包含了一个框架。当我试图构建它时,我得到了这个错误: :0:错误:无效的虚拟文件系统覆盖文件“/users/gabrieljones/library/developer/xcode/deriveddata/paul”的_console-bbbxnfmomaaurfeabxmnchoqmwpa/build/intermediates

  • 宏碁Iconia a500平板电脑:10英寸:Android OS-3.0 宏碁Iconia a500平板电脑:10英寸:Android OS-3.2 三星Galaxy标签:10英寸:Android OS-4.0 三星Galaxy标签:7英寸:Android OS-4.0 模拟器:Skin-WVGA800:Android OS-4.1.2 不在以下设备上工作: 三星Galaxy标签:10英寸:An

  • 我正在寻找一些关于渲染子窗口的信息,特别是关于OpenGL如何与GDI互操作的信息。我的问题是,我基本上有两个窗口,首先,主窗口是在qt中创建的,而在qt内部,子窗口是利用OpenGL渲染器托管的。 现在我想做的是在我的OpenGL窗口顶部托管一个覆盖,所以我用它来覆盖OpenGL窗口。我遇到的问题是,当我使用OpenGL渲染时,OpenGL生成的图形似乎模糊了图形区域,包括并有效地撤消了由qt合

  • 问题内容: 我正在尝试为外部应用程序创建HUD样式显示。 为此,我需要创建一个透明的叠加窗口,该窗口将位于外部应用程序窗口的顶部。覆盖窗口应允许我放置小部件并在其上绘制文本。如果事件发生在透明区域上,则事件应该转发到基础窗口(否则,使窗口小部件可以按预期工作)。 我正在使用Java的OSX上执行此操作。我希望可以使用纯Java来实现此目的,并且可以移植到其他平台,但如果不可能的话,我会选择可以通过