如何在其他应用中覆盖视图

Posted

技术标签:

【中文标题】如何在其他应用中覆盖视图【英文标题】:How to overlay views in other apps 【发布时间】:2013-12-09 02:15:31 【问题描述】:

我从哪里开始?

我不知道我将使用什么功能或权限来实现这一点。 无需root。

视图是这样的,右侧的相机按钮,它是浮动的,对其他应用可见,如果你按下它,它会截图。

注意:我不会做截图应用,这只是我想要实现的一个例子。

【问题讨论】:

我在这里有一个相同的教程:myandroidtuts.blogspot.in/2013/05/… @NaviRamyle - 你能告诉我截图来自哪个应用吗? What APIs are used to draw over other apps (like Facebook's Chat Heads)?的可能重复 @AdnanMulla 死链接(是的,我知道它已经超过 6 年了) 【参考方案1】:

这叫

在其他应用上绘图

检查这些答案

"DRAW OVER OTHER APP" is which permission in android

How to draw a view on top of everything?

(来自Morrison Chang) What APIs in Android is Facebook using to create Chat Heads?

【讨论】:

还有一个:***.com/questions/15975988/… 这不是答案...它是指向其他答案的链接的集合。应该作为评论发布。【参考方案2】:

试试这个:

    if(!isSystemAlertPermissionGranted(MainActivity.this))
        requestSystemAlertPermission(MainActivity.this,1);
    

    startService(new Intent(getApplicationContext(), Overlay.class));

还有:

public static void requestSystemAlertPermission(Activity context, int requestCode) 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
        return;
    final String packageName = context == null ? context.getPackageName() : context.getPackageName();
    final Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + packageName));
    if (context != null)
        context.startActivityForResult(intent, requestCode);
    else
        context.startActivityForResult(intent, requestCode);

@TargetApi(23)
public static boolean isSystemAlertPermissionGranted(Context context) 
    final boolean result = Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP || Settings.canDrawOverlays(context);
    return result;

【讨论】:

以上是关于如何在其他应用中覆盖视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在其他应用程序上显示透明相机覆盖?

在所有其他视图上添加覆盖视图

如何添加覆盖所有其他视图(包括导航栏和状态栏)的暗屏?

CGAffineTransform 在其他视图上

覆盖一个常见的片段帮助其他标签片段

如何在应用启动时加载其他选项卡的视图?