网上有很多牛人研究 Launcher,说的都不错,但是个人还是觉得在技术方面还是各抒己见的为好,毕竟每个人研究的面不一样,借此,也想为自己做个笔记。

本博客主要是基于 android2.3.7 的源码研究 Launcher,开发工具依然使用 Eclipse(见过很多大牛直接使用文本编辑器,抛弃IDE),编译测试环境选择 ubuntu ,测试效果采用模拟器。

关于 Launcher 的初步介绍以及 Launcher 源码结构,建议大家动手动眼去搜搜、看看,这里不再赘述!

看过基本的知识之后,大家就可以下载源码,博客 http://blog.csdn.net/androidbluetooth/article/details/6538254 说了如何下载 android2.3.7 的源码,然后就可以编译源码。

注意:源码开发,你首先需要编译源码,然后才可以编译某一个模块比如 Launcher。

长按 Home 可以弹出下面的 Dialog(图 1)

其中有一项就是选择 “壁纸”,当选择之后,出现一个选择器(不是 Dialog)哟!(图 2)

这个时候,你可以选择是一般的壁纸,还是比较炫的动态壁纸或者是从设备中寻找存在的照片(如果没有还可以照相)等。

那麽代码是如何调用的呢?看下图:

调用关系不算复杂,当然我们还可以使用菜单来启用添加选项,最终还是调用

startWallpaper

方法。

那麽在这个方法中,到底发生什么呢?研究源码。

 private void startWallpaper() {closeAllApps(true);final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);Intent chooser = Intent.createChooser(pickWallpaper,getText(R.string.chooser_wallpaper));// NOTE: Adds a configure option to the chooser if the wallpaper supports it//       Removed in Eclair MR1
//        WallpaperManager wm = (WallpaperManager)
//                getSystemService(Context.WALLPAPER_SERVICE);
//        WallpaperInfo wi = wm.getWallpaperInfo();
//        if (wi != null && wi.getSettingsActivity() != null) {
//            LabeledIntent li = new LabeledIntent(getPackageName(),
//                    R.string.configure_wallpaper, 0);
//            li.setClassName(wi.getPackageName(), wi.getSettingsActivity());
//            chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { li });
//        }startActivityForResult(chooser, REQUEST_PICK_WALLPAPER);}

原来如此,其实是根据 Intent 调用相关的 Activity。


final Intent pickWallpaper = new Intent(Intent.ACTION_SET_WALLPAPER);Intent chooser = Intent.createChooser(pickWallpaper,getText(R.string.chooser_wallpaper));

首先,你得搞清楚 Intent.ACTION_SET_WALLPAPER 表示什么含义以及它的真实值,这查看 API 文档就会明白。

public static final String ACTION_SET_WALLPAPERSince: API Level 1
Activity Action: Show settings for choosing wallpaper
Input: Nothing.
Output: Nothing.
Constant Value: "android.intent.action.SET_WALLPAPER"

该 Intent 常量是一个 String,表示启用设置壁纸的 Activity,也就是说只要我们的系统中有这样的 Activity(action 为 android.intent.action.SET_WALLPAPER)就可以出现在选择器中。

那麽,原生的 android 系统中有三个(从图2可以看出)这样的 Activity,下面细细说来!

1. WallpaperChooser.java

这是 Launcher 中的一个类,主要是选择壁纸的操作,和 Launcher.java 在一个包下面。通过 Launcher 的 Manifest.xml 文件就可以看到答案:

</activity>
<activity android:name="com.android.launcher2.WallpaperChooser" android:label="@string/pick_wallpaper" android:icon="@drawable/ic_launcher_wallpaper" android:screenOrientation="nosensor" android:finishOnCloseSystemDialogs="true">
<intent-filter>
<action android:name="android.intent.action.SET_WALLPAPER"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

2. LiveWallpaperListActivity.java

位于  /packages/wallpapers/LivePicker/src/com/android/wallpaper/livepicker 下面,主要是选择动态壁纸。其 Manifest.xml 文件:

<activity android:name="LiveWallpaperListActivity"android:icon="@drawable/ic_launcher_live_wallpaper"android:label="@string/live_wallpaper_picker_title"android:theme="@android:style/Theme.NoTitleBar"android:screenOrientation="nosensor"><intent-filter><action android:name="android.service.wallpaper.LIVE_WALLPAPER_CHOOSER" /><action android:name="android.intent.action.SET_WALLPAPER" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

3. Photographs.java

在以前的版本中,android 使用的是Gallery,现在改变为 Gallery3D,位于 /packages/apps/Gallery3D/src/com/cooliris/media,对应的 Manifest.xml 文件可自行查阅。

至此,明白了选择壁纸所发生的故事了。

接下来,你可以按照 android opensource: 源码开发基础 改变代码运行试一试了,实践最重要!好运!

推荐几篇好文章:

Android原理揭秘系列之一动态墙纸

Launcher修改默认壁纸(default_wallpaper)

Launcher: 设置壁纸_源码跟踪相关推荐

  1. Android Launcher 设置壁纸

    版本:1.0  日期:2014.11.25 2014.11.26 版权:©kince 特别推荐:泡在网上的日子 一.概述 一般Launcher都带有壁纸设置的功能,Android提供了设置壁纸的API ...

  2. 基于OpenGL的雷达P显的系统设计与仿真 PPI_雷达仿真_雷达模拟器_雷达目标_雷达ppi_PPI显示器_源码

    基于OpenGL 开发的雷达P显 可以设置各种参数 源码下载链接 PPI_雷达仿真_雷达模拟器_雷达目标_雷达ppi_PPI显示器_源码-C++文档类资源-CSDN下载

  3. android浪漫樱花凋零动态壁纸应用源码

    android浪漫樱花凋零动态壁纸应用源码,是从那个安卓教程网拿过来的,本项目是一套基于安卓的樱花动态壁纸项目源码,安装以后桌面没有图标,但是可以在修改壁纸-动态壁纸中找到.我的分辨率是480×854 ...

  4. QT_文本编辑器_源码下载

    QT_文本编辑器_源码下载 源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光 ...

  5. 模仿Hibernate的逆向工程_java版_源码下载

    在这篇blog:"Hibernate逆向工程原理_java版本"中谈到了Hibernate逆向工程原理. 我喜欢理论和实践相结合....so,今天我试着模仿hibernate的逆向 ...

  6. FreeMarker_模板引擎_代码自动生成器_源码下载

    首先我们先来认识一下Freemarker 1.what is the FreeMarker? 你可以到freemarker的官网上去,那里有很详细的介绍:http://freemarker.org/ ...

  7. 百度SEO站群wordpress设置网站TDK源码插件

    发一款wordpress设置网站TDK源码插件,也就是设置网站的标题.描述.关键词,设置网站的基本三要素.有利于站点的SEO,也就是这个啦~如图 wordpress默认安装后只带了title(标题)而 ...

  8. spring session spring:session:sessions:expires 源码跟踪

    2019独角兽企业重金招聘Python工程师标准>>> spring session spring:session:sessions:expires 源码跟踪 博客分类: sprin ...

  9. 很好用的壁纸网站源码分享,仅供学习,请勿商用。

    分享一个壁纸网站源码,无需安装,修改之后就可很好使用. 集合360壁纸,百度壁纸,必应壁纸,简单好用. 演示地址:http://www.toqia.com/bizhi/ 好用的话,记得点赞哦. 百度网 ...

最新文章

  1. pythonapp下载-python编程狮app下载
  2. 解读“中国数字人民币的研发进展白皮书“
  3. 网页版登录入口_企业微信网页版怎么登录?企业微信客户端和网页版有什么区别?...
  4. 操作系统与数据库知识点
  5. mysql表单查询_MySQL表单集合查询
  6. 面试题字符集和编码区别_您和理想工作之间的一件事-编码面试!
  7. 我在小程序工程化方面的一些实践
  8. guns 最新开源框架企业版下载_国内比较火的5款Java微服务开源项目
  9. 信息学奥赛一本通(1189:Pell数列)
  10. YUV / RGB 格式及快速转换算法
  11. [转载] python中numpy.concatenate()函数的使用
  12. Selpg—Golang
  13. centos yum 国内源
  14. 推动铅蓄电池绿色“转身”
  15. 微信小程序记录与项目实践
  16. Scala基础知识(个人总结)
  17. 电脑其实很好玩,玩好了其实很无耻
  18. U-Boot 启动过程和源码分析(第一阶段)
  19. GSM系统框架结构与组成讲解
  20. 【第1131期】对于网络爬虫技术的攻与防

热门文章

  1. 移动光纤开通的时候,绑定了mac地址,怎么用路由器连接
  2. winform的Textbox设置只读之后ForeColor无效的解决方法
  3. AndroidStudio 中 buildSrc/src/main/groovy 的构建
  4. 【架构师】解决方案架构师常用的5种类型架构图
  5. 软件测试之postman
  6. 【MM32F5270开发板试用】RT-Thread SPI 驱动适配指南
  7. opencv生成3d模型_OCR深度实践系列:数据生成
  8. 山洪灾害声光电监测系统解决方案
  9. python读取txt文件内容,写入csv文件中去。
  10. android秒表课程设计,电子秒表电路课程设计.doc