从 Service 中启动 Activity 以及手机截屏

关于 android 截屏, 在 Service 中实现后台截屏

记得上一次写 android 代码可能在十年前了,那时用的是eclipse开发,现在全忘记了。

这次用 android studio 捣鼓快一周时间,才做完一个小玩意。

 

android 5.1

因为电脑配置比较低,无法运行模拟器,我是在一台旧的手机上(meizu note 2)进行usb调试,测试截屏时弹出一次权限提示对话框,可以选择不再提示, 并且不需要【悬浮窗】权限, 也不需要将 Service 设置为前台 Service, 就可以正常截屏。

 

android 11

代码写好后,放到 android 11 上运行闪退,经过两天不懈的努力,终于把截屏的事情搞清楚了。

1. 在准备截屏前, Service 要设置为 前台Service

Intent notificationIntent = new Intent(this, MainActivity.class);

Notification notification = notificationBuilder.build(); //通知

...

startForeground(1, notification); //必须使用此方法显示通知

同时再加两个权限配置:

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

给 Service 也要加上特有的权限:

<service
            android:name=".ScreenService"
            android:enabled="true"
            android:exported="true"
            android:foregroundServiceType="mediaProjection"
            ></service>

 

2. 每一次的截屏都会弹出权限对话框, 不像 android 5.1 那样可以选择不再提示

3. 在应用的权限管理中,要给应用加上悬浮窗权限

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

 

在 service 中启动一个 Activity, 经常遇到无法激活的情况。

startActivity(intent);

折腾一天,才找到原因:原来在service中激活这个Activity需要开启悬浮窗权限

真没想到,会是这个原因。

 

看来 android 每一个版本变化真的很大,安全限制越来越严格。

posted @   personnel  阅读(362)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
友情链接:图片批量处理工具 gif动态图制作工具 制作电子相册 图片排版工具 制作淘宝主图视频 MKScript 鼠标键盘自动化脚本语言
点击右上角即可分享
微信分享提示