Android(安卓)桌面请求录屏权限不唤起App
16lz
2021-01-26
最近公司的录屏项目需要的一个功能,有一个悬浮窗功能,点击悬浮窗按钮就能直接录屏,需求很简单,但是遇到一个很蛋疼的问题,就是请求android的录屏权限必须要是使用startActivityForResult,如果直接在桌面请求会有一个问题,那就是悬浮窗在桌面时,点击悬浮窗会后台唤起app,这就很不友好了,在网上查阅了各种资料也无果,最后终于想到了一个方法,自己新建一个申请权限的activity,并把它的主题设置为透明,然而还是不行,最后又一波百度谷歌,给activity加了一个单例的启动模式后终于成功,我主要贴出了PermissionActivity的代码,后面有github的完整代码。
Manifest清单文件
<activity android:name=".activity.PermissionActivity" android:launchMode="singleInstance" android:theme="@style/NoActivity"> </activity>
PermissionActivity
class PermissionActivity : Activity() { private var projectionManager: MediaProjectionManager? = null /** 屏幕录制控制 */ private var mRecordService: RecordService.RecordBinder? = null /** 服务绑定回调 */ private var mServiceConnection: ServiceConnection = object : ServiceConnection { override fun onServiceDisconnected(name: ComponentName?) { mRecordService = null Log.d("record","服务解绑") } override fun onServiceConnected(name: ComponentName, service: IBinder) { mRecordService = service as RecordService.RecordBinder Log.d("record","服务绑定") } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) projectionManager = getSystemService(Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager val intent = Intent(this, RecordService::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE) val captureIntent = projectionManager?.createScreenCaptureIntent() startActivityForResult(captureIntent, RECORD_REQUEST_CODE) } override fun onDestroy() { super.onDestroy() unbindService(mServiceConnection) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { mRecordService?.onRequestResult(requestCode, resultCode, data) finish() }}
透明主题
<style name="NoActivity" parent="android:Theme.Translucent.NoTitleBar.Fullscreen"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:colorBackgroundCacheHint">@null</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@android:style/Animation</item> <item name="android:windowNoTitle">true</item> <item name="android:windowContentOverlay">@null</item> </style>
https://github.com/song234876/ScreenDemo
如果这篇文章帮到了你,麻烦点个赞!
简书文章地址: https://www.jianshu.com/p/a10dc202faa0
更多相关文章
- Android之Http通信——2.详解Http的消息头与响应头
- android的服务进程Service的创建及启动
- android用okhttp搭建网络通讯(附服务器端代码)
- Android基础笔记(十一)- Service基础和注意事项以及Activity与Serv
- 随Android生命周期解绑Rxjava订阅的简单流式方法
- 野人学Android基础篇之网络通讯第二课--本地apache服务器与Andro
- android 可拖动排序的源码示例
- Android(安卓)_实现SSL解决不受信任的证书问题
- Android中的单例模式