第一篇:安卓手机电池不耐用解决办法
安卓手机电池不耐用解决办法
你遇到过这种情况吗?手机用了一段时间后,发现电池不耐用了,总是充满后没用多久就没电了,电量“噌噌噌”地往下掉,真是恼人!今天,小编就带来几种方法,教大家如何对付这种情况!
非root手机:
1.保持手机开机状态,连接充电器充电(USB和线缆充电均可)
2.手机LED变成绿色后说明电池已经充满,把手机从充电器拔下
3.关闭手机,再连接充电器充电,让手机再次充到LED灯变成绿色
4.拔下手机充电器
5.手机开机,等到手机开机并完全进入系统后,迅速关机
6.再次连接充电器到已经关闭的手机,等待几分钟后LED灯会再次变成绿色
7.把手机从充电器拔下开机正常使用
已经取得root权限的手机:
第一种方法(推荐使用):
1.手机用完电,把手机重新开机,等待自然关机,这一步是彻底放电
2.手机保持关机连接电源充电(充电时间不少于12个小时,充电期间不能断电,不然就得重新开始第一步)
3.手机保持连接电源状态开机,进入RE管理器或**同类工具删除/data/system/batterystats.bin这个文件,然后将电源拔下,马上重启手机
4.正常使用直到手机没电为止,以后正常使用就可以了
第二种方法:
1.保持手机开机状态,连接充电器充电
2.手机LED变成绿色后说明电池已经充满,把手机从充电器拔下
3.关闭手机,再连接充电器充电,让手机再次充到LED灯变成绿色
4.拔下手机充电器
5.手机开机,等到手机开机并完全进入系统后,迅速关机
6.再次连接充电器到已经关闭的手机,等待几分钟后LED灯会再次变成绿色
7.启动手机进入recovery模式(同时按住手机返回键和电源键启动),然后选择wipebatterystats即可
第三种方法:
1.开机,连接上充电器,直到指示灯变绿
2.拔掉充电器,关机,接上充电器,直到指示灯变绿
3.拔掉充电器,开机,进入系统后,关机,接上充电器,直到指示灯变绿
4.拔掉充电器,开机到recovery里面的advanced菜单里面wipebatterystatus后重启即可
按照上面的步骤进行后电池校准就完成了,只比平时充电多用了5分钟的时间,但是校准后的电池和以前明显不同。在电池校准前你会发现的电池在充满电的情况下稍微使用就会降到93%左右,而校准后可以保持数小时100%的状态才开始降低到99%,总之校准后的电池绝对会让你惊喜。
备注:
/data/system/batterystats.bin这个文件是系统记录的包括电压在内的各种
电池信息,删除这个文件之后系统会重新开始统计电池的使用信息。Recovery中的“Wipe battery status”做的工作就是删除/data/system/batterystats.bin这个文件。这个方法删除电池所有的记录信息,和手机恢复出厂是一样的,目的是让系统重新记录手机当前电池(必须让电池达到饱和状态)的信息,从而让电池达到最佳状态,让系统充分发挥电池的电量。
安卓电池校正以后就尽量不要进行更换了(频繁更换电池会导致电量信息不准,刷机前充满电可以减小电量信息误差)。另外root过的的手机通过recovery程序wipebatterystats后效果更好,但也不是必须。
注意电池校准只需要进行一次即可,多次尝试也不会让你的电池活性再增强。
文章出自 安软市场
http://
第二篇:安卓学习心得
Android学习心得
-----093380117
计算机应用(1)
张峰
1.关于Activity
1.在一个Activity中使用多个View
如果把Activity看作MVC中的Control?它负责管理UI和接受事件(包括用户的输入),虽然说一个Activity通常对应一个屏幕,但事实上,我们是可以只用一个Activity管理多个不同的View来实现简单的逻辑。首先,我们增加一个新的资源描述layout/second.xml。
除了一个“Hello中国”以外,增加一个按钮可以返回前一个界面。然后,在代码中我们要为helloTwo增加两个方法,setViewOneCommand和setViewTwoCommand,分别处理一下在不同界面时,从资源里加载组件并为组件绑定一个事件处理器最后,我们需要在onCreate的时候,也就是启动后的main界面上设置一下按钮事件处理器。2.还是回到正道上,多个Activity之间的跳转
Android中提供一个叫Intent的类来实现屏幕之间的跳转,按文档的说法,似乎他们也建议采用这种方法,Intent的用法比较复杂,现在我先看看它最简单的用法。
这里的跳转功能用Intent来操作,它的最简单用法就是用函数setClass()设置跳转前后两个Activity类的实例,然后调用Activity自己的startActivity(intent)即可。最后一句finish()表示将当前Activity关掉(如果不关掉会如何?你可以自己试一下看效果,事实上有时我们是不需要关掉当前Activity的)。
然后,我们同样弄一个Activity类HelloThreeB,代码与前面的差不多,只是将setClass的两个参数反一下,这样就可以简单地实现在两个Activity界面中来回切换的功能了。
2.关于 Intent的使用
Intent分为两大类,显性的(Explicit)和隐性的(Implicit)。一般来说,intent要定位事件的目的地,无外乎需要以下几个信息: 1.种类(category),比如我们常见的 LAUNCHER_CATEGORY 就是表示这是一类应用程序。
2.类型(type),在前面的例子中没用过,表示数据的类型,这是隐性Intent定位目标的重要依据。
3.组件(component),前面的例子中用的是setClass,不过也可以用setComponent来设置intent跳转的前后两个类实例。4.附加数据(extras),在ContentURI之外还可以附加一些信息,它是Bundle类型的对象。
其实,如果是在一个应用内部,这种隐性的intent实在有点别扭,个人觉得,这种松藕合的实现方法,只适用于那些较大的系统或者多个不同的应用之间的调用,可手机上又有什么“较大”的系统呢?无非是可以与不同来源的多个应用之间方便地互操作而已,那么会是什么样的场景呢?比如,给QQ好友发送gmail邮件,用GoogleMap查找QQ好友所在的位置?看上去挺不错的。
关于这个ContentProvider,其实还有话说,它主要是的那些看似数据库操作的方法我们都没真正去实现呢。不过今天就到这里了,等下回再去研究吧。
3.关于ListActivity
准备一个List对象并借助Adapter就可以构造出一个列表。重载onListItemClick方法可以响应选择事件,利用第一个参数可以访问到这个ListView实例以得到选中的条目信息。这里有一点要说明的,就是如果更简单的话,其实连那个setContentView都可以不要了,Android也会自动帮我们构造出一个全屏的列表。但是本例中我们需要一个TextView来显示选中的条目,所以我们需要一个layout.mainb描述一下这个列表窗口。
这里需要注意的是那个ListView的ID,是系统自定义的android:list,不是我们随便取的,否则系统会说找不到它想要的listview了。然后,在这个listview之外,我们又增加了一个TextView,用来显示选中的条目。
再来说说这里用到的ArrayAdapter,它的构造函数中第二个参数是一个资源ID,ArrayAdapter的API文档中说是要求用一个包含TextView的layout文件,平台用它来显示每个选择条目的样式,这里的取值是R.layout.list_row,所以,我们还有一个list_row.xml文件来描述这个布局,相当简单。
从ArrayAdapter上溯到BaseAdapter,发现还有几个同源的Adapter也应该可以使用,象SimpleAdapter和CursorAdapter,还是做个例子来实验一下吧。
然后,在HelloTwoB中的onCreate函数中,修改代码,有几个不同:items的元素是HashMap实例,这是一点变化,然后构造函数除了要求items以外,还要求提供一个string[]来说明用hash表中的哪个字段显示在列表中,而后是一个资源ID的数组。
因为单纯的CursorAdapter是抽象类,所以我用的是它的子类SimpleCursorAdapter,很好理解,先用ContentResolver查询通讯簿得到一个游标,然后告诉SimpleCursorAdapter要用其中的People.NAME作为显示项来构造出一个adapter即可。4.关于Dialog
注意到android.app包下除了Dialog(可用于制作复杂的对话框)以外,还包括了几个系统定义好的对话框类,如DatePickerDialog、TimePickerDialog及AlertDialog。
其中AlertDialog我上回用过一次,基本上就那样子了,今天看看另外两个对话框的使用吧。
很简单的,无非是需要一个OnDateSetListener接口的实现而已,在它里面的dateSet方法中就可以得到选择的日期了。而TimePickerDialog与DatePickerDialog使用如出一辙。
看看另一个ProgressDialog的用法吧,这个类与AlertDialog一样包含了多个static的方法,所以使用起来是非常方便的。比如说,如果我们需要用它来表示一个长时间的操作。
5.关于Service和Notification
大略地看了一下android.app下的Service类,觉得它与Activity非常相似,只是要注意几个地方:
1.生命周期,Service的从onCreate()->onStart(int,Bundle)->onDestroy()显得更为简单。但是它的onStart是带参数的,第一个ID可用来标识这个service,第二个参数显示是用来传递数据的了。比较Activity,传递数据的Bundle是在onCreate就带进入的。
2.Service的启动由Context.startService开始,其实Activity或者Service都是Context的派生类。结束于Context.stopService()或者它自己的stopSelf()。
3.Service还有一个与Activity不一样的是它可以由另一个Context去绑定一个已存在的Service。就是这个方法Context.bindService(),被绑定的Service要求是已经onCreate了但可以没有onStart。在Service类中有个抽象方法getBinder()可以得到这个IBinder对象。关于这方面的细节,以后再看,这里只做个记录罢。
4.与Service有关的还有一个安全的问题,可以在AndroidManifest.xml中用
6.GridView与ImageView
简单一点吧,就瞧瞧那个Grid的效果,Android提供了一个GridView,不过从APIDemo中看来,它似乎与PC上的GRID差别还是挺大的,更像那个IconView的感觉。不知道Android中如何实现表格界面?虽然在移动终端上,表格一般不会有谁使用,大家似乎更倾向于使用ListView,而Android对于ListView则有更简单的实现ListActivity。
很简单,只要重载几个方法就可以了,关键是那个getView方法,它负责构建出每个单元格中的对象实例。这里我们构造的是一个ImageView实例。
然后就是同样的将这个Adapter赋给GridView即可,大家可以看看效果,注意在做这个例子前,先放几个小图片到res/drawable目录下,buildproject一下就可以得到那个R.drawable.a了(这里的a是图像文件名,如a.png)。
在getView方法中我们使用了ImageView类,这又是一个widget。除了上面用到的几个方法以外,还有以下几个方法值得注意: 与图像来源有关的方法,我们只用了资源文件的方式。
还是习惯性跑题了,其实,我是想通过我对这个类的无数次Debugger跟进,说说它的多线程异步处理的解决策略的。他的基本策略如下: 1.当你实例化一个AsyncQueryHandler类时(包括其子类...),它会单件构造一个线程(后面会详述...),这个线程里面会构建一个消息循环。
2.获得该消息循环的指针,用它做参数实例化另一个Handler类,该类为内部类。至此,就有了两个线程,各自有一个Handler来处理消息。3.当调用onXXX的时候,在XXX函数内部会将请求封装成一个内部的参数类,将其作为消息的参数,将此消息发送至另一个线程。4.在该线程的Handler中,接受该消息,并分析传入的参数,用初始化时传入的ContentResolver进行XXX操作,并返回Cursor或其他返回值。
5.构造一个消息,将上述返回值以及其他相关内容绑定在该消息上,发送回主线程。
6.主线程默认的AsyncQueryHandler类的handleMessage方法(可自定义,但由于都是内部类,基本没有意义...)会分析该消息,并转发给对应的onXXXComplete方法。
7.用户重写的onXXXComplete方法开始工作。
这就是它偷偷摸摸做过的事情,基本还是很好理解的。我唯一好奇的是它的线程管理方式,我猜测他是用的单件模式。第一个AsyncQueryHandler的实例化会导致创建一个线程,从此该线程成为不死老处男,所有的ContentResolver相关的工作,都由该线程统一完成。个人觉得这种解决方式很赞。本来这个线程的生命周期就很难估量,并且,当你有一个ContentProvider的请求的时候,判断你会做更多的类似操作并不过分。就算错了,花费的也只是一个不死的线程(与进程同生死共存亡...),换来的却是简单的生命周期管理和无数次线程生死开销的节约。同时另外一个很重要的问题,他并会涉及到单件中数据同步的问题,每个类都有各自的Handler类,彼此互不干扰,分发可以分别进行。当多个数据请求的时候,在同一个ContentResolver上进行的可能微乎其微,这就避免了堵塞。总而言之,这套解决办法和Android的整体设计算是天作之合了。
所以建议,如果你有什么非ContentProvider操作,却需要异步多线程执行的话,模拟一套,是个不错的策略,当然,具体情况具体分析,生搬硬套是学不好马列主义的。
7.显示控件使用
Android的界面显示同样也是基于控件的。通常是用View(包括ViewGroup)控件配上XML的样式来做的。具体细节不想说了,可以参考 Samples里的ApiDemos/View,和View的Doc,以及Implementing a UI这篇Doc。其他还有很多,感觉算是SDK讲述的最多的内容。
从控件的使用上,和网页的设计类似,尽量用parent_width之类的抽象长度,用Theme来做风格,抽取所有的字串等信息做本地化设计。相关内容参看Implementing a UI就好。
一类比较重要的是数据绑定控件。如果做过ASP.Net会从中看到很多类似的地方。一个支持数据绑定的控件,比如ListView。可以通过一个 ListAdapter绑定到一个数据源上。ListAdapter是一个抽象类,主要的实现类包括SimpleAdapter和 SimpleCursorAdapter。前者是绑定一个静态的Array,后者是绑定一个动态的Cursor。Cursor前面说过,是一个指向数据源的随机迭代器,将View绑定到Cursor通常要设置这样几个参数。一个是每一行的样式,称作Row Layout,其实就是一个普通的Layout的XML文件。还有就是一个列和现实控件的对应关系。那个控件显示哪个列的值,这是需要配置的。为了定制一个良好的数据显示控件,最简单你可以定制很PP的Row Layout,复杂一点就是可以重载绑定控件View,或者是适配器ListAdapter。如果是一个数据显示密集的应用,且你对UI有些追求,这个工作估计是必不可少的。
一个主要用于显示数据内容的Activity,可以选择派生自ListActivity。它提供了一个具有ListView 的Layout,还有simple_list_item_1, simple_list_item_2, two_line_list_item等默认的Row Layout,还有一些比较不错的API,和可供响应选择Item的事件。可以满足你比较基础的需求。如果你觉得只有一个ListView的界面太突兀,你可以为这个ListActivity指定一个Layout,需要注意的是,你需要提供一个id为@android:id/list的ListView控件,避免Activity在内部偷偷寻找该控件的时候失败。
除了这些要求,做好UI还有注意易用性和效率。快捷键是一个比较不错的选择,在 Activity中调用setDefaultkeyMode(SHORTCUT_DEFAULT_KEYS),可以开启快捷键模式,然后你可以将菜单绑定到指定快捷键上就OK了。个人觉得Tip也是一个比较重要的东西,但目前观察看来,这个东西只能够自己提供了。界面的动态性有时候是不可避免的,比如说菜单就是一个需要经常根据光标位置提供不同的选项。这个东西Android很人道的考虑到了,你可以参看NodeList这个Sample。它采取的应该是一个静态模拟动态的方式,这样有助于提高速度。你也可以利用ViewInflate,动态从一个XML创建一个控件。成本据Doc说很大,不到万不得已不要使用。
8.Intent消息传递
在前面写Android的ContentProvider时候,可以看到那是基于观察者模式的一个消息传递方法。每一个Cursor、ContentResolver做为一个小的注册中心,相关观察者可以在这个中心注册,更新消息由注册中心分发给各个观察者。而在MFC或Winform中,都会形成一个消息网,让消息在网中流动,被各节点使用、吃掉或者在出口死掉。
相比之下,我个人觉得基于Intent的Android核心消息传递机制是有所不同的。它应该会有一个全局性的注册中心,这个注册中心是隐性的,整个Android系统中就那么一个。所有的消息接收者,都被隐形的注册到这个中心。包括Activity,Service和IntentReceiver。其实说隐形注册是不确切的,所有注册都还是我们手动告诉注册中心的,只是与传统的方式不一样,我们通常不是通过代码,而是通过配置文件来做。在应用的Manifest中,我们会为一些Activity或Service添加上Intent-filter,或在配置文件中添加
当程序有一个消息希望发出去的时候,它需要将消息封装成一个Intent,并发送。这时候,应该是有一个统一的中心(恩,有可能Android底层实现的时候不是,但简单这样看是没问题的...)接受到这个消息,并对它进行解析、判定消息类型(这个步骤降低了耦合...),然后检查注册了相匹配的filter或receiver,并创建或唤醒接收者,将消息分发给它。这样做有很多好处。虽然这种传递有的时候不如点对点的传递快(这有些需要速度的地方,我们看到Android会通过直接通信来做),但有时候又因为它只经过一跳(姑且这么叫吧...),比复杂的流动又要更快。更重要的是,它耦合性低,在手机平台这种程序组件多变的条件下使用十分适合。并且它可以很容易实现消息的精确或模糊匹配,弹性很大。(我个人曾想在开发一个C++二次平台的时候引入这样的机制,但在C++中,建立一套完整的数据marshal机制不容易,相比之下,用java来做会简单很多...)
恩,废话说了很多,具体讲讲Android中Intent的使用。当你有一个消息需要传递,如果你明确知道你需要哪个Activity或者其他Class来响应的话,你可以指定这个类来接受该消息,这被称为显性发送。你需要将Intent的class属性设置成目标。这种情况很常见,比如startActivity的时候,会清楚当前Activity完了应该是哪个Activity,那就明确的发送这个消息。
但是,有的时候你并不确定你的消息是需要具体哪个类来执行,而只是知道接收者该符合哪些条件。比如你只需要有一个接收者能显示用户所选的数据,而不想制定某个具体的方法,这时候你就需要用到隐形发送(传统上,我们可能会考虑用多态,但显然这种方式更为灵活...)。在Android中,你可以为Intent指定一个action,表示你这个指令需要处理的事情。系统为我们定义了很多Action类型,这些类型使系统与我们通信的语言(比如在Activity里面加一个Main的filter,该activity就会做成该应用的入口点),当然你也可以用于你自己的应用之间的通信(同样当然,也可以自定义...)。强烈建议,在自己程序接收或发出一个系统action的时候,要名副其实。比如你响应一个view动作,做的确实edit的勾当,你发送一个pick消息,其实你想让别人做edit的事,这样都会造成混乱。当然只有Action有时候是不够的,在Android中我们还可以指定catalog信息和type/data信息,比如所有的显示数据的Activity,可能都会响应View action。但很多与我们需要显示的数据类型不一样,可以加一个type信息,明确的指出我们需要显示的数据类型,甚至还可以加上一个catalog信息,指明只有你只有按的是“中键”并发出这样的消息才响应。从上面可以看出,Android的Intent可以添加上class, action, data/type, catalog等消息,注册中心会根据这些信息帮你找到符合的接收者。其中class是点对点的指示,一旦指明,其他信息都被忽略。Intent中还可以添加key/value的数据,发送方和接收方需要保持统一的key信息和value类型信息,这种数据的marshal在java里做,是不费什么力气的。
Android的Intent发送,可以分成单播和广播两种。广播的接收者是所有注册了的符合条件的IntentReceiver。在单播的情况下,即使有很多符合条件的接收者,也只要有一个出来处理这个消息就好(恩,个人看法,没找到确切条款或抉择的算法,本来想实验一下,没来得及...),这样的情况很容易理解,当你需要修改某个数据的时候,你肯定不会希望有十个编辑器轮流让你来处理。当广播不是这样,一个receiver没有办法阻止其他receiver进行对广播事件的处理。这种情况也很容易理解,比如时钟改变了,闹钟、备忘录等很多程序都需要分别进行处理。在自己的程序的使用中,应该分清楚区别,合理的使用。
9.ContentProvider数据模型
数据库操作
从我目前掌握的知识来看,SQLite比较轻量(没有存储过程之类的繁杂手段),用起来也比较简单。实例化一个SQLiteDatabase类对象,通过它的APIs可以搞定大部分的操作。从sample中看,Android中对db的使用有一种比较简单的模式,即派生一个 ContentProviderDatabaseHelper类来进行SQLiteDatabase对象实例的获取工作。基本上,ContentProviderDatabaseHelper类扮演了一个singleton的角色,提供单一的实例化入口点,并屏蔽了数据库创建、打开升级等细节。在ContentProvider中只需要调用ContentProviderDatabaseHelper的openDatabase方法获取SQLiteDatabase的实例就好,而不需要进行数据库状态的判断。URI 像进行数据库操作需要用SQL一样,对ContentProivder进行增删改查等操作都是通过一种特定模式的URI来进行的(ig:content: //provider/item/id),URI的能力与URL类似,具体细节可以查看SDK。建立自己的ContentProvider,只需要派生 ContentProivder类并实现insert, delete, update等抽象函数即可。在这些接口中比较特殊的是getType(uri)。根据传入的uri,该方法按照MIME格式返回一个字符串(==!没听过的诡异格式...)唯一标识该uri的类型。所谓uri的类型,就是描述这个uri所进行的操作的种类,比如content://xx/a与 content://xx/a/1不是一个类型(前者是多值操作,后者是单值),但content://xx/a/1和content://xx/a/2 就会是一个类型(只是id号不同而已)。
在ContentProvider通常都会实例化一个ContentURIPraser来辅助解析和操作传入的URI。你需要事先(在static域内)为该ContentURIPraser建立一个uri的语法树,之后就可以简单调用 ContentURIPraser类的相关方法进行uri类型判断(match方法),获取加载在uri中的参数等操作。但我看来,这只是在使用上简化了相关操作(不然就需要自己做人肉解析了...),但并没有改变类型判定的模式。你依然需要用switch...case...对uri的类型进行判断,并进行相关后续的操作。从模式来看,这样无疑是具有强烈的坏味道,类似的switch...case...代码要出现N此,每次一个 ContentProvider做uri类型的增减都会需要遍历修改每一个switch...case...,当然,如果你使用模式(策略模式...)进行改造对手机程序来说无疑是崩溃似的(类型膨胀,效率降低...),所以,只能是忍一忍了(恩,还好不会扩散到别的类中,维护性上不会有杀人性的麻烦...)。增删改查
ContentProvider 和所有数据源一样,向外提供增删改查操作接口,这些都是基于uri的指令。进行insert操作的时候,你需要传入一个uri和 ContentValues。uri的作用基本就限于指明增减条目的类型(从数据库层面来看就是table名),ContentValues是一个 key/value表的封装,提供方便的API进行插入数据类型和数据值的设置和获取。在数据库层面上来看,这应该是column name与value的对应。但为了屏蔽ContentProvider用户涉及到具体数据库的细节,在Android的示例中,用了一个小小的模式。它为每一个表建一个基于BaseColumn类的派生类(其实完全可以不派生自BaseColumn,特别当你的表不基于默认的自动id做主键的时候),这个类通常包括一个描述该表的ContentURI对象和形如 public static final TITLE = “title”这样的column到类数据的对应。从改变上角度来看,你可以修改column的名字而不需要更改用户上层代码,增加了灵活性。insert方法如果成功会返回一个uri,该uri会在原有的uri基础上增加有一个row id。对于为什么使用row id而不是key id我想破了脑袋。到最后,我发现我傻了,因为ContentProvider不一定需要使用数据库,使用数据库对应的表也可以没有主键,只有row id,才能在任何底层介质下做索引标识。
但,基于row id在删除和修改操作是会造成一定的混乱。删除和修改操作类似。删除操作需要传入一个uri,一个where字串,一组where的参数(做条件判定...),而修改操作会多一个ContentValues做更新值。着两个操作的uri都支持在末尾添加一个row id。于是混乱就出现了。当在where参数中指明了key id,而在uri中提供了row id,并且row id和key id所指函数不一致的时候,你听谁的?示例代码中的做法是完全无视row id(无语...),如此野蛮的方式我估计也只能在示例中出现,在实际中该如何用,恩,我也不知道。幸运的是,我看了下上层对 ContentProvider的删除操作,其实都不会直接进行,而是通过调用Cursor的delete方法进行,在这前提下,我想Cursor会处理好这些东西吧。
最后一个操作是查询操作,可以想见,查询的参数是最多的,包括uri和一组条件参数。条件参数类型和标准的sql类似,包括 sort, projection 之类的。从这些参数到sql语句的生成,可以寻求QueryBuilder类的帮助,它提供了一组操作接口,简化了参数到sql的生成工作,哪怕你不懂 sql都完全没有问题(这话说的我自己都觉得有点悬...)。查询返回一个Cursor。Cursor是一个支持随机读写的指针,不仅如此,它还提供了方便的删除和修改的API,是上层对ContentProvider进行操作一个重要对象,需要仔细掌握(Cursor还可以绑定到view上,直接送显,并与用户进行交互,真是程序越往上,封装越好,工作越机械没有复杂性了...)。数据模型
在与界面打交道的Cursor、ContentResolver等数据操作层中,大量采用观察者模式建立数据层与显示层的联系。一个显示层的视图,可以做成某一种观察者注册到Cursor或ContentResolver等数据中间层中,在实现底层ContentProvider中,我们需要特别注意在对数据进行修改操作(包括增删改...)后,调用相应类型的notify函数,帮助表层对象进行刷新(还有一种刷新方式是从一个view发起的)。可以看到 Android的整体数据显示框架有点像MVC的方式。Cursor、ContentResolver相当于控制层,数据层和显示层的交互通过控制层来掌管,而且控制层很稳定不需要特别定制,通常工作只在定制数据层和显示层空间,还是比较方便和清晰的。
10.学习感想
通过这学期对安卓的学习,大概了解了以上一些知识,对安卓有了初步的了解,这几个月给我的东西我想用有形的和无形的两部分概叙,形的当然就是技术水平的长进,虽然其中肯定有很多的不足,相信慢慢会体会到。
第三篇:手机电量20%突然关机解决办法(手机电池校正)
手机电量20%突然关机解决办法(手机电池校正)
以下提供安卓手机电量显示20%或更多,却突然显示电量不足关机的解决办法——
安卓手机电池校正教程
电池校正:安卓手机电池校正方法
首先明确所谓的软件矫正手机电池都是骗人的!
安卓手机都有着比较大的屏幕、繁多的软件应用以及高速上网等等众多优点,但安卓手机待机时间普遍较短。电池校正方法有哪些?手机电池校正方法介绍。现在很多智能手机电池都不够用,因此电池耐用的手机成了大家追求的目标。但是,对于已经买了手机的朋友,电池校正的方法有哪些呢?以前充满电可以用几天,现在可能一天都不到,本文主要针对由于刷机所带来的电池续航时间减小的问题,如果你的手机刷过机,那么可以根据不同情况采用以下方法,绝对管用,结果让你惊喜:
(ps:本文所介绍的方法理论上适用于所有机型,不会对手机产生任何负面影响。)
电池校正:未root手机安卓电
1、将手机开机并连接充电器保持充电状态。
2、等手机的充电显示灯变成绿色以后就将充电器拔下。
3、将手机关机,然后再将充电器连接并继续充电等到显示灯变成绿色。
4、将充电器拔下并将手机开机,这时候就可以正常使用了。或:
1.保持手机开机状态,连接充电器充电(USB和线缆充电均可)2.手机LED变成绿色后说明电池已经充满,把手机从充电器拔下 3.关闭手机,再连接充电器充电,让手机再次充到LED灯变成绿色 4..拔下手机充电器
5.手机开机,等到手机开机并完全进入系统后,迅速关机
6.再次连接充电器到已经关闭的手机,等待几分钟后LED灯会再次变成绿色 7.把手机从充电器拔下,开机正常使用 或:
1.手机关机,连上充电器直到提示电池电量充满。建议最好能够连续充电数小时或一夜时间以保证最大电量,切记在电池充满电之前手机不要开机。2..充满电之后,在不断开充电器的前提下,手机开机。
3..手机进入系统之后,打开RE文件管理器或其他同类工具删除/data/system/batterystats.bin这个文件。
4..随后拔下电源,正常使用手机直到其自动关机。此时虽然手机自动关机,但是电池还存有很少量的电量,等待一至两分钟后手机再次开机,把剩余电量用完直到再次自动关机。5..随后在关机状态下手机重新充满电即可开始正常使用。
电池校正:已经root手机
1、跟上面一样将手机开机并连接充电器进行充电,等电源显示灯变成绿色以后将充电器拔下。
2、将手机关闭,再将充电器连接进行充电,知道显示灯变成绿色,将充电器拔下。
3、将手机开机,等到完全开机的时候再迅速关机,关机之后再次连接充电器进行充电并等现实等变成绿色。
4、将手机启动进去Recovey里的advance菜单里,点击wipebatterystatus后重启即可正常使用。
安卓电池校正之后你会发现之前充不满的现在基本上都能够充到100%了,续航能力也会给你惊喜的。大家要注意的是电池校准只需要一次即可,千万不要重复进行,如果你的电池进行了校准之后依然没有提升的话,那你的电视可能就存在问题了,你就要考虑一下是否是原装电池。
电池校正:安卓电池校正方法
1、将手机关机,插上电源进行充电知道显示灯为绿色。
2、不要拔下电源将手机开机,进入系统之后使用、Root Explorer或其他同类工具删除/data/system/batterystats.bin这个文件。
3、将电源拔下,正常使用手机直到没电自动关机。这时候手机还是有点残存的电量的,等一至两分钟之后将手机再次开机将仅有的电量用完。
4、此时手机已经重新获取了当前电池的电量信息。此时在关机状态下重新充满电即可开始正常使用。
备注:)/data/system/batterystats.bin这个文件是系统记录的包括电压在内的各种电池信息,删除这个文件之后系统会重新开始统计电池的使用信息。Recovery中的“Wipe battery status”做的工作就是删除/data/system/batterystats.bin这个文件。这个方法删除电池所有的记录信息,和手机恢复出厂是一样的,目的是让系统重新记录手机当前电池(必须让电池达到饱和状态)的信息,从而让电池达到最佳状态,让系统充分发挥电池的电量!安卓电池校正以后就尽量不要进行更换了。!补充说明几点:
(1)/data/system/batterystats.bin这个文件是系统记录的包括电压在内的各种电池信息,删除这个文件之后系统会重新开始统计电池的使用信息。
(2)因为进Recovery时需要耗一点电,如果在电量未满的情况下删除电池信息文件会影响复位效果。
(3)刷ROM时会删除/data/system/batterystats.bin这个文件。
(4)建议大家刷机时把手机充满电再开始刷机,特别是现在感觉和以前相比起来特别费电的,估计就是rom和刷机剩余电量原因了,如果已经刷过了,那么可以按照上面的教程试一下。
(5)注意电池校准只需要进行一次即可,多次尝试以上方法也不会让你的电池活性再增强。
注意:
1.一般情况下,电池出厂前,厂家都对其进行了预充电,并进行了激活处理,因此电池均有余电,有朋友说电池按照调整期时间充电,待机仍严重不足,假设电池确为正品电池的话,这种情况下应延长调整期再进行3~5次完全充放电。
2.如果新买的手机电池是锂离子,那么前3~5次充电一般称为调整期,应充14小时以上,以保证充分激活锂离子的活性。锂离子电池没有记忆效应,但有很强的隋性,应给予充分激活后,才能保证以后的使用能达到最佳效能。
3.有些自动化的智能型快速充电器当指示信号灯转变时,只表示充满了90%。充电器会自动改变用慢速充电将电池充满。最好将电池充满后使用,否则会缩短使用时间。
4.充电前,锂电池不需要专门放电,放电不当反而会损坏电池。充电时尽量以慢充充电,减少快充方式;时间不要超过24小时。电池经过三至五次完全充放电循环后其内部的化学物质才会被全部“激活”达到最佳使用效果。
5.请使用原厂或声誉较好的品牌的充电器,锂电池要用锂电池专用充电器,并遵照指示说明,否则会损坏电池,甚至发生危险。
6.有很多用户常常在充电时还把手机开着,其实这样会很容易伤害手机寿命的,因为在充电的过程中,手机的电路板会发热,此时如果有外来电话时,可能会产生瞬间回流电流,对手机内部的零件造成损坏。
7.电池的寿命决定于反复充放电次数,所以应尽量避免电池有余电时充电,这样会缩短电池的寿命。手机关机时间超过7天时,应先将手机电池完全放电,充足电后再使用。8.手机电池都存在自放电,不用时镍氢电池每天会按剩余容量的1%左右放电,锂电池每天会按0.2%~0.3%放电。在给电池充电时,尽量使用专用插座,不要将充电器与电视机等家电共用插座。
9.不要将电池暴露在高温或严寒下,像三伏天时,不应把手机放在车里,经受烈日的曝晒;或拿到空调房中,放在冷气直吹的地方。当充电时,电池有一点热是正常的,但不能让它禁受高温的“煎熬”。为了避免这种情况的发生,最好是在室温下进行充电,并且不要在手机上覆盖任何东西。
10.锂离子电池必须选用专用充电器,否则可能会达不到饱和状态,影响其性能发挥。充电完毕后,应避免放置在充电器上超过12小时以上,长期不用时应使电池和手机分离。
第四篇:安卓实习报告
通信与电子信息专业实训报告
项目名称:基于android的游戏开发
班 级 10通信1班
姓 名
学 号
指导教师
成 绩
实训时间:年月日—
目录
一、实训目的及其意义............................................3 1.1、目的及意义..............................................3 1.2、研究现状................................................3
二、实训主要任务、重点及难点....................................4 2.1、任务....................................................4 2.2、重点内容及实现途径......................................4
三、实训具体内容及完成的主要工作................................5 3.1、认识基础开发............................................6 3.2、了解数据存储............................................6 3.3、总体实训过程............................................7
四、实际遇到的困难,解决问题的方法和措施........................8
(一)、所遇问题.................................................8
(二)、解决方法与措施...........................................9
五、心得体会....................................................9
一、实训目的及其意义 1.1、目的及意义 了解现阶段互联网发展主流,了解移动互联网,认识移动互联网的发展与展望,认识android,了解基于android的应用软件开发方法及其商业流程。把理论与实际结合,通过对理论知识的理解,领悟从而运用到生活实际巩固所学的知识,提高对实际生活的认识,积累经验。使学生在此期间能够初次体会到实际生产中的种种技能与经验,完成一项项目锻炼独立思考及团队合作能力。使学生们进一步加深对所学知识的理解,理论联系实际,巩固所学有关计算机基础理论知识和基本技能,学习有关计算机最新技术方面的应用,增强学生对计算机在社会生活,社会生产中应用的感性认识,深入了解计算机在各个领域中的应用状况。生产实习是学校教学的重要补充部分,是区别于普通学校教育的一个显著特征,是教育教学体系中的一个不可缺少的重要组成部分和不可替代的重要环节。它是与今后的职业生活最直接联系的,学生在生产实习过程中将完成学习到就业的过渡,因此生产实习是培养技能型人才,实现培养目标的主要途径。它不仅是校内教学的延续,而且是校内教学的总结。生产实习一方面巩固了书本上学到的理论知识,另一方面,可获得在书本上不易了解和不易学到的生产现场的实际知识,使我们在实践中得到提高实训环节对于提高学生的综合能力和全面素质具有重要意义。1.2、研究现状 android 是google开发的基于linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。google与开放手机联盟合作开发了 android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 t-mobile 在内的 30 多家技术和无线应用的领军企业组成。google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。android主要使用于移动设备,如智能手机和平板电脑,由google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。android操作系统最初由andy rubin开发,主要支持手机。2005年8月由google收购注资。2007年11月,google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良android系统。随后google以apache开源许可证的授权方式,发布了android的源代码。第一部android智能手机发布于2008年10月。android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,android在全球的市场份额首次超过塞班系统,跃居全球第一。2012年11月数据显示,android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。目前基于android的移动终端上的软件应用开发很火热,android平台的开发已越来越强大。android是一种以linux为基础的开放源码操作系统,主要使用于便携设备。android操作系统最初由andy rubin创办,最初只支持手机。2005年由google收购注资,并拉拢多家制造商组成开放手机联盟(open handset alliance)开发改良,逐渐扩展到到平板电脑及其他领域上。
二、实训主要任务、重点及难点 2.1、任务
认识移动互联网,了解移动互联网的开发,认识及了解android,在给定时间内完成基于android平台的游戏项目的开发,实现预想游戏效果,熟悉项目开发的商业流程,给出游戏全套文档及代码。
2.2、重点内容及实现途径 2.2.1、重点内容:熟悉游戏开发代码,了解项目流程,对android游戏开发有基本了解。2.2.2、实现途径:
所需运行硬件环境:
安卓系统2.2以上 3.5寸以上移动设备
软件开发环境的配置:
(1)配置java程序开发环境
(2)安装并汉化eclipse(jdk)(3)android sdk的安装
(4)adt的安装及配置
(5)android模拟器的配置
(6)office2003以上版本的软件(绘图visio)然后运用eclipse完成项目代码的编写,运行与调试; 最终在实体终端上进行测试,最终完成项目
三、实训具体内容及完成的主要工作
实训前期,有老师给我们讲解了现阶段移动互联网的发展,了解移动互联网的发展主流,说明了现阶段移动互联的发展重要性。老师着重给我们讲解了android的发展,以及现阶段移动互联中android所扮演的角色。接下来我们将针对基于android的游戏开发进行学习,由于时间的原因,我们主要了解了一下游戏开发的基本项目流程,具体的操作将在实训过程中一一讲解验证。
接下来老师为我们讲解了实训的具体内容,对于一个游戏开发项目,首先我们需要进行游戏开发的前期准备,主要是游戏开发环境的配置,以及团队开发过程中的任务分配,之后紧张的游戏项目开发拉开了帷幕。在第一天我们主要学习了eclipse软件的使用,包括游戏工程的创建等等。并且针对eclipse中的 android项目结构进行了讲解:android项目结构:src/ java原代码存放目录 gen/ 自动生成目录 gen 目录中存放所有由android开发工具自动生成的文件。目录中最重要的就是r.java文件。这个文件由android开发工具自动产生的。res/ 资源(resource)目录 在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。assets资源目录android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件。androidmanifest.xml 项目清单文件。篇二:android实习报告
实习报告
实习目的:
生产实习是计算机科学与技术专业重要的实践性教学活动,其目的是使学生们进一步加深对所学知识的理解,理论联系实际,巩固所学有关计算机基础理论知识和基本技能,学习有关计算机最新技术方面的应用,增强学生对计算机在社会生活,社会生产中应用的感性认识,深入了解计算机在各个领域中的应用状况,学生在实习的同时,进行一定的社会实践与调查活动,对于提高学生的综合能力和全面素质具有重要意义。
实习内容: android主要有四大组件,分别为:activity 活动、service 服务、broadcast receivers 广播接受者、content provider 内容提供者。还有上激活组件intent。1.activity activity就是一个用户可以直接接触并看到的窗口,当新建一个android project后可以
看到在工程文件下的src中有一个已建好的java类firstactivity,系统也会自动为他配备一个布局文件main.xml,并在androidmanifest中对此activity进行注册。
用户想要自己创建一个activity,首先创建一个java类继承自activity,可以为他配备一个布局文件用来显示activity创建后的布局。最后在主配置文件manifest.xml中对创建的activity进行注册,这一步是必不可少的,没有注册activity无法运行。在manifest.xml中会有许多的activity,但系统一次只能运行一个activity,因此必须修选定一个最先运行的activity。在注册activity是加入
/files目录,如: /data/data/cn.itcast.action/files/itcast.txt,通过点击eclipse菜单“window”-“show view”-“other”,在对话窗口中展开android文件夹,选择下面的file explorer视图,然后在file explorer视图中展开/data/data/
/files目录就可以看到该文件。openfileoutput()方法的第二参数用于指定操作模式,有四种模式android有一套自己的安全模型,当应用程序(.apk)在安装时系统就会分配给他一个userid,当该应用要去访问其他资源比如文件的时候,就需要userid匹配。默认情况下,任何应用创建的文件,sharedpreferences,数据库都应该是私有的(位于/data/data/
/files),其他程序无法访问。除非在创建时指定了context.mode_world_readable或者context.mode_world_writeable,只有这样其他程序才能正确访问。
实习流程: 2月18——2月27日,老师对于android开发进行了详细的讲解,其内容包括:android 的背景介绍,发展过程,自身的优势与不足.android的控件、布局、activity、service等一系列基础知识,对整个android的开发有了大致的了解 2月28日——3月2日: 学生自己开发android 3gabs项目,老师答疑及验收
实习心得:
时间过的飞快,半个月的实习就要结束了,在这次实习中我们不仅学习了相关的专业知识而且让我对android系统又有了一个更加深入的了解,它也是我们计算机专业的一个新的方向并且发展很迅速,为了今后的发展我们还需不断努力学习!我国的信息产业还很落后,随着社会的发展和国家的支持,手机上网是社会发展的趋势,到时候手机上网将无处不在!之前我对android系统的了解之停留在应用的层次上,对于更深层次的了解是很少的,通过这次实习,让我对android系统有了一个更深层次的了解,同时它页使我意识到无论朝哪个方向发展,主要还是要扎实深刻地学习,同时也得不断努力探索!it业发展速度一直都是相当惊人的,不想被社会淘汰,我们就得必须不断地学习,现在的社会不再是一劳永逸,其他行业也是如此,我们必须不断地拿知识来武装自己,不然被淘汰那是肯定的!现在就业难原因其实在于竞争的家具,为了在竞争中得到成功,我们必须时时刻刻学习,还学到了很多做人做事的道理,不仅懂得了要想在计算机这一行立足必须具备扎实的技术理论知识,还必须学会与人沟通,合作的能力,同时更懂得了尝试的重要性,很多事情不是听说是困难的它就是困难的,只有亲自去做亲自去体会才知道,其实它并没有那么困难,这就是实践的重要性!无论做什么事情都必须要坚持,只有坚持下去,才会成功!事在人为,就怕不做!我们不能怕失败,关键是要从失败中总结经验,带着勇气,带着自信,坚持不懈,踏踏实实。这一次的实习是短暂的,但我收获良多。回顾以前所走过的路,太多的无奈和迷茫,这次实习就像是我人生道路上的航标,为我指明了前景的方向,是我对自己的前途充满了信心,我不仅知道了在人生的岔道口更适合朝哪个方向前进!更知道了在今后的道路上怎么去武装自己!
实习结果:篇三:android生产实习报告
生产实习报告
一 实习目地
生产实习是把理论与实际结合,通过对理论知识的理解,领悟从而运用到生活实际,巩固所学的知识,提高对实际生活的认识,积累经验。同时生产实习也是大学生以学生身份到工作者身份的一个重要过度阶段。在此期间,学生能够初次体会到实际生产中的种种技能与经验。完成一项项项目,能体现出独立思考能力。android生产实习对目前应用现状进行了分析与比较,进而研究分析了android平台的系统架构和组件模型,在此基础上,基于android平台设计和开发,实现对android编程的理解与应用,特别是在对于控件的应用产生很深的理解。android平台是目前最普遍的手机应用平台,android实习可以让我们与时代最新最广泛的软件开发联系起来,锻炼我们的学习能力,并且让我们可以更加人性化,清晰的为用户考虑。
二 实习内容
此次实习是对android的简单的应用与开发,也是对android各个控件的学习与实践。在java的环境中对界面,应用进行编程。本次实习重点完成了安卓开发计算器、安卓开发学生注册界面、安卓开发音乐播放器和安卓开发游戏连连看这四个项目。
做学生注册界面的时候学习了linearlayout,tablelayout, absolutelayout, relativelayout四种布局,分别为线型布局,表格布局,绝对布局和相对布局,并知道了如何通过这四种布局的相互嵌套来使程序的界面更加的友好,更加的让用户接受。并简单的了解了安卓目录下src,gen,res等文件夹中的文件在项目中的作用,学习了切换界面的类intent。
然后学习了button,textview,seekbar等android开发的控件,并且将这些控件都运用到了所作的学生注册界面中。
做音乐播放器时学习了关于音乐文件的调用,也学习了在主文件main.java中先创建多媒体对象后,然后通过sd卡的文件路径来创建一个播放资源,然后在创建按钮对象,同时添加6个按钮对象创造各自的侦听方法,我们用listactivity来布局播放界面,用imagebutton来实现播放器的开始,暂停的操作。最后在开发连连看游戏时,将前面所学的知识进行综合与加深,也学习到了新的函数与控件,该游戏主要包括classgameview(游戏视类,处理游戏中出现的情况,包括界面生成,算法等)classgameactivity(处理游戏中的消息提示),classstartactivity(游戏菜单设计),classsetactivity(菜单中游戏难度设定)这些类。比如用random函数来对连连看进行重排列,还有用menu对游戏里的功能进行操作,还有用之前学到关于多媒体对象的调用将连连看游戏进行配乐。并且选用了网格对游戏界面进行了规划,以及对于相同图片的的消去,必须满足情况:1,图片相同;2,两个图片之间必须没有障碍物,可以用若干个垂直的直线连接起来;3,连接两个图片的直线线段的转折点不超过两个(连接线由x轴和y轴 的平行线组成,即无拐点,一个拐点,两个拐点)。
三 实习流程
此次对android应用与开发的实习分为以下几个阶段。
首先,由老师带领我们对android以及开发软件eclimpse进行了一个大概的了解与操作,并且对开发语言基础java的基础知识和编程思想进行了一次简单的复习与加深。
然后老师开始带领我们学习android界面的开发,并且告诉我们如何可以将界面尽量做得美观与方便,告诉我们作为程序的开发人员要为用户考虑,在这一阶段,我们开始试着学习和操作android的简单控件,包括textview,button等。
接着我们开始自己开发计算器,第一次将自己学到的控件进行组合搭配,并且开始学会怎么去监听按钮,通过对安卓常用类的学习,我们完成了计算器的常用功能。然而,对于计算机功能的实现,我感觉自己还没有办法做到自己想到的所有功能这让我对android更加满兴趣的学习下去。
当初步接触到了控件的开发与搭配后,我们开始开发学生注册界面,并且将所输入的信息反应到下一个界面中,在做这个的时候,我们又新学习了seekbar,checkbox等控件,让我们进一步学习了android中的常用控件。
然后是对音乐播放器的开发,此阶段我开始真正的接触到了生活中自己经常用到的软件的开发,并且也让我第一次感觉到需要将自己开发的软件做的美观,于是我们开始学会调用背景图片,调用歌曲,并且学习了radiobutton控件,以及播放器中对音乐的下跳,循环播放等功能的学习与实现。
最后是开发游戏“连连看”,在此之前老师先向我们介绍了对于图片的处理等相关知识。
对于连连看,我们很熟悉,也明白其中的游戏规则;然而把它们用计算机语言展示出来却比用文字语言展示出来要难上很多。因此这个项目也是用时最多的一个项目,期间融合了算法设计以及之前几个项目所学的知识。虽然在参考资料
下,完成了项目;但是也存在很多不足。当然也有自己特点的地方,比如添加了成功几步就奖励时间,比如游戏的配备音乐,以及音乐的开关按钮。
四 实习心得
通过这三个星期的毕业实习,我学到了很多关于android系统的技术知识,虽然实习的时间短暂但我仍旧收获很多。首先,在每一天我认识了新的控件及相关的使用;其次,我们了解android系统的历史和今后的发展以及相关android系统的总体构成,然后,我们学会了android编译系统的搭建,以及在这个环境下编写代码,最后制作了简单的音乐播放器以及连连看游戏等软件;在这个过程中,我真正的了解到了理论与实际相结合的必要性以及独立思考的重要性。
生成实习是为将来打基础的重要阶段,珍惜自己每一个工作的机会,不论什么人,什么学历,从事什么工作,好好的表现、展示自己的能力,不要错过好的机遇。没有一件事情是轻轻松松的,但每一件事都是让人成长的,经历一段过程,喜悦或是艰辛,尽管经历的方式不尽相同,但它的结果是相同的,我们都会因涉事而成长。通过这次实习,开阔了我的视野。这次的实习初步为我解开了安卓的神秘面纱,对于脑海中的那个可望而不可即,可玩儿不可解的安卓平台初步走入了它的神秘世界;既感到兴奋又感到惊奇,更感到压力,方知知识海洋的广大,学员任重道远。这次实习让我看清自己需要什么,同时也让我吸取了许多学习以及和人相处的经验,这将对我以后踏足社会,谋生立业有很好的借鉴和帮助作用。今后,我会珍惜这些宝贵的经验,在人生的旅途中勇往直前,迎接时代的挑战。篇四:安卓实训报告
实习报告书
专 业 计算机科学与技术 系 别
报告题目
安卓
报告人 班
级
指导教师
带队教师 实习时间 实习地点
教务处监制 篇五:安卓记事本实习报告 android记事本的设计与实现 ——sqlite数据库的设计和操作
学生姓名: 指导老师:
摘 要: 随着智能手机的快速普及,智能手机操作系统市场风生水起。android的最大特点是其开放性体系架构,不仅具有非常好的开发、调试环境,而且还支持各种可扩展的用户体验,包括丰富的图形组件、多媒体支持功能以及强大的浏览器。
本文主要介绍了一款android记事本sqlite数据库模块的设计与实现。根据人们日常生活的需要,该记事本的内容包括运用sqlite封装好的方法对数据进行添加、删除、修改、更新和密码进入等功能,并且将查询到的数据传递给activity,具有一定的实用性。关键词: 记事本;android;手势密码;sqlite;activity design and implementation of android notepad — design and operation of the sqlite database student name: advisor: this paper describes the design and implementation of an android notepad sqlite database module.according to the needs of daily life, including the contents of the notepad good way to use sqlite package data to add, delete, modify, update and password to access other functions, and query the data is passed to the activity, has a certain practicality.keywords notepad;android;gesture password;sqlite;activity 目录 目录.....................................................................................................................................................................3 1.引言...............................................................................................................................................................4 1.1 项目背景..............................................................................................................................................4 1.2 项目意义..............................................................................................................................................4 1.3 系统可行性分析..................................................................................................................................5 1.4 系统主要任务....................................................................................................................................5 2.系统方案设计.................................................................................................................................................6 2.1 搭建android开发平台.....................................................................................................................6 2.2 sqlite数据库简介............................................................................................................................7 2.3 总体方案设计...................................................................................................................................10 3.系统软件开发环境.......................................................................................................................................10 3.1 windows开发环境...........................................................................................................................10 3.2 java集成开发环境eclipse...........................................................................................................11 3.3 adt plugin for eclipse...............................................................................................................11 4.程序设计.......................................................................................................................................................12 4.1 程序详细设计...................................................................................................................................12 4.2 程序运行及效果截图.......................................................................................................................13 4.3 对sqlite数据库增删改查代码实现.............................................................................................18 5.工作总结与展望...........................................................................................................................................23 参考文献...........................................................................................................................................................24 1.引言
1.1 项目背景 window操作系统的诞生成就了微软帝国,同时也造就了pc时代的繁荣,然而如今,以android和iphone手机为代表的智能移动设备的发明与互联网云技术的兴起却敲响了pc时代的丧钟!这也预示着移动互联网时代(3g)已经来临。在这个互联网繁荣的时代,有一颗超新星,以它独特性能优势与人性化的ui设计使它在短短的几年迅速的占领了智能移动设备的市场份额,它就是google的android!这也意味着google在移动互联网时代开始抢跑并领跑。
通过调查显示,大部分消费者都会使用手机记事本功能。随着手机记事本功能的不断加强与完善,手机记事本对于人们的意义,已不仅仅像一般记事簿一样简单记录,而是向着更个性化人性化的方向发展。android[1]系统是开源的,它以迅猛的姿势已经占领了全球一半多的市场。记事本在生活和工作也日益凸显出它的重要性,它能更好地帮助人们更好地管理自己的工作和生活,极大的方便了人们的生活。因其开源,我们可以在之上开发安卓记事本软件,同时这也符合广大的市场需求。1.2 项目意义 近几年来随着3g技术成熟和智能手机的不断普及,移动应用的需求与日俱增,移动应用开发成为当下最热门的技术之一。在google和android手机联盟的共同推动下,android在众多移动应用开发平台中脱颖而出。android是一个真正意义上的开源智能手机操作系统,该系统一经推出立即受到全球移动设备厂商和开发者的热捧。
我们都知道,无论是产品还是技术,商业应用都是它最大的发展动力。安卓如此受到厂商与开发者的青睐,它的前景是一片光明的。国内对于安卓这方面的市场还没有完全开发出来。只要我们努力学习安卓,对理想,对生活都会有很大的补益。因此,开发这样一套很简单的记事本软件对我们来讲是一件很有必要的事情,在下面的各章中我们将以开发安卓记事本软件为例,谈谈其开发过程和所涉及到的问题及解决方法。1.3 系统可行性分析 1.3.1 课题调研
(1)与实践活动和相关的文件和资料由作者本人网络查找,以及老师帮助。
(2)具有遇到问题,具有独立思考,耐心钻研,向老师虚心求教的良好态度。
(3)关于技术方面的难题,跟指导老师面谈。1.3.2 可行性分析
(1)技术可行性:本项目仅需要一台装有eclipse及配置好android开发环境的计算机即可,对计算机本身有一定的要求,它可以使用windows xp及其以上版本,mac os,linux等操作系统。
(2)经济可行性:由于本软件开发只有三个人,三台电脑就行,基本不需要太大的成本.在经济上完全可行。
(3)操作可行性:界面设计时充分考虑用户的习惯以及手机方面的局限性,程序必须要很简单;本程序只涉及到开发环境配置,安卓组件的熟悉,以及安卓平台上的数据存储。并没有太大的难度,所以,该项目完全有可操作性。1.4 系统主要任务(1)设计实现”添加新记事”,”编辑内容”,”删除当前记事”这三个主要的功能模块。(2)分析并解决实现中的若干技术问题,像组件的选择以及保存方式的选择。(3)进行测试并分析结果。
当然记事本的基本功能,建立新文件、修改现有文件、删除文件、查看已建立文件等功能是首先必须完成的。可以编写内容,编辑及删除,让记事的方式多样化。记事本软件的界面设计力求简洁,给人清爽的感觉,让图标及按钮以协调的布局呈现出了,菜单功能要相对简单,让用户操作方便,从而让用户体会到此款软件的实用。因为上述操作涉及到的数据量不大,所以将数据库定为安卓系统自带的sqlite数据库[3],所以这就要求我们要实现在sqlite数据库上面的增删改查。不少人希望自己记事本上面的内容不被被人查看,所以要以设置密码的形式来实现保密。鉴于各种各样的密码实现方式,我们选择了用户体验最好的手势解锁方式。以及采用了更加友好的时间显示方式,让用户在使用过程中更加的舒服方便。记事本软件要内存占用适中,cpu占用也是适中,这样让软件运行顺畅。
第五篇:安卓课程设计报告
安 卓 课 程 设 计
班 级 09级计算机二班
学 号 20097923 姓 名 郭丹
目录
第1章
安卓应用程序开发背景..........................................................3 §1.1开发背景...................................................................................3 §1.2开发环境...................................................................................4 第2章 第3章 §3.1 §3.2 §3.3 第4章
安卓应用程序开发理论与方法..............................................4 “计算器”应用程序的设计与实现.......................................6 拟解决的问题及目标.............................................................6 总体设计................................................................................7 详细设计与编码实现.............................................................7 总结.......................................................................................17 2
第1章
安卓应用程序开发背景
§1.1开发背景
1.智能手机的市场
(1)功能多样化的智能手机挑战全球PC出货量
移动互联网时代的来临,直接促进了搭载智能操作系统、具有强大扩展性的智能手机、平板电脑等移动终端产业的蓬勃发展。来自美国最大的风险投资机构KPCB的数据显示,全球智能手机出货量正在以远高于台式电脑、笔记本电脑出货量的速度快速增长,该机构预计2011年全球智能手机出货量将达到4.13亿,超过台式电脑与笔记本电脑出货量的总和。
(2)智能手机的用户使用数量正在高速增长。据市场调研机构Gartner信息,2011年全球智能手机的总出货量将会达到4.68亿部,相比2010年实现了57.7%的增长,而谷歌Android操作系统将会在今年之内成为全球最大的智能手机操作系统。另外,全球市场调研机构IDC预计未来5年中国手机市场上,智能手机替代传统功能手机的趋势将日益明显,未来5年中国智能手机市场复合增长率将达到34.1%,人们对IT设备智能化的向往是这一增长率能够实现的主要因素,并且与其他国家相比,中国智能手机市场的发展空间更加广阔。(3)操作系统格局预测:Android有望成为智能手机市场主导力量
搭载Android操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。来自美国市场研究机构Gartner的数据显示,Android操作系统所占的市场份额从2008年的0.5%急剧增长到2011年的15.94%。开放的源代码和零成本已经让Android在全世界范围内受到青睐并迅速获得了主要手机厂商和数百万软件开发者的支持,Gartner预计,未来Android系统的市场份额有望超过其他操作系统,从而成为全球第一大智能手机操作系统。2.安卓手机介绍
安卓手机指的是用Android操作系统的手机。安卓(Android)是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。
同样都是手机上面用的智能系统,安卓的系统是新生系统,界面更为华丽,开源性更强,当然因为是新生系统,所以在第三方软件方面暂时还不太多。因此,安卓应用程序的需求还是很迫切的。3.软件人才需求
据业内统计,目前国内的Android研发人才缺口至少30万。由于目前Android技术较新,无论是相关书籍、培训还是大学教育,都处于初级阶段,因此Android人才短期将供不应求。从长期来看,随着各种移动应用和手机游戏等内容需求日益增加,也将激励大中小型手机应用开发商加大对Android应用的开发力度,因此Android人才的就业前景也非常广泛。
综上所述,在这样的背景下,安卓有很强的生命力。同时,作为一个新生的系统,其应用程序目前并不多,安卓应用程序的需求还是很迫切的,安卓研发人才的缺口还很大。这些都促进了我们学习开发安卓应用程序。
§1.2开发环境
安卓应用程序开发环境如下:
①JDK 5 or JDK 6(JRE alone is not sufficient)②Eclipse 3.3(Europa), 3.4(Ganymede)③Android SDK ④ADT 0.8.0 ⑤Eclipse安装ADT 插件
第2章
安卓应用程序开发理论与方法
1、Activity的相关知识
简单理解Activity 代表一个用户所能看到的屏幕,Activity 主要是处理一个应用的整体性工作。Activity是最基本的Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应。大多数的应用是由多个屏幕显示组成,因而要用到多个Activity。(1)Activity的相关方法及相关函数: A、void onCreate(Bundle)首次启动时调用,接受参数:Null or savedInstanceState(保存的以前某些状态信息)B、void onStart()说明了将要显示给用户的活动
C、void onRestart()将处于停止状态的活动重新显示给用户 D、void onResume()用户可以开始与活动进行交互时调用。如动画播放和音乐播放。E、void onPause()活动将要进入后台运行时调用。(此时前台启动了另一个活动)F、void onStop()不需要某个活动了,就调用 G、void onDestroy()销毁活动
(2)多个Activity之间的跳转:
通过Intent类实现屏幕之间的跳转(包括没有参数关系和需要传递参数两种情况)。
(3)两个Activity之间进行数据交换: startActivity()只有Intent一个参数。
public void startSubActivity(Intent intent, int requestCode)(requestCode:用来标识某一个调用,一般定义一个常量。)
传过去:函数原型为: public Intent setData(ContentURI data)然后,参数带到新的Activity后,同样用Activity.getIntent()函数可得到当前过来的Intent对象,然后用getData()就取到参数了。传回来:函数原型为: public final void setResult(int resultCode, String data)
2、Intent的相关知识 Intent 是描述应用想要做什么。Android 使用了Intent 这个特殊类,实现在屏幕与屏幕之间移动。Intent 数据结构两个最重要的部分是动作和动作对应的数据。Intent类绑定一次操作,它负责携带这次操作所需要的数据以及操作的类型等。
3、Layout 用于用户界面设计。包含AbsoluteLayout,FrameLayout,GridView,LinearLayout,ListLayout,RadioGroup,TableLayout等等。
在本程序中用到的有:(1)线性布局LinearLayout 垂直:android:orientation=“vertical“ 水平:android:orientation=”horizontal“(2)相对布局RelativeLayout 让子元素指定它们相对于其他元素的位置(通过ID 来指定)或相对于父布局对象。在RelativeLayout布局里的控件包含丰富的排列属性: Layout above:控件在指定控件的上方
Layout below:控件在指定控件的下方 Layout to left of„„
第3章
“计算器”应用程序的设计与实现
§3.1 拟解决的问题及目标
本计算器程序要解决日常生活中常见的基本数据计算问题,程序要实现的目标有如下几个:
(1)要实现基本的加、减、乘、除四则运算。
(2)可以实现在前一步计算结果上继续作加、减、乘、除,即连加、减、乘、除。
(3)有清空功能,即清除所有数据,重新开始计算。
(4)可实现基本的三角函数的计算,如:正弦,余弦,正切,余切。(5)可实现一些特殊运算,如:平方,立方,开方,求对数等。
§3.2 总体设计
1、系统的软件结构图
计算器基本加减乘除运算三角函数运算其他运算加减乘法法法除法正弦余弦正余切切平方立方开方对数 图3-1
2、功能的操作流程
首先用户根据自己的实际需要选择计算的类型,然后进入不同的计算类型,再进行要执行的运算,输入数据,选择运算符号,即可得到结果。
§3.3 详细设计与编码实现
1、功能选择界面
图3-2为系统主界面。用户可以根据需要点击不同按钮进入不同功能的子界面。亦可以点击退出按钮退出本程序。
图3-2
本界面用LinearLayout来布局,主要用到的控件是Button。页面的跳转是通过intent来是实现的。跳转的主要代码如下: public void onClick(View v)
{
Button btn=(Button)v;switch(btn.getId()){ case R.id.button1: Intent intent=new Intent();intent.setClass(mycalActivity.this, secondactivity.class);startActivity(intent);break;
case R.id.button2: Intent intent=new Intent();intent.setClass(mycalActivity.this, thirdactivity.class);
startActivity(intent);break;
case R.id.button3: Intent intent=new Intent();intent.setClass(mycalActivity.this, forthactivity.class);startActivity(intent);break;
case R.id.button4: finish();
}
2、基本加减乘除界面
图3-3为加基本减乘除界面。用户在文本框中输入参加运算的数据,并点击要进行的运算符号,然后点击等号之后,将在等号下方显示结果处显示出计算结果。点击clear按钮,可以将两个文本框中的内容以及显示的结果一起清空,用户可以输入新的数据计算。
在文本框中输入时可以用图右侧的硬键盘,或者是手机自带的软键盘。
图3-3
示例如下:
(1)用户要计算1.23+2.16.在文本框1中输入1.23,点击“+”,再在文本框2中输入2.16,点击“=”,就可以显示出计算结果3.39.如下:
图3-4
(2)计算1-0.32,如图3-5 图3-5
(3)计算3.24*0.25,如图3-6所示。
图3-6
4)计算55/4,结果为13.75.如下图所示:(图3-7
(5)计算1/6.如下图所示。由图3-8可以看出,当除不尽时本计算器保留到8位小数,并且最后一位采用了四舍五入的方法,比较科学、准确。
图3-8(6)点击clear之后全部清空:
图3-9
具体的实现:主要的思路是,用户先输第一个数,然后点击运算符号,在程序中监听按钮的点击,如果点击了+、--、*、/中某一按钮,这时,就取editText1中的值,通过myeditText1= editText1.getText().toString()实现,为了参与运算,需要把字符串类型转换为浮点型,并将其值赋给变量a,代码为a=Float.parseFloat(myeditText1);用flag的不同值记录用户点击的不同的运算按钮。当用户点击“=”时,就将editText2中的内容取出,也同样转化为数值,并用b记录,然后判断flag的值即可知道对应应采取哪种计算,进而算出最终结果,并用textView1显示出计算结果。“清空”的实现是使对应控件的内容取空即可。核心代码如下:
private OnClickListener listener=new OnClickListener(){
String myeditText1;String myeditText2;float a=0;int flag=0;
float b=0;float result;public void onClick(View v){
Button btn=(Button)v;switch(btn.getId()){ case R.id.button1: myeditText1= editText1.getText().toString();
flag=1;
break;case R.id.button2:
myeditText1= editText1.getText().toString();
a=Float.parseFloat(myeditText1);
flag=2;break;case R.id.button3:
myeditText1= editText1.getText().toString();
a=Float.parseFloat(myeditText1);
flag=3;break;case R.id.button4:
myeditText1= editText1.getText().toString();
a=Float.parseFloat(myeditText1);
flag=4;break;case R.id.button5:
myeditText2= editText2.getText().toString();b=Float.parseFloat(myeditText2);
a=Float.parseFloat(myeditText1);
};
}
if(flag==1)result = a+b;
else if(flag==2)result = a-b;else if(flag==3)result = a*b;
else
result=a/b;
String s = ”显示结果: “;s += result;
textView1.setText(s);break;case R.id.button6:
} editText1.setText(”“);editText2.setText(”“);textView1.setText(”显示结果:");break;
3、三角函数运算界面
图3-10为三角函数运算界面。用户在文本框中输入参与计算的数据,然后选择点击要进行的运算类型,这时在显示结果处就会显示计算结果。例如,要计算sin30度,先在文本框中输入30,然后点击sin按钮,这时就会显示结果为0.5.同理,可进行其他计算。
图3-10
4、其他运算界面
图3-11为其他运算界面,目前可实现平方、立方、开方、求以10为底的对数四种运算,由于时间有限,这个界面目前功能并不完善,暂时实现四种运算,不过,基于本计算器程序的设计理念,本界面主要实现一些其他运算,包括一些特殊运算。在今后,这个界面可以修改和扩充,以至拥有更加完善丰富的计算功能。在现有的界面上的操作流程如下:用户在文本框中输入要进行运算的数据,然后选择点击运算按钮,即可显示运算结果。如输入0.5,点击平方,即显示结果0.25,操作方便。
图3-11
第4章
总结
在本次安卓应用程序开发之中,我收获很多,现总结如下:
安卓设计开发过程初期,我打算设计制作一个计算器。但是,刚开始并不能预测难度,不知道在短期内能否很好的完成,于是我的想法是,先实现基本的加、减、乘、除四则运算,然后在此基础上进一步完善丰富其运算功能。首先遇到的问题便是要不要做一个数字键盘。刚开始也试着做了一个键盘,是用button做的,需要很好的布局,但是每当扩充一种功能时,为了使界面整体美观,甚至都要重新设计,很麻烦。后来候突然想到手机有硬键盘,也有自带的软键盘,何不运算的时候直接调出已有的软键盘?这样,根本没有什么必要自己做键盘了,而只需做出运算的按钮即可了。由于当时的目标只是实现加减乘除,因此设计的界面是用两个文本框输入两个数据,然后有+、-、*、/四个按钮供选择,又加一个“=”按钮用于触发显示结果。界面很简单,使用很方便。然后就是才用合适的算法来实现功能。经过思考和多次修改,最后确定了一种比较简明的算法实现。
基本加减乘除功能已经实现,但是计算器的功能过于简单了,接下来便是扩充功能。我首先想到的是需要能实现三角函数运算,常见的平方、开方等运算。但是我遇到了困难。由于刚开始设计的加减乘除运算都是二元运算,因此界面设计的是在两个文本框中输入两个数,但是三角函数计算,平方开方计算都是一元运算,参加运算的数据都只有一个,因而,在原界面上直接扩充并不合适,两个文本框成了扩充的限制。后来经过思考,决定将这些扩充的功能做到别的界面上,与已有的界面相独立,重新设计,这样只需将运算分类,再做一个功能选择的界面,点击不同的运算类别进入不同的运算界面即可,这样这个问题便得到了很好的解决。但是这次设计却给了我很大的教训,开发应用软件的初期设计很重要,不仅要实现现在的目标,还要考虑以后能否进行功能扩充,设计要便于以后的功能扩充,否则,到后来需要扩充时遇到困难,甚至要推翻已有的设计,花费很大的代价。另外,由于时间紧迫,三角函数界面和其他运算界面的功能并不十分完善,只是一些基本的运算,初步体现出了设计的思想,今后还可以进行进一步的扩充,以完善其功能。
在本次开发过程中,我对开发环境进一步的熟悉,基本上可以熟练运用这个 环境,也基本掌握了安卓的开发方法及基本流程。在本次开发过程中,主要用到的知识有Activity的使用,在程序中用到了多个窗口,因而需创建多个Activity。还用到了Intent,主要是用于多个Activity之间的跳转,对Intent的作用和用法有了更进一步的熟悉。在本次程序设计中,我也对用户界面设计有了更进一步的掌握,熟练运用Layout,本次用到的主要是LinearLayout和RelativeLayout。
开发期间,我学会了有目的的去学习一些将要用到的东西,仔细地考虑工作流程的规律和步骤,充分利用手中的开发工具,利用其所具备的功能,尽量使自己的开发在代码上实现少而精确、让用户能够尽量简单地进行操作。但是在检测过程中,还是出现了很多的不足之处,这些都是要在今后的工作中需要努力改进和完善的。
在这次程序开发设计中,我也难免会遇到不少困难,这主要是由于我对所用的开发环境并不是很熟悉,开发软件的经验不足。安卓开发用的语言是java,但是我对java的学习并不多,这次开发对我来说可以算是一个全新的尝试,整个开发过程并不是很顺利,却使我从中充分体会到学习的快乐,开发的程序也在一步步得到完善。这次程序开发由于个人水平及时间有限等原因,只能完成一些基本的功能,好多设想并未完全实现,这不能不说是个遗憾,后期仍需努力。