当前位置: 首页 > news >正文

安卓屏保调试

安卓屏保调试 - Wesley’s Blog

先看一下在设置点击屏保预览后的调用链(Android 14)

User MaterialButton View DreamSettings DreamBackend 点击按钮( performClick()) performClick() 触发 onClick() (lambda 表达式) 调用 preview() User MaterialButton View DreamSettings DreamBackend

DreamController的打印信息

Starting dream: name=ComponentInfo{com.google.android.apps.tv.dreamx/com.google.android.apps.tv.dreamx.service.Backdrop}, isPreviewMode=true, canDoze=false, userId=0, reason=‘test dream’

DreamActivity是一个不需要注册的Activity,运行在各个屏保进程。

屏保应用实现DreamService即可。

屏保状态时,后台起应用会进入 onStop 状态(该例子 onStop 里面调用了 finish)

img

退出屏保的方法

1、有触摸或者按键输入

2、配置config_dismissDreamOnActivityStart 为 true 则会在新 activity 起来后退出屏保

 <!-- Whether to dismiss the active dream when an activity is started. Doesn't apply to

          assistant activities (ACTIVITY_TYPE_ASSISTANT) -->

<bool name="config_dismissDreamOnActivityStart">false</bool>

img

img

3、跨进程调用DreamManagerService 的awaken(需要系统签名)

import android.os.IBinder
import androidx.annotation.RequiresPermission

class DreamManager {
    private val TAG = "DreamManager"
    //private var mDreamManager: Any? = context.getSystemService("dream")
    private var mDreamManager: Any? = null

    init {
        mDreamManager = try {
            val dream = Reflector.on("android.os.ServiceManager").method("getService", String::class.java).call<Any>("dreams")
            Reflector.on("android.service.dreams.IDreamManager\$Stub").method("asInterface", IBinder::class.java).call<Any>(dream)
        } catch (e: Exception) {
            null
        }
    }

    @RequiresPermission("android.permission.READ_DREAM_STATE")
    fun isDreaming(): Boolean {
        if (mDreamManager == null) {
            return false
        }
        return try {
            Reflector.with(mDreamManager!!).method("isDreaming").call()
        } catch (e: Exception) {
            false
        }
    }

    @RequiresPermission("android.permission.WRITE_DREAM_STATE")
    fun stopDream() {
        mDreamManager?.let {
            try {
                Reflector.with(it).method("awaken").call<Unit>()
            } catch (e: Exception) {
            }
        }
    }
}

屏保调试命令:cmd dreams

roc_rk3588s_pc:/ # cmd dreams -h

Dream manager (dreams) commands:

help

​ Print this help text.

start-dreaming

​ Start the currently configured dream.

stop-dreaming

​ Stops any active dream

cmd dreams start-dreaming

cmd dreams stop-dreaming

http://www.dtcms.com/a/73211.html

相关文章:

  • 五子棋小游戏-简单开发版
  • 【数据分析】读取文件
  • 部署 T-Pot:构建高级威胁捕获与分析平台的精妙指南
  • DNS服务和实验
  • uniapp 多环境配置打包,比较优雅的解决方案,全网相对优解
  • 自动化立体仓库堆垛机HMI屏幕程序施耐德HMIGXU系列 Vijeo Designer功能设计
  • 【为什么游戏能使人上瘾】
  • Windows安全日志Defender 的配置被修改5007
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(53)炼妖壶收子集 - 子集问题(位运算与回溯)
  • transformer入门详解
  • 设计模式之原型模式:原理、实现与应用
  • python习题卷1
  • 【从零开始学习计算机科学】算法分析(一)算法、渐进分析、递归分析
  • JAVA实战开源项目:教学辅助平台(Vue+SpringBoot) 附源码
  • Word:双栏排版操作步骤及注意事项
  • 3个 Vue $set 的应用场景
  • 查询MySQL表占用磁盘大小的方法
  • 重生之我在学Vue--第14天 Vue 3 国际化(i18n)实战指南
  • vue-常用指令 | 常用指令的修饰符
  • DNS查询
  • Mysql与ElasticSearch间的数据同步场景模拟
  • Blender-MCP服务源码4-初始化项目解读
  • 算法——先序中序还原二叉树
  • ubuntu测试指定文件夹的读写速度
  • 深度学习-145-Text2SQL之基于官方提示词模板进行交互
  • VMware安装Centos
  • leetcode日记(100)填充每个节点的下一个右侧节点指针
  • go程序调用k8s pod副本的名称IP手动赋值给configmap的参数
  • 麒麟服务器操作系统Go环境部署手册
  • 麒麟服务器操作系统Redis部署手册