关于虚拟屏使用的权限问题

Android P系统支持虚拟屏显示,在虚拟屏中显示应用的画面。

但是相应的,在虚拟屏中去显示应用画面涉及到跨进程和权限的问题。

参考资料:https://source.android.com/devices/tech/display/multi_display/activity-launch

1·将页面现在在虚拟屏中的方法
Activity 启动行为由应用 AndroidManifest.xml 文件中的启动模式、Intent 标志以及调用方提供的 ActivityOptions 定义。使用 ActivityOption#setLaunchDisplayId(int) 可将特定屏幕指定为 Activity 启动的目标。

需要注意的是:用于启动 Activity 的 Intent 可解析为系统中已有的 Activity 实例。在这种情况下,如果未提供其他标志,Activity 会显示在最后一次使用它时所在的屏幕上。如果使用 ActivityOptions#setTargetDisplayId() 指定目标屏幕,Activity 会移动到该屏幕(如果安全限制及其他限制允许的话)。

2.权限限制
在 Android 10 中,为了防止恶意应用通过从其创建的虚拟屏幕的表面读取用户敏感信息来盗用相关信息,应用只能在其创建的虚拟屏幕上启动其自己的 Activity。

在虚拟屏中,如果启动的界面就是创建虚拟屏软件的app,就不存在权限问题。

但是如果想要把别人的app或者界面现在你自己创建的虚拟屏中,则存在去读用户敏感信息等隐私问题,需要用户授权。

启动方(画面提供者)权限:
1.INTERNAL_SYSTEM_WINDOW,具有 INTERNAL_SYSTEM_WINDOW 权限的系统组件可以在任何屏幕上启动。
2.ActivityInfo.FLAG_ALLOW_EMBEDDED,只有具备FLAG_ALLOW_EMBEDDED标识的Activity才能允许被启动。

在AndroidManifest.xml中添加权限:

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

在AndroidManifest.xml给Activity添加标识:

android:allowEmbedded="true"

调用方权限:
1.具有 ACTIVITY_EMBEDDING 权限的调用方可以从具有 ActivityInfo.FLAG_ALLOW_EMBEDDED 标志的其他应用启动 Activity。

在AndroidManifest.xml中添加权限:

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

Android Q和Android P的区别:
Android 10 包含 ActivityManager#isActivityStartAllowedOnDisplay(Context context, int displayId, Intent intent) 方法,用于先检查应用的安全限制,然后再尝试在屏幕上启动。在 Android 9(及更低版本)中,如果启动受到限制,系统会抛出 SecurityException。

注意:
android.permission.ACTIVITY_EMBEDDING只授权于系统应用和组件的权限,需要LOCAL_CERTIFICATE := platform和LOCAL_PRIVILEGED_MODULE := true权限。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunxiaolin2016

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值