从 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 每一个版本变化真的很大,安全限制越来越严格。
标签:
android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效