Feat: Android client Phase 0-3 full implementation
This commit was merged in pull request #3.
This commit is contained in:
1 parent
837d89c8b5
commit
45553ec5b6
53 files changed
+3321
-27
No files matched your search
@@ -0,0 +1,65 @@
|
||||
package com.yama.client
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.media.projection.MediaProjectionManager
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
|
||||
private val serverIp = "91.99.165.207"
|
||||
private val serverPort = 443
|
||||
|
||||
private lateinit var projectionManager: MediaProjectionManager
|
||||
|
||||
companion object {
|
||||
const val REQUEST_MEDIA_PROJECTION = 1001
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
// MA-01 fix: 系统重建 Activity 时 savedInstanceState != null,
|
||||
// 此时 CaptureService 可能已在运行,不重复弹权限对话框
|
||||
if (savedInstanceState != null) { finish(); return }
|
||||
projectionManager = getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
|
||||
startActivityForResult(projectionManager.createScreenCaptureIntent(), REQUEST_MEDIA_PROJECTION)
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (requestCode == REQUEST_MEDIA_PROJECTION) {
|
||||
if (resultCode == Activity.RESULT_OK && data != null) {
|
||||
Log.i(CaptureService.TAG, "MediaProjection permission granted")
|
||||
val intent = Intent(this, CaptureService::class.java).apply {
|
||||
putExtra(CaptureService.EXTRA_SERVER_IP, serverIp)
|
||||
putExtra(CaptureService.EXTRA_SERVER_PORT, serverPort)
|
||||
putExtra(CaptureService.EXTRA_PROJECTION_RESULT, resultCode)
|
||||
putExtra(CaptureService.EXTRA_PROJECTION_DATA, data)
|
||||
}
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
startForegroundService(intent)
|
||||
} else {
|
||||
startService(intent)
|
||||
}
|
||||
} else {
|
||||
Log.w(CaptureService.TAG, "MediaProjection permission denied, starting without capture")
|
||||
val intent = Intent(this, CaptureService::class.java).apply {
|
||||
putExtra(CaptureService.EXTRA_SERVER_IP, serverIp)
|
||||
putExtra(CaptureService.EXTRA_SERVER_PORT, serverPort)
|
||||
}
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
startForegroundService(intent)
|
||||
} else {
|
||||
startService(intent)
|
||||
}
|
||||
}
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user