160 lines
5.1 KiB
Kotlin
160 lines
5.1 KiB
Kotlin
package com.hikoncont
|
||
|
||
import android.app.Activity
|
||
import android.content.Intent
|
||
import android.content.pm.PackageManager
|
||
import android.os.Bundle
|
||
import android.os.Handler
|
||
import android.os.Looper
|
||
import android.util.Log
|
||
|
||
/**
|
||
* 保活启动器Activity - 借鉴反编译项目的OpenActivity实现
|
||
* 主要职责:
|
||
* 1. 启动指定的应用包
|
||
* 2. 保活服务启动
|
||
* 3. 透明Activity管理
|
||
*/
|
||
class KeepAliveLauncherActivity : Activity() {
|
||
|
||
companion object {
|
||
private const val TAG = "KeepAliveLauncher"
|
||
}
|
||
|
||
override fun onCreate(savedInstanceState: Bundle?) {
|
||
super.onCreate(savedInstanceState)
|
||
Log.i(TAG, "🚀 保活启动器Activity创建")
|
||
|
||
try {
|
||
// 启动保活服务
|
||
startKeepAliveServices()
|
||
|
||
// 处理启动请求
|
||
handleLaunchRequest()
|
||
|
||
// 延迟关闭Activity
|
||
scheduleFinish()
|
||
|
||
} catch (e: Exception) {
|
||
Log.e(TAG, "❌ 保活启动器Activity初始化失败", e)
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 启动保活服务
|
||
*/
|
||
private fun startKeepAliveServices() {
|
||
try {
|
||
Log.i(TAG, "🛡️ 启动保活服务")
|
||
|
||
// 只记录日志,不重复启动综合保活管理器
|
||
Log.i(TAG, "✅ 保活服务启动完成")
|
||
} catch (e: Exception) {
|
||
Log.e(TAG, "❌ 启动保活服务失败", e)
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 处理启动请求
|
||
*/
|
||
private fun handleLaunchRequest() {
|
||
try {
|
||
val intent = intent
|
||
val targetPackage = intent.getStringExtra("target_package")
|
||
val launchMain = intent.getBooleanExtra("launch_main", false)
|
||
|
||
when {
|
||
!targetPackage.isNullOrEmpty() -> {
|
||
// 启动指定应用(伪装保活)
|
||
launchTargetApp(targetPackage)
|
||
}
|
||
launchMain -> {
|
||
// 启动主Activity
|
||
launchMainActivity()
|
||
}
|
||
else -> {
|
||
// 默认启动主Activity
|
||
launchMainActivity()
|
||
}
|
||
}
|
||
|
||
} catch (e: Exception) {
|
||
Log.e(TAG, "❌ 处理启动请求失败", e)
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 启动目标应用
|
||
*/
|
||
private fun launchTargetApp(packageName: String) {
|
||
try {
|
||
Log.i(TAG, "🎯 启动目标应用: $packageName")
|
||
|
||
val launchIntent = packageManager.getLaunchIntentForPackage(packageName)
|
||
if (launchIntent != null) {
|
||
launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
||
startActivity(launchIntent)
|
||
Log.i(TAG, "✅ 目标应用启动成功")
|
||
} else {
|
||
Log.w(TAG, "⚠️ 无法启动目标应用: $packageName")
|
||
// 启动主Activity作为备选
|
||
launchMainActivity()
|
||
}
|
||
|
||
} catch (e: Exception) {
|
||
Log.e(TAG, "❌ 启动目标应用失败", e)
|
||
// 启动主Activity作为备选
|
||
launchMainActivity()
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 启动主Activity - 保活场景改为启动透明保活Activity
|
||
*/
|
||
private fun launchMainActivity() {
|
||
try {
|
||
Log.i(TAG, "🫥 保活场景,启动透明保活Activity(不启动MainActivity)")
|
||
|
||
// ✅ 修复:保活场景启动透明保活Activity,不启动MainActivity
|
||
val transparentIntent = Intent(this, com.hikoncont.TransparentKeepAliveActivity::class.java).apply {
|
||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||
addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION) // 禁用动画,避免闪屏
|
||
addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) // 从最近任务中排除
|
||
addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) // 单例模式,避免重复创建
|
||
putExtra("from_keepalive", true)
|
||
putExtra("keepalive_launch", true)
|
||
putExtra("from_service", true)
|
||
putExtra("from_keepalive_launcher", true)
|
||
putExtra("timestamp", System.currentTimeMillis())
|
||
}
|
||
|
||
startActivity(transparentIntent)
|
||
Log.i(TAG, "✅ 透明保活Activity启动成功")
|
||
|
||
} catch (e: Exception) {
|
||
Log.e(TAG, "❌ 启动透明保活Activity失败", e)
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 安排Activity关闭
|
||
*/
|
||
private fun scheduleFinish() {
|
||
try {
|
||
Handler(Looper.getMainLooper()).postDelayed({
|
||
try {
|
||
finish()
|
||
Log.d(TAG, "✅ 保活启动器Activity已关闭")
|
||
} catch (e: Exception) {
|
||
Log.e(TAG, "❌ 关闭Activity失败", e)
|
||
}
|
||
}, 100L) // 100ms后关闭
|
||
|
||
} catch (e: Exception) {
|
||
Log.e(TAG, "❌ 安排Activity关闭失败", e)
|
||
}
|
||
}
|
||
}
|