Files
and-bak/app/src/main/java/com/hikoncont/KeepAliveLauncherActivity.kt

160 lines
5.1 KiB
Kotlin
Raw Normal View History

2026-02-11 16:59:49 +08:00
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)
}
}
}