博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android4.2 原生bug,Daydream 中 点击DeskClock 中的settings button crash
阅读量:5331 次
发布时间:2019-06-15

本文共 1233 字,大约阅读时间需要 4 分钟。

DisplayàDaydream勾选Clock,点击旁边的Settings button,出现”Settings已终止”;

 

解决思路

1. 进入package/apps/Settings/src/com/android/settings/DisplaySettings.java

找到他加载的preference.xml  为display_settings

2 查找xml/display_setting内容   很明显可以知道 Daydream对应的preference为screensaver

其对应的标签fragement 为"com.android.settings.DreamSettings" 说明点击Daydream会直接进入这个类

3 查看com.android.settings.DreamSettings 因为界面内容类似ListView,所以找到相关Adapter的getView,从中找到相应的setting button

   对应的事件时调用DreamBacked.launchSettings

4 进入DreamBacked.java 中的launchSettings方法,直接通过设置Compoment启用intent,Compoment数据从getSettiingsCompoment获取

getSettiingsCompoment 执行 XmlResourceParser parser = resolverInfo.serviceinfo.loadXmlMedaData(pm.DreamService.Dream.META_DATA)

加载相关xml,解析其中的数据v

其中 resolver 在getDreamInfos函数中是过滤了Intent action为DreamService.SERVICE_Interface(android.service.dreams.DreamService)

和PackageManager.get_META_DATA,

然后就去系统所有的AndroidManifest搜索Intent 为"android.service.dreams.DreamService" ,DeskClock正好找到,并且meta_data 中指定了所需解析的xml文件,在xml/dream_info中的内容就是需要的compoment

我们发现其内容为“com.google.android.deskclock/com.android.deskclock.ScreensaverSettingsActivity”

很明星包名中的红色字体是多余的

收获:从解这个问题,也可以知道Android中的某个app是可以解析其他app的xml文件的  通过intent和meta_data来关联

转载于:https://www.cnblogs.com/minzi/archive/2013/03/22/2976102.html

你可能感兴趣的文章
Springboot使用alibaba的fastJson,@JSONField不起作用的问题
查看>>
数据库的基础语句-创建数据库、创建表、添加各种约束-扫盲一
查看>>
同一个IP不同端口号使用session失效
查看>>
迭代器模式 -- 大话设计模式
查看>>
数据库中插入记录
查看>>
Linux、Unix学习1
查看>>
java面试题之----String的intern
查看>>
C#读取配置和资源文件
查看>>
SVN源码服务器搭建
查看>>
5种Redis数据结构详解
查看>>
Java/Android开发规范——变量和常量命名
查看>>
Neutron:LBaaS v2
查看>>
Java MD5加密类
查看>>
获取用户地理位置
查看>>
javascript事件流的原理
查看>>
网页中屏蔽鼠标右键
查看>>
Java线程
查看>>
Http协议
查看>>
LeetCode -- Ugly Number
查看>>
jquery中prop()方法和attr()方法的区别
查看>>