AndroidLauncher开发教程_第1页
AndroidLauncher开发教程_第2页
AndroidLauncher开发教程_第3页
AndroidLauncher开发教程_第4页
AndroidLauncher开发教程_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、AndroidLauncher开发教程本文来自:Launcher这个类乍一看,好多函数好多变量好像很复杂,不急,这需要慢慢的梳理。从最上面的onCreate函数开始看起:在这里为了调用framework那层中自己添加的一个类,所以使用了反射技术。代码Methodmethod=null;Classmyclass=null;myclass=Class.forName("android.appwidget.SPAppWidgetHost");/查找指定类名的类ClassparamtersList=Context.class,Integer.TYPE;/构造函数参数列表java.l

2、ang.reflect.Constructorconstructor=myclass.getConstructor(paramtersList);/根据参数列表获得构造函数Object口arg=newObjectthis,Integer.valueOf(APPWIDGET_HOST_ID);/为构造函数写好参数mObject=constructor.newInstance(arg);/调用构造函数获得类实例mAppWidgetHost=(AppWidgetHost)mObject;/基类转换if(myclass!=null)DBLog.d(TAG,"android.appwidget

3、.SPAppWidgetHostfound");method=myclass.getDeclaredMethod("startListening",null);/根据函数名获得函数实例method.invoke(mObject,null);/调用函数上述技术主要是为了监听Widget状态变化,用于更新Widget状态技术点如何设置屏幕虚拟尺寸?1、通过getSystemService获得wallpaperManager的实例;2、调用suggestDesiredDimensions,设定横竖轴虚拟宽度;Launcher中,设横为2倍屏幕宽,竖屏幕尺寸。附:getW

4、indowManager().getDefaultDisplay()获得屏幕的尺寸。技术点如何检测安装、卸载应用程序并进行处理?Receiver是最好的解决办法,它可以对自己感兴趣的Intent作出响应反应(在OnReceive函数中,可通过判断Intent的Action进行选择一如果可以检测多种Intent)。代码IntentFilterfilter=newIntentFilter(Intent.ACTION_PACKAGE_ADDED);filter.addAction(Intent.ACTION_PACKAGE_REMOVED);filter.addAction(Intent.ACTIO

5、N_PACKAGE_CHANGED);filter.addDataScheme("package");registerReceiver(mApplicationsReceiver,filter);/看上面就是在注册Receiver,并加入它所感兴趣的Action(能作出响应的Action)filter=newIntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);registerReceiver(mCloseSystemDialogsReceiver,filter);技术点如何检测数据库的变化?URI(数据库地址)进行检flag来判

6、断是否需要通知ContentObserver正可用于这项工作,它对你所感兴趣的测,在重写的onChange函数中进行处理(最多用于更新当对数据库进行增删查等操作后,可以根据我们自己设定的Observer来对我们做出的修改发生响应(这里的响应不是指数据库的具体操作响应,而很可能是UI上的表现),如果需要则调用getContext().getContentResolver().notifyChange(uri,null);这里的ContentResolver为应用程序提供了访问数据库模型的实例。注册Observer的操作看代码:ContentResolverresolver=getContentR

7、esolver();/获取当前”数据库实例,Provider中定义了它的操作如insert,delete,update.resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI,true,mObserver);做完一系列操作后,进入到程序的加载阶段,下次开始分析startLoader。从startLoader开始说起,从函数命名可以看出,用于在启动过程中加载程序所需品,那么它具体做了哪些操作,还是展开阐述一下。主要加载步骤分为两个:loadUserItemsloadApplications对于这里loadAp

8、plications中的具体操作,我尚有许多不解之处。但如若是第一次程序启动Launcher包含的内容比较丰富,前面一章写启动加载,这部分包含了很多内容,也有很多机制比较不错,接着总结一些杂项的内容。技术点如何找出所有的应用程序快捷方式?当我们在屏幕上长按(我是在一个加号按钮上长按),弹出如下所示:三种选择,Shortcuts、Widgets、Wallpapers,由于我不需要添加Folders,所以直接屏蔽掉了。这里主要就是介绍下如何完成上述操作并在点击Shortcuts后列出所有的应用程序。像如上所示的弹出式框并屏蔽下层窗口消息被称为Dialog。所以我们要先创建一个Dialog:覆写方法

9、:onCreateDialog(intid),这里的id就很显然了,根据你传入的id来创建不同的Dialog,那么如何创建一个Dialog?我们需要一个跟Dialog有关的类来实现一系列操作如点击等。证代码privateclassCreateShortcutimplementsDialogInterface.OnClickListener,DialogInterface.OnCancelListener,DialogInterface.OnDismissListenerprivateAddAdaptermAdapter;DialogcreateDialog()mWaitingForResult

10、=true;mAdapter=newAddAdapter(Launcher.this);AlertDialog.Builderbuilder=newAlertDialog.Builder(Launcher.this);builder.setTitle(getString(R.string.menu_item_add_item);builder.setAdapter(mAdapter,this);builder.setInverseBackgroundForced(true);AlertDialogdialog=builder.create();dialog.setOnCancelListene

11、r(this);dialog.setOnDismissListener(this);returndialog;publicvoidonCancel(DialogInterfacedialog)mWaitingForResult=false;cleanup();publicvoidonDismiss(DialogInterfacedialog)mWorkspace.unlock();privatevoidcleanup()mWorkspace.unlock();dismissDialog(DIALOG_CREATE_SHORTCUT);/*Handletheactionclickedinthe&

12、quot;Addtohome"dialog.*/publicvoidonClick(DialogInterfacedialog,intwhich)cleanup();switch(which)caseAddAdapter.ITEM_SHORTCUT:/InsertextraitemtohandlepickingapplicationpickShortcut(REQUEST_PICK_SHORTCUT,R.string.title_select_shortcut);break;上面的代码已经很明显了,本质上是创建了一个AlertDialog。至于前面为什么要用id,原因不仅是可以方便创

13、建不同的Dialog,同时还使我们可以避免引入过多的成员变量,如果想要在onDestroy或其他什么地方释放掉Dialog,很简单,直接通过dismissDialog(id),就可以释放掉前面创建的Dialog,是不是很方便呢?在onCreateDialog中,我们可以看到为AlertDialog指定一个Adapter则可以方便的将数据放到容器中,通过组织后显示出来。Adapter中添加数据的顺序也就是onClick中which参数的顺序。对于AddAdapter中主要做了什么,我想只要是用过Adapter的人都是知道的,这里我就简单的把代码贴出,不做说明了:代码比较简单,稍微看下就好。下面接着说点了Shortcuts之后的操作。还是先上图,来看看点击Shortcuts后是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论