diff --git a/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt b/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt index 765db08..6db7faa 100644 --- a/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt +++ b/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt @@ -14,13 +14,15 @@ import android.media.projection.MediaProjectionManager import android.os.Binder import android.os.Build -import android.os.Handler import android.os.IBinder -import android.os.Looper import android.util.Log import com.casic.endoscope.R import com.pengxh.kt.lite.extensions.getSystemService -import kotlinx.coroutines.Runnable +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class ScreenShortRecordService : Service() { @@ -40,24 +42,27 @@ } fun startRecorder(videoPath: String, intent: Intent) { - Log.d(kTag, "startRecorder: 开始录屏 $videoPath") - //开启通知,并申请成为前台服务 - createForegroundNotification() + CoroutineScope(Dispatchers.Main).launch { + Log.d(kTag, "startRecorder: 开始录屏 $videoPath") + //开启通知,并申请成为前台服务 + createForegroundNotification() - val mediaProjectionManager = getSystemService() - //获得令牌 - mediaProjection = mediaProjectionManager?.getMediaProjection(Activity.RESULT_OK, intent) - Handler(Looper.myLooper()!!).postDelayed(Runnable { - //配置MediaRecorder - if (configMediaRecorder(videoPath)) { - try { - //开始录屏 - recorder?.start() - } catch (e: Exception) { - e.printStackTrace() + val mediaProjectionManager = getSystemService() + //获得令牌 + mediaProjection = mediaProjectionManager?.getMediaProjection(Activity.RESULT_OK, intent) + withContext(Dispatchers.IO) { + delay(500) + //配置MediaRecorder + if (configMediaRecorder(videoPath)) { + try { + //开始录屏 + recorder?.start() + } catch (e: Exception) { + e.printStackTrace() + } } } - }, 400) + } } private fun createForegroundNotification() { @@ -123,14 +128,21 @@ //停止录制 fun stopRecorder() { - recorder?.stop() - recorder?.release() - recorder = null + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.IO) { + try { + recorder?.stop() + recorder?.release() + recorder = null - mediaProjection?.stop() - - //退出前台服务 - stopForeground(true) - Log.d(kTag, "stopRecorder: 结束录屏") + mediaProjection?.stop() + } catch (e: Exception) { + e.printStackTrace() + } + } + //退出前台服务 + stopForeground(true) + Log.d(kTag, "stopRecorder: 结束录屏") + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt b/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt index 765db08..6db7faa 100644 --- a/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt +++ b/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt @@ -14,13 +14,15 @@ import android.media.projection.MediaProjectionManager import android.os.Binder import android.os.Build -import android.os.Handler import android.os.IBinder -import android.os.Looper import android.util.Log import com.casic.endoscope.R import com.pengxh.kt.lite.extensions.getSystemService -import kotlinx.coroutines.Runnable +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class ScreenShortRecordService : Service() { @@ -40,24 +42,27 @@ } fun startRecorder(videoPath: String, intent: Intent) { - Log.d(kTag, "startRecorder: 开始录屏 $videoPath") - //开启通知,并申请成为前台服务 - createForegroundNotification() + CoroutineScope(Dispatchers.Main).launch { + Log.d(kTag, "startRecorder: 开始录屏 $videoPath") + //开启通知,并申请成为前台服务 + createForegroundNotification() - val mediaProjectionManager = getSystemService() - //获得令牌 - mediaProjection = mediaProjectionManager?.getMediaProjection(Activity.RESULT_OK, intent) - Handler(Looper.myLooper()!!).postDelayed(Runnable { - //配置MediaRecorder - if (configMediaRecorder(videoPath)) { - try { - //开始录屏 - recorder?.start() - } catch (e: Exception) { - e.printStackTrace() + val mediaProjectionManager = getSystemService() + //获得令牌 + mediaProjection = mediaProjectionManager?.getMediaProjection(Activity.RESULT_OK, intent) + withContext(Dispatchers.IO) { + delay(500) + //配置MediaRecorder + if (configMediaRecorder(videoPath)) { + try { + //开始录屏 + recorder?.start() + } catch (e: Exception) { + e.printStackTrace() + } } } - }, 400) + } } private fun createForegroundNotification() { @@ -123,14 +128,21 @@ //停止录制 fun stopRecorder() { - recorder?.stop() - recorder?.release() - recorder = null + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.IO) { + try { + recorder?.stop() + recorder?.release() + recorder = null - mediaProjection?.stop() - - //退出前台服务 - stopForeground(true) - Log.d(kTag, "stopRecorder: 结束录屏") + mediaProjection?.stop() + } catch (e: Exception) { + e.printStackTrace() + } + } + //退出前台服务 + stopForeground(true) + Log.d(kTag, "stopRecorder: 结束录屏") + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/utils/FileManager.kt b/app/src/main/java/com/casic/endoscope/utils/FileManager.kt index 8e2e76f..f6424a2 100644 --- a/app/src/main/java/com/casic/endoscope/utils/FileManager.kt +++ b/app/src/main/java/com/casic/endoscope/utils/FileManager.kt @@ -15,7 +15,6 @@ Log.d(kTag, "createRootDirectory: 新建文件夹") directory.mkdirs() } - Log.d(kTag, "createRootDirectory: $directory") return directory } diff --git a/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt b/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt index 765db08..6db7faa 100644 --- a/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt +++ b/app/src/main/java/com/casic/endoscope/service/ScreenShortRecordService.kt @@ -14,13 +14,15 @@ import android.media.projection.MediaProjectionManager import android.os.Binder import android.os.Build -import android.os.Handler import android.os.IBinder -import android.os.Looper import android.util.Log import com.casic.endoscope.R import com.pengxh.kt.lite.extensions.getSystemService -import kotlinx.coroutines.Runnable +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class ScreenShortRecordService : Service() { @@ -40,24 +42,27 @@ } fun startRecorder(videoPath: String, intent: Intent) { - Log.d(kTag, "startRecorder: 开始录屏 $videoPath") - //开启通知,并申请成为前台服务 - createForegroundNotification() + CoroutineScope(Dispatchers.Main).launch { + Log.d(kTag, "startRecorder: 开始录屏 $videoPath") + //开启通知,并申请成为前台服务 + createForegroundNotification() - val mediaProjectionManager = getSystemService() - //获得令牌 - mediaProjection = mediaProjectionManager?.getMediaProjection(Activity.RESULT_OK, intent) - Handler(Looper.myLooper()!!).postDelayed(Runnable { - //配置MediaRecorder - if (configMediaRecorder(videoPath)) { - try { - //开始录屏 - recorder?.start() - } catch (e: Exception) { - e.printStackTrace() + val mediaProjectionManager = getSystemService() + //获得令牌 + mediaProjection = mediaProjectionManager?.getMediaProjection(Activity.RESULT_OK, intent) + withContext(Dispatchers.IO) { + delay(500) + //配置MediaRecorder + if (configMediaRecorder(videoPath)) { + try { + //开始录屏 + recorder?.start() + } catch (e: Exception) { + e.printStackTrace() + } } } - }, 400) + } } private fun createForegroundNotification() { @@ -123,14 +128,21 @@ //停止录制 fun stopRecorder() { - recorder?.stop() - recorder?.release() - recorder = null + CoroutineScope(Dispatchers.Main).launch { + withContext(Dispatchers.IO) { + try { + recorder?.stop() + recorder?.release() + recorder = null - mediaProjection?.stop() - - //退出前台服务 - stopForeground(true) - Log.d(kTag, "stopRecorder: 结束录屏") + mediaProjection?.stop() + } catch (e: Exception) { + e.printStackTrace() + } + } + //退出前台服务 + stopForeground(true) + Log.d(kTag, "stopRecorder: 结束录屏") + } } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/utils/FileManager.kt b/app/src/main/java/com/casic/endoscope/utils/FileManager.kt index 8e2e76f..f6424a2 100644 --- a/app/src/main/java/com/casic/endoscope/utils/FileManager.kt +++ b/app/src/main/java/com/casic/endoscope/utils/FileManager.kt @@ -15,7 +15,6 @@ Log.d(kTag, "createRootDirectory: 新建文件夹") directory.mkdirs() } - Log.d(kTag, "createRootDirectory: $directory") return directory } diff --git a/app/src/main/java/com/casic/endoscope/view/MainActivity.kt b/app/src/main/java/com/casic/endoscope/view/MainActivity.kt index 768bffb..dbf0e8b 100644 --- a/app/src/main/java/com/casic/endoscope/view/MainActivity.kt +++ b/app/src/main/java/com/casic/endoscope/view/MainActivity.kt @@ -149,6 +149,7 @@ val videoPath = "/${FileManager.getVideoFileDir()}/${timeFormat.format(Date())}.mp4" data?.let { screenShortService?.startRecorder(videoPath, it) + binding.videoStateView.visibility = View.VISIBLE } } }