android的contacts学习笔记
- 格式:docx
- 大小:50.06 KB
- 文档页数:39
Android权限(permission)整理在Android的设计中,资源的访问或者⽹络连接,要得到这些服务都需要声明其访问权限,否则将⽆法正常⼯作。
在Android中这样的权限有很多种,这⾥将各类访问权限⼀⼀罗列出来,供⼤家使⽤时参考之⽤。
1.android.permission.WRITE_USER_DICTIONARY允许应⽤程序向⽤户词典中写⼊新词2.android.permission.WRITE_SYNC_SETTINGS写⼊Google在线同步设置3.android.permission.WRITE_SOCIAL_STREAM读取⽤户的社交信息流4.android.permission.WRITE_SMS允许程序写短信5.android.permission.WRITE_SETTINGS允许程序读取或写⼊系统设置6.android.permission.WRITE_SECURE_SETTINGS允许应⽤程序读取或写⼊安全系统设置7.android.permission.WRITE_PROFILE允许程序写⼊个⼈资料数据.android.browser.permission.WRITE_HISTORY_BOOKMARKS允许⼀个应⽤程序写(但不可读)⽤户的浏览历史和书签9.android.permission.WRITE_GSERVICES允许程序修改Google服务地图10.android.permission.WRITE_EXTERNAL_STORAGE允许程序写⼊外部存储,如SD卡上写⽂件11.android.permission.WRITE_CONTACTS写⼊联系⼈,但不可读取12.android.permission.WRITE_CALL_LOG允许程序写⼊(但是不能读)⽤户的联系⼈数据13.android.permission.WRITE_CALENDAR允许程序写⼊⽇程,但不可读取14.android.permission.WRITE_APN_SETTINGS允许程序写⼊⽹络GPRS接⼊点设置15.android.permission.WAKE_LOCK允许程序在⼿机屏幕关闭后后台进程仍然运⾏16.android.permission.VIBRATE允许程序振动E_SIP允许程序使⽤SIP视频服务E_CREDENTIALS允许程序请求验证从AccountManager19.android.permission.UPDATE_DEVICE_STATS允许程序更新设备状态uncher.permission.UNINSTALL_SHORTCUT删除快捷⽅式21.android.permission.TRANSMIT_IR允许使⽤设备的红外发射器,如果可⽤22.android.permission.SYSTEM_ALERT_WINDOW允许程序显⽰系统窗⼝23.android.permission.SUBSCRIBED_FEEDS_WRITE允许程序写⼊或修改订阅内容的数据库24.android.permission.SUBSCRIBED_FEEDS_READ允许程序访问订阅信息的数据库22.android.permission.STATUS_BAR允许程序打开、关闭、禁⽤状态栏23.android.permission.SIGNAL_PERSISTENT_PROCESSES允许程序发送⼀个永久的进程信号24.android.permission.SET_WALLPAPER_HINTS允许程序设置壁纸建议25.android.permission.SET_WALLPAPER允许程序设置桌⾯壁纸26.android.permission.SET_TIME_ZONE允许程序设置系统时区27.android.permission.SET_TIME允许程序设置系统时间28.android.permission.SET_PROCESS_LIMIT允许程序设置最⼤的进程数量的限制29.android.permission.SET_PREFERRED_APPLICATIONS允许程序设置应⽤的参数,已不再⼯作具体查看addPackageToPreferred(String) 介绍30.android.permission.SET_POINTER_SPEED⽆法被第三⽅应⽤获得,系统权限31.android.permission.SET_ORIENTATION允许程序设置屏幕⽅向为横屏或标准⽅式显⽰,不⽤于普通应⽤32.android.permission.SET_DEBUG_APP允许程序设置调试程序,⼀般⽤于开发33.android.permission.SET_ANIMATION_SCALE允许程序设置全局动画缩放34.android.permission.SET_ALWAYS_FINISH允许程序设置程序在后台是否总是退出.android.alarm.permission.SET_ALARM允许程序设置闹铃提醒37.android.permission.SET_ACTIVITY_WATCHER允许程序设置Activity观察器⼀般⽤于monkey测试38.android.permission.SEND_SMS允许程序发送短信39.android.permission.SEND_RESPOND_VIA_MESSAGE允许⽤户在来电的时候⽤你的应⽤进⾏即时的短信息回复。
以下均是使用模拟器对Android 2.2系统联系人进行的分析。
系统联系人数据库存放在如下位置(data\data\com.android.providers.contacts\data bases\):数据库名为contacts2.db图 1使用SQLite Expert Professional打开该数据库,存在以下表:图 2其中有比较重要的三个表:data、raw_contacts、contacts。
一、三个重要的表1、data表data表中存放的是联系人具体信息,每行存储一位联系人的某个信息(如电话,姓名,邮箱等),结构如下:图 3data表建表语句如下:CREATE TABLE data (_id INTEGER PRIMARY KEY AUTOINCREMENT, 主键,每行IDpackage_id INTEGER REFERENCES package(_id),mimetype_id INTEGER REFERENCES mimetype(_id) NOT NULL, 引用表mimetypes,代表该行数据类型(The kind of data stored in a given row is specified by the row's MIMETYPE value, which determines the meaning of the generic columns DATA1 through DATA15)raw_contact_id INTEGER REFERENCES raw_contacts(_id) NOT NULL, 引用表raw_contacts,代表该数据所对应的联系人IDis_primary INTEGER NOT NULL DEFAULT 0,is_super_primary INTEGER NOT NULL DEFAULT 0,data_version INTEGER NOT NULL DEFAULT 0,data1 TEXT, 该行数据的主要信息,如电话号码,姓名等(DATA1 is an indexed column and should be used for the data element that is expected to be most frequently used in query selections.)data2 TEXT,data3 TEXT,data4 TEXT,data5 TEXT,data6 TEXT,data7 TEXT,data8 TEXT,data9 TEXT,data10 TEXT,data11 TEXT,data12 TEXT,data13 TEXT,data14 TEXT,data15 TEXT, data1-data15每项含义与mimetype_id有关data_sync1 TEXT,data_sync2 TEXT,data_sync3 TEXT,data_sync4 TEXT );data表触发器如下:CREATE TRIGGER data_updated AFTER UPDATE ON data BEGIN UPDATE data SET data_version=OLD.data_version+1 WHERE _id=OLD._id; UPDATE raw_contacts SET version=version+1 WHERE_id=OLD.raw_contact_id; END;CREATE TRIGGER data_deleted BEFORE DELETE ON data BEGIN UPDATE raw_contacts SET version=version+1 WHERE _id=OLD.raw_contact_id; DELETE FROM phone_lookup WHERE data_id=OLD._id; DELETE FROM status_updates WHERE status_update_data_id=OLD._id; DELETE FROM name_lookup WHERE data_id=OLD._id; END;目前模拟器中联系人如下:图 4图 6图 8数据库data表的数据如下:其中raw_contact_id值为3、5、6、8的行被标注,其对应的联系人为模拟器中的4个联系人:A(电话:1)、B(电话:2)、C(电话:3)、D-name2 D-name1(电话:123、456,住宅邮箱:email-home,住宅地址:Street City,Province postcode,组织:Whu,Stu),见图4―图8。
开发中需要获取手机用户的通讯录信息,要求运行在Andrid2.0及以上版本,因为程序中用到了Android2.0新的API。
程序运行结果通过Log.v写入到了日志,结果部分截图:程序的主要代码如下:protected void getContactInfo() {//获得通讯录信息,URI是ContactsContract.Contacts.CONTENT_URICursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);while (cursor.moveToNext()) {//获得通讯录中每个联系人的IDString contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));//获得通讯录中联系人的名字String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAM E));Log.v(TAG, "…name…" + name);//查看给联系人是否有电话,返回结果是String类型,1表示有,0表是没有String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER) );if (hasPhone.equalsIgnoreCase("1"))hasPhone = "true";elsehasPhone = "false";//如果有电话,根据联系人的ID查找到联系人的电话,电话可以是多个if (Boolean.parseBoolean(hasPhone)) {Cursor phones = getContentResolver().query(monDataKinds.Phone.CONTENT_URI,null,monDataKinds.Phone.CONTACT_ID+ " = " + contactId, null, null);while (phones.moveToNext()) {String phoneNumber = phones.getString(phones.getColumnIndex(monDataKinds.Phone.N UMBER));Log.v(TAG, "…phoneNumber…" + phoneNumber);}phones.close();}//查找email地址,这里email也可以有多个Cursor emails = getContentResolver().query(monDataKinds.Email.CONTENT_URI,null,monDataKinds.Email.CONTACT_ID + " = "+ contactId, null, null);while (emails.moveToNext()) {String emailAddress = emails.getString(emails.getColumnIndex(monDataKinds.Email.DATA ));Log.v(TAG, "…emailAddress…" + emailAddress);}emails.close();//获得联系人的地址Cursor address = getContentResolver().query(monDataKinds.StructuredPostal.CONTENT_ URI,null,monDataKinds.StructuredPostal.CONTACT_ID+ " = " + contactId, null, null);while (address.moveToNext()) {// These are all private class variables, don’t forget to cre ate// them.String poBox = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.POBOX));String street = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.STREET));String city = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.CITY));String state = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.REGION));String postalCode = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.POSTCODE));String country = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.COUNTRY));String type = address.getString(address.getColumnIndex(monDataKinds.StructuredP ostal.TYPE));Log.v(TAG, "…city…" + city);}}cursor.close();}代码中已经有了注释,这里不做过多解释,比较重要的方法getContentResolver().query在文章Android简单操作sqlite中有解释。
Android联系⼈Contacts详解1.获取联系⼈详细信息在(⼀)中我们只是获取了联系⼈的ID和NAME,但是这是远远不够的,怎么样获取其他的值呢?public void fetchContactInformation() {String id,name,phoneNumber,email;ContentResolver contentResolver = this.getContentResolver();Cursor cursor = contentResolver.query(android.provider.ContactsContract.Contacts.CONTENT_URI,null, null, null, null);while(cursor.moveToNext()) {id=cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID));name=cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME));//Fetch Phone NumberCursor phoneCursor = contentResolver.query(monDataKinds.Phone.CONTENT_URI,null, monDataKinds.Phone.CONTACT_ID+"="+id, null, null);while(phoneCursor.moveToNext()) {phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(monDataKinds.Phone.NUMBER));System.out.println("id="+id+" name="+name+" phoneNumber="+phoneNumber);}phoneCursor.close();//Fetch emailCursor emailCursor = contentResolver.query(monDataKinds.Email.CONTENT_URI,null, monDataKinds.Email.CONTACT_ID+"="+id, null, null);while(emailCursor.moveToNext()) {email = emailCursor.getString(emailCursor.getColumnIndex(monDataKinds.Email.DATA));System.out.println("id="+id+" name="+name+" email="+email);}emailCursor.close();}cursor.close();}结果:11-06 14:38:32.049: I/System.out(26534): id=4 name=张三 phoneNumber=1-234-5611-06 14:38:32.138: I/System.out(26534): id=5 name=李四 phoneNumber=654-32111-06 14:38:32.138: I/System.out(26534): id=5 name=李四 phoneNumber=987-654-32111-06 14:38:32.188: I/System.out(26534): id=5 name=李四 email=wssiqi@在这⾥,我们通过android.provider.ContactsContract.Contacts.CONTENT_URI 来获取联系⼈的ID和NAMEmonDataKinds.Phone.CONTENT_URI 获取联系⼈的电话号码monDataKinds.Email.CONTENT_URI 获取联系⼈的邮箱地址关键是ContactsContract下⾯有很多类,很不容易找到到底哪个类包含我们需要的内容。
android移动应用开发技术课第一章笔记第一章:Android移动应用开发技术课笔记一、引言在当今移动互联网时代,Android系统以其开放性和普及率成为了最受欢迎的移动操作系统之一。
随着移动应用市场的不断扩大,对Android移动应用开发技术的需求也日益增加。
学习和掌握Android移动应用开发技术成为了越来越多人的选择。
二、Android移动应用开发技术概述1. 什么是Android?Android是一款基于Linux操作系统的开源移动设备操作系统,主要用于触摸屏移动设备,如智能手机和平板电脑。
Android操作系统的开放性使得开发者可以自由定制和开发应用,受到了广大用户的喜爱。
2. Android移动应用开发技术的重要性随着信息化和数字化的发展,移动应用成为了人们获取信息和进行交流的重要方式。
而Android作为最主流的移动操作系统之一,其应用的开发和推广具有巨大的市场潜力和商业价值。
掌握Android移动应用开发技术成为了许多开发者和从业者的追求目标。
三、学习Android移动应用开发技术的重要性1. 对于个人的意义学习Android移动应用开发技术可以提升个人的职业技能,并且在移动应用开发领域有更多的发展机会。
可以通过开发自己的应用来实现个人价值和创造财富。
2. 对于企业的意义随着移动互联网的发展,各类企业都希望拥有自己的移动应用,以提升品牌形象和服务用户。
懂得Android移动应用开发技术的人才对企业来说显得格外宝贵。
四、学习Android移动应用开发技术的途径1. 自学通过阅读相关书籍、网上教程和参加线上培训班,可以自学Android 移动应用开发技术。
这种方式需要具备较好的自学能力和毅力。
2. 参加培训班选择权威的培训机构进行系统的学习和培训,可以更快速、系统地学习Android移动应用开发技术。
五、Android移动应用开发技术的未来发展随着人工智能、物联网、区块链等技术的不断发展,Android移动应用开发技术也将不断拓展应用场景和技术深度。
Android开发之获得通讯录及SIM卡中联系人Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来。
这一篇文章我主要带领同学们熟悉Android的通讯录机制。
图中选中的数据库 contacts2.db就是系统储存联系人的数据库,我们将它打开看看里面储存了些什么东东?打开contacts.db后发面里面有一堆表,同学们先别慌张。
今天我们主要讨论红框内的4个比较常用的表,后期我在介绍其它表的使用。
这里说一下如果你想在真机上查看数据库的话必需要先获得root权限,否则无法查看。
1.contacts 表_id :表的ID,主要用于其它表通过contacts 表中的ID可以查到相应的数据。
display_name: 联系人名称photo_id:头像的ID,如果没有设置联系人头像,这个字段就为空times_contacted:通话记录的次数last_time_contacted: 最后的通话时间lookup :是一个持久化的储存因为用户可能会改名子但是它改不了lookup2.data表raw_contact_id:通过raw_contact_id可以找到 raw_contact表中相对的数据。
data1 到 data15 这里保存着联系人的信息联系人名称联系人电话号码电子邮件备注等等。
3.phone_look_up表data_id : 通过data_id可以找到 datat表中相对的数据。
raw_contact_id : 通过raw_contact_id 可以找到 raw_contact_表中相对的数据。
normalized_number: 这个字段就比较有意思了,它是将每个电话号码逆序排列。
4.raw_contact表version :版本号,用于监听变化deleted :删除标志, 0为默认 1 表示这行数据已经删除display_name : 联系人名称last_time_contacts : 最后联系的时间有关这些的源码都在android.provider.ContactsContract这个类里面,如果想深入了解的话可以去看看,数据库相关的操作联查啊啥的都在里面。
android dialogx用法Android DialogX是一个功能强大且易于使用的Android对话框库。
它以其灵活性和易于定制的特点而受到开发者的欢迎,并提供了多种对话框样式和交互选项。
本文将逐步回答关于Android DialogX的用法,帮助大家更好地理解和使用这个库。
第一步:引入DialogX库和配置Gradle依赖使用DialogX之前,我们首先需要在项目的build.gradle文件中配置以下依赖:gradledependencies {implementation 'com.kongzue.dialogx:dialogx-core:1.0.0'implementation 'com.kongzue.dialogx:dialogx-ui:1.0.0'}完成以上操作后,我们就可以开始使用DialogX了。
第二步:创建一个基本的对话框我们可以使用DialogX创建多种类型的对话框。
首先,我们可以通过调用DialogX类的`show`方法来显示对话框。
下面是一个示例代码,创建一个基本的对话框:javaDialogX.dialog(MainActivity.this).setTitle("提示").setMessage("这是一个对话框").setPositiveButton("确定", new DialogX.OnClickListener() { @Overridepublic void onClick(Dialog dialog) {处理确定按钮点击事件}}).setNegativeButton("取消", null).show();在上面的代码中,我们通过`dialog`方法创建一个对话框实例,设置标题和消息,并为确定按钮和取消按钮添加了点击事件处理逻辑。
第三步:创建其他类型的对话框DialogX不仅支持基本的对话框样式,还提供了其他各种类型的对话框。
Contacts(通讯录)在交往对象提供对设备的访问联系人数据库。
方法• • contacts.create contacts.find参数• • • • contactFields contactSuccess contactError contactFindOptions对象• • • • • • • Contact ContactName ContactField ContactAddress ContactOrganization ContactFindOptions ContactErrorcontacts.create返回一个新的联系对象。
var contact = navigator.service.contacts.create(properties);说明contacts.create 是一个同步函数,返回一个新的 联系 对象。
这种方法不存在的 联系 对象到设备联系人数据库。
要坚持的 联系 对象到设备, 调用 联 系 。
保存 方法。
支持的平台 支持的平台• •Android BlackBerry WebWorks(操作系统 5.0 和更高版本)•iOS简单的例子var myContact = navigator.service.contacts.create({"displayName": "Test User"});完整的例子<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "/TR/html4/strict.dtd"> <html> <head> <title>Contact Example</title> <script type="text/javascript" charset="utf-8" src="phonegap.js"></script> <script type="text/javascript" charset="utf-8"> // Wait for PhoneGap to load // function onLoad() { document.addEventListener("deviceready", onDeviceReady, false); } // PhoneGap is ready // function onDeviceReady() { var myContact = navigator.service.contacts.create({"displayName": "Test User"}); myContact.gender = "male"; console.log("The contact, " + myContact.displayName + ", is of the " + myContact.gender + " gender"); } </script> </head> <body onload="onLoad()"> <h1>Example</h1> <p>Create Contact</p> </body> </html>contacts.find查询设备联系人数据库,并返回一个或多个 联系 对象,每个包含字段中指定。
Android platform是一个用于开发移动程序的软件包,它包括了操作系统、中间件及一些关键应用。
开发者能使用android SDK为Android platform开发应用,这些应用使用JA VA语言书写,运行在虚拟机Dalvik(一个专为手机程序开发的基于linux内核的JA VA虚拟机)。
/wiki/index.php?title=%E7%BF%BB%E8%AF%91%E4%BB%BB%E5 %8A%A1%E9%A2%86%E5%8F%96&printable=yes/forumdisplay.php?fid=21 什么是Android1.1 Android的特性ü应用框架,让一些基础设施得以重用üDalvik虚拟机,专为开发移动程序优化ü集成的浏览器,(基于WebKit引擎)ü优化的图形库,(2D图形库以及基于OpenGL ES 1.0规范的3D图形库)üSQLite,用于结构化数据的存储,是一个数据库ü多媒体支持,支持多种音频,视频格式(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)üGSM技术(依赖具体硬件)üBluetooth, EDGE, 3G, WiFi(依赖具体硬件)üCamera, GPS, compass, accelerometer(依赖具体硬件)ü丰富的开发环境(DEBUG工具,内存及性能工具,Eclipse的插件等)1.2 Android的架构Android操作系统的模块如下:Ø 应用:Android已集成了一些应用,如邮件客户端,SMS程序,日历,地图,浏览器等Ø 应用框架:Ø 程序库:Ø 例行程序Ø Linux内核2 Andvoid起步2.1 开发环境配置使用Eclipse + Android Development T ools (ADT)插件。
在Help > Software Updates > Find and Install....中键入更新地址:https:///android/eclipse/2.2 运行第一个Andvoid程序使用Eclipse插件1、建立的工程类型为:Andvoid Project2、建立Launch Configuration. Run > Open Run Dialog... or Run > Open Debug Dialog命令行运行程序1、创建工程activityCreator .ActivityName2、编译。
在build.xml所在的目录ant一下。
3、启动模拟器. 运行命令:emulator4、在模拟器中,切换到主屏幕。
5、在命令行输入: adb install myproject/bin/<appname>.apk将其上载至模拟器。
6、在模拟器中选择程序并启动。
Android需要专门的编译工具来正确的编译资源文件和Android程序的其他部分。
基于此,你需要为你的程序准备一个专门的编译环境。
Andorid的编译过程通常包括编译XML和其他资源文件、创建正确的输入格式。
经过编译的Android程序是一个.apk文件,.apk文件是一个压缩文件,它其中包含了.dex文件、资源文件、raw data文件和其他文件。
Andoriod暂时还不支持用本地代码(C/C++)开发第三方程序。
移除Andorid程序要移除你安装在模拟器上的程序,你需要通过run adb并删除相应的.apk文件。
通过adb shell命令在模拟器上打开一个UNIX shell,进入目录data/app/,通过命令rm 你程序的名称.apk来移除文件。
2.3 调试程序Andvoid用于调试的手段有:DDMS,DDMS是一个图形化的程序,支持端口转发(因此你可以在程序中设置断点),支持模拟器上的截屏,支持线程和堆栈信息和其他的一些特性。
Logcat,Dump一份系统消息的日志。
这些消息包括模拟器抛出错误时的堆栈跟踪。
Android Log, 打印日志的类,用来将消息写入模拟器上的日志文件中。
如Log.v()用于打印verbose级别的日志Traceview,Android可以保存一个日志用来记录被调用的方法以及该方法被调用的次数,通过Traceview你可以在一个图形化的界面中查看这个日志文件。
可接解设置emulator的设置以方便调试,模拟器上调试和测试的设置Android提供了众多的设置使你可以更容易的调试和测试程序。
要进入开发设置页面,在模拟器中转到Dev T ools > Development Settings。
在该设置页面有以下选项:Debug app:选择要调试的程序。
你不需要设定其关联至调试器,但是设定这个值有两个效果:在调试的时候,如果你在一个断点处暂停了过长的时间,这个设定会防止Android抛出一个错误这个设定使你可以选择“等待调试器”选项,使程序只有在调试器关联上之后才启动Wait for Debugger:阻塞所选的程序的加载直到有调试器关联上,这样你就可以在onCreate()中设置断点,这对于调试一个Activity的启动进程是非常重要的。
当你对该选项进行了更改,任何正在运行的程序的实例都会被终止。
你只有在上面的选项中选择了一个调试程序才能够选中该选项。
你一也可以在代码中添加waitForDebugger()来实现同样的功能。
Immediately destroy activities:告诉系统一旦一个activity停止了就销毁该activity(例如当Android释放内存的时候)。
这对于测试代码onFreeze(Bundle)/onCreate(android.os.Bundle)是非常有用的,否则会比较困难。
如果你的程序没有保存状态,那么选择这个选项很可能会引发很多问题。
Show screen updates:对于任何正在被重绘的screen sections都会在其上闪现一个粉红色的矩形。
这对于发现不必要的screen绘制是很有必要的。
Show CPU usage:在屏幕上方显示CPU信息,显示有多少CPU资源正在被使用。
上方红色条显示总的CPU使用率,它下方绿色的条显示CPU用在compositing the screen上的时间。
注意:在没有重启模拟器之前,一旦你开启了该功能就不能关闭。
Show screen FPS:显示当前的帧率。
这对于查看游戏达到的总的帧率是非常有用的。
注意:在没有重启模拟器之前,一旦你开启了该功能就不能关闭。
Show background:当没有activity screens可见时,显示一个背景模式。
一般是不会出现的,仅仅在Debug的时候会出现。
设定的选项在模拟器重启之后仍然有效,如果要取消设定的选项,在取消设定以后还要重启模拟器,才能生效。
2.4 andvoid中的概念一个andvoid应用包括四个部分:n Activity活动(个人认为:类似于JSP, 也相当于SWT中的Shell, View则相当于wegiet)n Intent Receiver (个人认为:类似于Struts action)n Service (个人认为:类似于Servlet)n Content Provider (个人认为:用于持久化)用上面哪些组件,要在AndroidManifest.xml文件中声明。
1、Activity. 一个activity是应用中的一个单一的屏幕,它继承自Activity类,它将显示由Views组成的UI以及响应事件。
(个人理解,相当于JSP)2、Intent与Intent Filters. Intent用于从一个屏幕跳到别一个屏幕,描述一个应用想做什么,它的数据结构包括action与data两部分,它是一个消息操作对象,一个被动的数据结构。
action如MAIN、VIEW、PICK、EDIT等等, data被表达成一个URI;IntentFilter相当于告诉跳到哪个activity,;IntentReceiver用于响应事件,虽然它不显示UI,但它可以用NotificationManager去通知用户。
它需要在AndroidManifest.xml文件中注册,或者是用Context.registerReceiver()硬编码。
3、Service是一段有生命周期的无UI的代码。
4、Content Provider, 持久化,例如存储在文件系统中,或者存储在SQLite数据库中。
2.5 例子1,下载例子工程。
/android/intro/codelab/NotepadCodeLab.zip 例如:Notepadv1工程是问题工程,Notepadv1Solution则是相应的解决工程。
2,3个例子的函义如下:通过练习1>1. 数据库对象的例子程序2. 如何在一个Activity初始化的时候创建数据库对象3. 如何为一个Activity创建一个pop菜单4. 如何得到一个用户在POP菜单中选择的ITEM 的ID5. 如何向一个ListView中写入数据通过练习2>1.如何取得数据集中被选择数据行的ID,注意rows是java的一个listarray对象,所以它有它的getSelection()的方法2.如何调用一个SubActivity以及在调用一个SubActivity之前应该做些事情。
3.要实现一个方法,当SubActivity返回后,应该做些什么4.关于layout。
由于Android采用MVC的模式,所以屏幕的布局采用了XML进行定义。
一个好的布局会让程序显的更漂亮。
可以参考/android/reference/view-gallery.html,有很多的布局模式可供利用。
5.如何创建一个开始的时候代码中不含onCreate()的类,因为到目前为止还没有创建过自己的类,以前看到的类和修改的方法都是已经写好的了。
不过这个类也是一个从android.app.Activity继承的。
创建后还是要通过Source Override一个onCreate的6.从一个SubActivity返回时,在返回之前应该做哪些事情7.如何在AndroidManifest.xml中声明一个新的Activity8.如何创建一个内部隐含的onClickLister及实现其应有的功能。
通过练习3>1. 除了onCreate()还有哪些和lifecycle有关的方法a.onFreeze():b.onPause()c.onResume()等等…2. 大部分程序都有必要考虑lifecycle的问题,应该把下面的这个图记住:3. 为了不丢失需要保存的信息,要明确的理解Activity的各个状态,并相应的给出在各个状态的行为。