标签: android-overlay

如何处理SYSTEM_ALERT_WINDOW权限未在某些Marshmallow设备上自动授予

我一直在收到一些小米设备(例如Mi 2,运行API级别21)没有显示叠加层的报告.我的应用针对API 23.

几个 帖子在那里对此.似乎MIUI设备在安装时不启用此权限(与其他Marshmallow之前的设备不同).

不幸的是,Settings.canDrawOverlays()仅适用于Android 23+.

  1. 在Marshmallow之前检查此权限是否尚未启用的正确方法是什么?
  2. 是否有意图将用户带到相关的MUIU设置页面?也许吧:new Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", packageName)但我没办法测试这个.

android android-overlay

16
推荐指数
3
解决办法
2万
查看次数

java.lang.IllegalStateException:未从 androidx.constraintlayout.widget.ConstraintLayout 找到 ViewTreeLifecycleOwner

当我尝试使用 XML 在覆盖层中插入 Compose(在其他应用程序上绘制)时,出现以下异常:

java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from androidx.constraintlayout.widget.ConstraintLayout{d596746 V.E...... ......ID 0,0-0,0}
Run Code Online (Sandbox Code Playgroud)

但如果没有覆盖(在活动中),它可以正常工作。有谁知道如何解决吗?我已经将 AppCompat 库更新到 1.3.0

我的 XML 代码:

java.lang.IllegalStateException: ViewTreeLifecycleOwner not found from androidx.constraintlayout.widget.ConstraintLayout{d596746 V.E...... ......ID 0,0-0,0}
Run Code Online (Sandbox Code Playgroud)

我的叠加代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black">
    <androidx.compose.ui.platform.ComposeView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/compose_view"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

android android-overlay android-jetpack-compose

13
推荐指数
3
解决办法
9018
查看次数

覆盖视图不会禁用基础视图上的操作

我有2个视图:视图A和视图B.视图A被渲染并具有输入文本值的操作.我正在显示叠加视图 - 在此顶部查看B. 我希望View A上的操作被禁用,但它们没有,我仍然可以输入View A上的输入字段.如何禁用它?

android overlay view android-view android-overlay

7
推荐指数
1
解决办法
1968
查看次数

Android - 覆盖屏幕,包括状态栏内容

我想制作一个覆盖整个屏幕的覆盖屏幕,包括状态栏和导航栏。

我花了几个小时的谷歌搜索/研究仍然没有运气。

这是我的代码:

MainActivity.java(启动器):

package com.blogspot.diannaoxiaobai.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        startActivity(new Intent(this, Main2Activity.class));
    }
}
Run Code Online (Sandbox Code Playgroud)

活动_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.blogspot.diannaoxiaobai.myapplication.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

Main2Activity.java(由MainActivity启动):

package com.blogspot.diannaoxiaobai.myapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;

public class Main2Activity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) …
Run Code Online (Sandbox Code Playgroud)

android overlay android-theme android-overlay android-statusbar

6
推荐指数
1
解决办法
7275
查看次数

全屏TYPE_ACCESSIBILITY_OVERLAY

我对 Android 上的辅助功能不太熟悉。在学习课程和文档时,我在课堂TYPE_ACCESSIBILITY_OVERLAY上遇到了这种情况WindowManager

文档(仅相关文字)

例如,如果存在可触摸的全屏辅助功能覆盖层,则辅助功能服务可以对其下方的窗口进行内省,即使它们被可触摸窗口覆盖。

因此,我着手实现这一目标,即全屏辅助功能叠加层,并尝试内省其下方的窗口

扩展AccessibilityService并在调用时添加了我的全屏覆盖onServiceConnected(添加覆盖的灵感来自这里

@Override
protected void onServiceConnected() {
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    FrameLayout mLayout = new FrameLayout(this);
    WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
    lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
    lp.format = PixelFormat.TRANSLUCENT;
    lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    lp.width = WindowManager.LayoutParams.MATCH_PARENT;
    lp.height = WindowManager.LayoutParams.MATCH_PARENT;
    lp.gravity = Gravity.TOP;
    wm.addView(mLayout, lp);

    mLayout.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // Here I'm getting the touch events on the overlay …
Run Code Online (Sandbox Code Playgroud)

android accessibility android-overlay

3
推荐指数
1
解决办法
4852
查看次数

如何在Android中实用地为应用程序创建一个叠加层作为水印?

我想制作一个应用程序,其中会有一个水印,该水印将显示在每个活动中,包括片段(如果存在)。我想以编程方式完成此操作,而不使用任何 XML 来减少冗余和样板代码。其主要目的是,如果我与其他人共享 APK,那么他就无法窃取我的 APK,因为它到处都包含奇怪的水印。

android android-overlay android-app-watermark

-2
推荐指数
1
解决办法
2220
查看次数