You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Accessibility Service调用GLOBAL_ACTION_LOCK_SCREEN实现锁屏(Kotlin)

使用Accessibility Service实现锁屏(Kotlin)

步骤1:创建Accessibility Service配置文件

在res/xml目录下新建accessibility_service_config.xml,配置服务的基础信息:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:description="@string/accessibility_service_description" />

同时在strings.xml中添加对应的描述字符串:

<string name="accessibility_service_description">本服务用于实现一键锁屏功能</string>

步骤2:实现Accessibility Service类

新建Kotlin类LockScreenAccessibilityService,继承AccessibilityService:

class LockScreenAccessibilityService : AccessibilityService() {

    override fun onAccessibilityEvent(event: AccessibilityEvent?) {
        // 锁屏功能无需处理Accessibility事件,留空即可
    }

    override fun onInterrupt() {
        // 服务中断时的逻辑,锁屏场景下无需额外处理
    }

    // 对外暴露锁屏方法
    fun lockScreen() {
        // 调用系统全局锁屏动作
        performGlobalAction(GLOBAL_ACTION_LOCK_SCREEN)
    }

    // 用于绑定服务的Binder
    inner class LocalBinder : Binder() {
        fun getService(): LockScreenAccessibilityService = this@LockScreenAccessibilityService
    }

    override fun onBind(intent: Intent?): IBinder {
        return LocalBinder()
    }
}

步骤3:在Manifest中注册Service

在AndroidManifest.xml的<application>标签内注册该服务:

<service
    android:name=".LockScreenAccessibilityService"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/accessibility_service_config" />
</service>

步骤4:引导用户开启Accessibility权限

Accessibility服务需要用户手动在系统设置中开启,你可以添加引导逻辑:

// 跳转到Accessibility设置页面
fun openAccessibilitySettings(context: Context) {
    val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
    context.startActivity(intent)
}

// 检查权限是否已开启
fun isAccessibilityServiceEnabled(context: Context): Boolean {
    val serviceInfo = ComponentName(context, LockScreenAccessibilityService::class.java)
    val enabledServices = Settings.Secure.getString(
        context.contentResolver,
        Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES
    )
    return enabledServices?.contains(serviceInfo.flattenToString()) == true
}

调用锁屏功能

权限开启后,通过绑定服务调用锁屏方法:

private var lockScreenService: LockScreenAccessibilityService? = null
private val serviceConnection = object : ServiceConnection {
    override fun onServiceConnected(className: ComponentName, service: IBinder) {
        val binder = service as LockScreenAccessibilityService.LocalBinder
        lockScreenService = binder.getService()
        // 执行锁屏
        lockScreenService?.lockScreen()
    }

    override fun onServiceDisconnected(arg0: ComponentName) {
        lockScreenService = null
    }
}

// 绑定服务
fun bindLockScreenService(context: Context) {
    val intent = Intent(context, LockScreenAccessibilityService::class.java)
    context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE)
}

注意事项

  • Accessibility属于敏感权限,必须用户手动开启,无法通过代码直接申请
  • 部分定制ROM可能对Accessibility服务有额外限制,需确保服务能被正常选中
  • GLOBAL_ACTION_LOCK_SCREEN支持Android 4.0+(API 14),兼容性较好

内容的提问来源于stack exchange,提问作者Irakli Jobava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:50:15