Android原生模块Launcher分析
- 格式:docx
- 大小:399.84 KB
- 文档页数:17
Launcher2详细分析 Launcher2功能介绍 Launcher2是在Android 系统原生的启动界面,也就是我们所说的HomeScreen,可以把他理解为Windows中的Explorer.exe,它是主要功能有: 1、设置墙壁纸 2、显示系统安装应用程序图标 3、提供应用程序入口 4、提供手机设置入口 5、桌面切换 6、添加widget 7、添加快捷方程式 8、添加Folder 9、拖动图标的位置 10、删除图标 11、显示桌面
Launcher2结构图
整个homescreen是一个包含三个child view的FrameLayout(com.android.launcher.DragLayer)。 第一个child就是桌面com.android.launcher.Workspace。这个桌面又包含三个child。每个child就对应一个桌 面。这就是你在Android上看到的三个桌面。每个桌面上可以放置下列对象:应用快捷方式,appwidget和folder。 第二个child是一个SlidingDrawer控件,这个控件由两个子控件组成。一个是 com.android.launcher.HandleView,就是Android桌面下方的把手,当点击这个把手时,另一个子控 件,com.android.launcher.AllAppsGridView就会弹出,这个子控件列出系统中当前安装的所有类型为 category.launcher的Activity。 第三个child是com.android.launcher.DeleteZone。当用户在桌面上长按一个widget时,把手位置就会出现一个垃圾桶形状的控件,就是这个控件。 在虚拟桌面上可以摆放四种类型的对象: 1. ITEM_SHORTCUT,应用快捷方式 2. ITEM_APPWIDGET,app widget 3. ITEM_LIVE_FOLDER,文件夹 4. ITEM_WALLPAPER,墙纸。
AndroidManifest.xml分析 需要权限: android.permission.CALL_PHONE 允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认 android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,Android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.GET_TASKS 允许一个程序获取信息有关当前或最近运行的任务,一个缩略的任务状态,是否活动等等 android.permission.READ_CONTACTS 允许程序读取用户联系人数据 android.permission.SET_WALLPAPER 允许程序设置壁纸 android.permission.SET_WALLPAPER_HINTS 允许程序设置壁纸hints android.permission.VIBRATE 允许访问振动设备 android.permission.WRITE_SETTINGS 允许程序读取或写入系统设置 android.permission.BIND_APPWIDGET允许程序通过 AppWidget 服务访问 AppWidget的数据
注册的Activity:launcher中注册了两个Activity,一个是launcher,一个是WallPaperChooser Launcher Activity: android:name="com.jimmy.launcher2.Launcher" android:launchMode="singleTask" 启动模式为singleTask,如果发现有对应的Activity实例,则使此Activity实例之上的其他Activity实例统统出栈,使此Activity实例成为栈顶对象,显示到幕前。 android:clearTaskOnLaunch="true" 这个参数意思是无论何时这个activity都会从home screen重新启动,也就是只要你按了桌面的图标,这个活动就是第一个发起的。但是唯一要注意的是如果你按下的是home建 那么意味着这个活动没有结束,所以你在按有时候就不会第一次发起了。只有当你按下back或者结束当前执行的任务之类代表能使activity结束的行为 这个活动都会第一次发起。 android:stateNotNeeded="true" android:theme="@style/Theme" 设置一个样式 android:screenOrientation="nosensor" 不适用传感器确定屏幕方向 android:windowSoftInputMode="stateUnspecified|adjustPan"> 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。 | 该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。
WallpaperChooser Activity: android:name="com.jimmy.launcher2.WallpaperChooser" android:label="@string/pick_wallpaper" android:icon="@drawable/ic_launcher_wallpaper" android:screenOrientation="nosensor" android:finishOnCloseSystemDialogs="true">
注册的接收器:快捷方式安装删除接收器 android:permission="com.jimmy.launcher2.permission.INSTALL_SHORTCUT">
android:permission="com.jimmy.launcher2.permission.UNINSTALL_SHORTCUT">
注册的Provider:Launcher的settings android:name="com.jimmy.launcher2.LauncherProvider" android:authorities="com.jimmy.launcher2.settings" android:writePermission="com.jimmy.launcher2.permission.WRITE_SETTINGS" android:readPermission="com.jimmy.launcher2.permission.READ_SETTINGS" /> android:name="com.jimmy.launcher2.permission.INSTALL_SHORTCUT" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="normal" android:label="@string/permlab_install_shortcut" android:description="@string/permdesc_install_shortcut" /> android:name="com.jimmy.launcher2.permission.UNINSTALL_SHORTCUT" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="normal" android:label="@string/permlab_uninstall_shortcut" android:description="@string/permdesc_uninstall_shortcut"/> android:name="com.jimmy.launcher2.permission.READ_SETTINGS" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="normal" android:label="@string/permlab_read_settings" android:description="@string/permdesc_read_settings"/> android:name="com.jimmy.launcher2.permission.WRITE_SETTINGS" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="normal" android:label="@string/permlab_write_settings" android:description="@string/permdesc_write_settings"/>
/>
类文件功能简明分析 AddAdapter.java 长按显示添加到桌面元素适配器,Shortcuts\Widgets\Folders\Wallpapers AllApps2D.java 2D方式显示程序列表,实现GridView,HomeButton AllApps3D.java 3D方式显示程序列表 AllAppsList.java 存储所有关于程序列表的信息 AllAppsView.java 定义了一个显示程序列表的接口 ApplicationInfo.java 继承至ItemInfo.java,在AllAppsView中显示Item BubbleTextView.java 桌面程序快捷方式,继承至TextView,在文本后面显示一个圆角气泡 CellLayout.java 屏幕网格化 ClippedImageView.java DeferredHandler.java DeleteZone.java 长按item出现的删除区域,继承自ImageView DragController.java 拖动控制接口 DragLayer.java 整个窗口的父对象,继承FrameLayout,实现接口DrayController,属于MVC中的V