Android桌面管理
引言
- Android系统提供了一个桌面—也就是用户启动后第一次看到的页面,如下图.从图中可以看出,桌面的作用类似于PC的桌面,桌面上放置一些常用的程序和功能.
- 在Android桌面上首先看到的是壁纸,也就是桌面上的那张图片,接着可以看到桌面上规则排列的多个图标,这些图标就是Android桌面控件,分别代表快捷方式与桌面控件;每个快捷方式占用桌面的一个摆放位置;桌面控件可以很大,一个桌面控件可以占据多个摆放位置
- Android系统提供了很好的扩展性,下面我将在改变系统壁纸,管理快捷方式,创建桌面控件三部分为大家介绍
改变壁纸介绍
- Android允许我们使用
WallpaperManager
来改变壁纸,在该对象中改变壁纸的方法如下:
其中setBitmap(Bitmap bitmap):将壁纸设置为bitmap所代表的的位图;
setReousrce(int resid):将壁纸设置为redis资源所代表的图片
setStream(Input data):将壁纸设置为data数据所代表的的图片 - 这种改变壁纸的方式
实际上是动态地设置不同的图片作为壁纸
,比较简单
改变壁纸-开发动态壁纸
- 所谓动态壁纸,就是指Android桌面不再是简单的图片,而是运行中的动画,这个动画是由程序实时绘制的,因此被称为动态壁纸
- 为了帮助我们开发动态壁纸,Android提供了
WallpaperService基类
,动态壁纸的实现类继承该基类.在Android应用中开发动态壁纸的步骤如下:
1)开发一个子类继承WallpaperService基类
2)继承WallpaperService基类时必须重写onCreateEngine()方法,该方法返回WallpaperService.Engine子类对象
3)我们还需要实现WallpaperService.Engine子类,并重写其中的onVisibilityChanged(boolean visible),onOffsetsChanged()方法 - 下面展示一下在代码中重写的两个重要方法
这两个方法就是重写的WallpaperService.Engine的onVisibilityChanged(),onOffsetsChanged()方法,并且指出了桌面显示时需要调用drawFrame()方法进行绘制,drawFrame方法绘制完成之后通过Handler对象指定0.1秒后重回
- 关于动画效果在代码中的实现
通过循环创建多个矩形,然后每次进行绘制的时候让count++,;并且程序中针对图形进行了位移和旋转变换,这样就能够保证达到一个动画效果 - 写完核心代码之后,需要在AndroidManifest.xml问配置该Serviced.这里需要注意的是,`配置动态壁纸Service与配置普通service有一点区别,需要指定如下两项
1) 指定运行动态壁纸,需要开启权限
2) 同时还要为动态壁纸设置meta-data配置 - 在上面AndroidManifest.xml中指定了将动态壁纸的meta-data放在了@xml/livewallpaper中定义,因此程序还需要在res/xml目录下增加一个livewallpaper.xml文件
- 进行如上的配置之后,我们可以通过运行模拟器看到初步的效果,能够简单实现一个动态效果,这也说明这种动态壁纸可以为我们提供在Android桌面上绘图的能力.
快捷方式
- 最新的Android允许为应用添加快捷方式:当用户长按图标时,系统会显示该应用的某几个功能的快速链接,用户可以通过快捷方式迅速打开应用的某个功能
- 添加快捷方式的方式
1) 静态方式:只需要通过AndroidManifest.xml文件配置即可添加快捷方式
2) 动态方式:通过ShortcutManager可以为应用动态添加,删除,更新快捷方式
快捷方式–静态添加
静态添加的主要操作
:
1)在主Activity中添加name为android.app.shortcuts的<meta-data…/>元素,该元素指定静态快捷方式的配置文件
2)为静态快捷方式添加配置文件- 下面是AndroidManifest.xml文件的配置部分
- 下面是在res/xml目录下配置的文件
- 编译运行应用时,在下图中任意图标长按即可显示静态快捷的标识,表示可以生成快捷键
桌面控件
- 所谓桌面控件,就是指能直接显示在Android系统桌面上的小程序,一般来说,我们可以把用户使用非常频繁的程序做成桌面控件,这样用户就可以直接在桌面上进行操作了
- 桌面控件是通过BroadcastReceiver的形式来进行控制的,因此每个桌面控件都对应于一个BroadcaseReceiver.为了简化桌面控件的开发,Android系统提供了一个AppWidgetProvider类,他是BroadcastReceiver的子类.
也就是说,我们开发桌面控件只需要继承AppWidgetProvider类
即可 - AppWidgetProvider提供了4个很重要的方法
onUpdate():负责更新桌面控件的方法;实现桌面控件通常会考虑重写该方法
onDeleted():当一个或多个桌面控件被删除时回调该方法
OnEnabled():当接收到ACTION_APPWIDGET_ENABLED Broadcast时回调该方法
onDisabled():当接收到ACTION_APPWIDGET_DISABLED Broadcast时回调该方法 - 对于下面的时钟小示例,只需要定义一个AppWidgetProvider的子类即可,并重写它的onUpdate()方法即可
1)创建一个RemoteViews对象,创建该对象时可以指定加载指定的页面布局文件
2)如果需要改变上一步所加载的界面布局文件的内容,则可以通过RemoteViews对象进行修改
3)创建一个ComponentName对象
&emsp4)调用AppWidgetManager更新桌面控件 - 添加桌面控件代码如下
- 由于AppWidgetProvider继承了BroadcastReceiver,因此,AppWidgetProvider的本质还是一个BroadcastReceiver,需要在AndroidManifest.xml中配置
- 在AndroidManifest.xml中指定了meta-data,需要在res/xml中添加该xml文件
- 最终启动应用后,长按桌面空白处,点击WIDGETS,然后找到控件,拖拽到桌面即可
总结
Android系统的桌面是用户每天接触最多的页面,将开发好的应用添加到桌面上不仅可以方便用户的使用,提高用户的好感度,而且还对产品具有积极影响.通过学习这一块可以了解到关于桌面管理的一些内容,感受到Android开发的过程,有助于提升自己的能力
作者:范成
原文地址:https://blog.csdn.net/weixin_47459979/article/details/106699488
Android桌面管理相关推荐
- android手机桌面管理,Android桌面管理
Android_launcher 最近在研究安卓桌面管理,顺便写个小桌面管家demo 下面是效果图: image image 桌面管家是对设备上的App进行定制动态管理,屏蔽所有系统设置入口,根据权限 ...
- Android桌面悬浮窗进阶,QQ手机管家小火箭效果实现
这次我们将代码的重点放在火箭升空的效果上,因此简单起见,就直接在模仿360手机卫士悬浮窗的那份代码的基础上继续开发了,如果你还没有看过那篇文章的话,建议先去阅读 Android桌面悬浮窗效果实现,仿3 ...
- Android内存管理机制
好文摘录 原作: https://www.cnblogs.com/nathan909/p/5372981.html 1.基于Linux内存管理 Android系统是基于Linux 2.6内核开发的开源 ...
- Android桌面悬浮窗口举例
概述 Android项目开发时,有时候需要开发一些悬浮在桌面上的视图.比如桌面小精灵,各种音乐播放器的悬浮播放控制栏等等.本文就借助一个小的demo,用代码的方式大概进行介绍. 原理 开发桌面悬浮窗口 ...
- Android 桌面图标添加未读消息角标APP角标最佳实践
Android 桌面图标添加未读消息角标APP角标最佳实践 本项目的完整演示代码 https://github.com/benchegnzhou/AndroidDevelomentArtDemo 最近 ...
- android 固件管理器,刷机精灵(原Android固件管理器桌面版)
详细介绍 刷机精灵的前身是固件管理器桌面版.目前刷机精灵已全面重写,它将是一个更为温馨易用和强大的刷机工具.待近期开发完毕后即可开始发布测试,届时希望各位机友持续给力哦! 刷机精灵是一款运行于PC端的 ...
- Android 桌面组件【app widget】 进阶项目--心情记录器
之前有一篇是初探 Android App Widget 的文章,今天继续对上一例子进行扩展,并完成了一个小项目,直接可以拿来使用.上篇文章地址:Android 桌面组件[widget]初探 ,未接触过 ...
- 推荐一款桌面管理神器
大家是否都会有这样的体验: 刚开始用电脑,桌面文件或软件比较少,看着比较整洁干净,让人还挺舒服的.可是随着时间的增长和工作需要等其他原因,于是需要安装一些软件或编写一些文档.而为了下次方便,几乎都是放 ...
- android 播放英强博客,Android内存管理、监测剖析
Android内存管理机制 Android内存管理主要有:LowMemory Killer机制,Ashmem,PMEM/ION及Native内存和Dalvik内存管理管理和JVM垃圾回收机制. Low ...
最新文章
- hadoop源代码组织结构与阅读技巧
- [转]PHP--优化PHP代码建议
- python入门编程题库-Python随笔30:Python基础编程练习题25~26
- Spring Web Flow 入门demo(二)与业务结合 附源码
- 如何通过http从linux下载文件,linux – 我可以通过http验证大量文件下载吗?
- Beta版本冲刺第二天
- ASP.NET MVC下的四种验证编程方式[续篇]
- 服务器进入bios用u盘启动不了系统,用u盘装系统,进入bios后没有usb启动项怎么办...
- java 纳秒 毫秒,时钟周期-秒、毫秒、微秒、纳秒之间的换算
- r语言 rgl 强制过程中_R语言中%||%是什么意思?
- Python+Selenium实现网页截图
- 民办教育未来10年的发展趋势
- java replace 忽略大小写_java替换字符串时忽略大小写
- 亲测绝对有用,,电脑不显示可连接WiFi列表,无法连接WiFi的解决办法。
- 安卓平板倍速_推荐:安卓上本地音频播放器,可实现5秒快进快退和倍速播放...
- 关于java实习心得总结(十篇)
- 业绩归因 绩效评估 - 各种收益率计算方法
- 下载的百度卫星地图如何与谷歌卫星地图叠加
- np.unwrap()函数
- 引入字体—web网页里面嵌入想要的字体文件
热门文章
- Selenium Webdriver——去哪儿网输入实例
- 5种网络隔离后的文件交换方式,哪种最安全便捷?
- TypeScript:any和unknown
- [APIO2015] T1巴厘岛的雕塑
- Unity 网页插件Embedded Browser的使用
- QtCreator报错 LNK1104:无法打开文件debug\.obj
- echarts中的zlevel和z的区别
- 投资欢喜传媒的B站,有着怎样的内容焦虑?
- 02 创建一个简单的Python Web程序应用
- 高考之后,“学”并未止步 :Juphoon Class (菊风云课堂)上线,助力构建实时互动课堂