android通讯录监听
‘壹’ android手机通讯录页面布局怎么做
基于android的通讯录的设计与实现
一:引言
学了android的开发与设计课后,对计算机软硬件相关知识有了一定的了解;基于此,设计与实现一个在Android系统上运行的手机通讯管理软件,实现手机通讯录的基本功能,包括:添加联系人、查看联系人、修改联系人、删除联系人、拨打电话、发送短信、查询联系人,以及联系人的导入导出功能即联系人的备份。
主要开发基于Android
的手机的通讯管理软件。以Java语言为基础,结合Android移动开发平台,并利用Android提供的SDK,实现在Android平台上运行的手机通讯录,方便广大手机用户更加便捷地对联系人的信息进行管理。该手机通讯录面向所有的Android手机用户,为他们提供更实际便捷的手机服务,具有拨号、通讯记录等基本功能。该通讯录的数据导出功能是该软件的一个特色,可以实现联系人数据导出到文本,实现数据备份。大家生活当中经常遇到手机丢失,出现故障,和其他一些事故。最担心的就是丢失手机里的电话号码。
1.1. 选题目的及意义
随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。在Google和Android手机联盟的共同推动下,Android在众多手机操作系统中脱颖而出,受到广大消费者的欢迎。
手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。根据手机功能使用调查显示,有八成以上的消费者使用手机通讯录功能。随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展。通讯录从无到有,从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展为名片夹,也就是在一个人名下,可以存储座机、手机、单位、地
址、电子邮件等内容。这种名片夹在电话薄的基础上,大大丰富了内容,同时结构也发生了革命性变化,而且随着手机的发展,相信更优秀的通讯录会越来越受到社会各层人士的喜爱。
1.2. 项目背景
Android一词的本义指"机器人",同时也是Google在2007年11月5日宣布的基于Linux内核的开源手机系统的名称,中文注册商标"安致",
该平台由操作系统、中间件、用户界面和应用软件组成,是一个为移动终端打造的真正开放和完整的智能手机系统。其早期为Google开发,后由开放手机联盟( Open
Handset Alliance)开发。它采用了软件堆层(software
stack,又名以软件叠层)的架构,主要分为三部分,底层以Linux内核为基础,由C语言开发,只提供基本功能;中间层包括数据库Library和虚拟机Virtual
Machine,由C++开发;最上层是由各公司自行开发,以Java编写的各种应用软件,如通话程序,短信程序等。 二:功能需求。
根据用户需求总结出来的反映了用户需求的系统逻辑模型转换成可以实施的物理模型,把整个设计划分成单元,主要解决如何去做的问题,要想创建整个通讯录首先要通过增加联系人信息来创建通讯录。整个应用程序应划分为4个模块,分别是程序启动、用户界面、后台服务和数据库适配器,各模块之间的关系如图所示:
从上图中不难看出,后台服务是整个应用程序的核心,主要是“数据获取模块”,负责周期性
的从用户输入的内容中获取信息。
后台服务在程序启动时就由AppWidgetProvider启动,也可由用户界面通过startService(进行启动,启动后的后台服务将一直保持运行状态。同时用户界面从数据获文本信息。一方面可以避免因网络通信不畅造成界面失去响应;另一方面,后台服务可以及时更新数据,以保证数据的准确性。数据库适配器封装了所有对SQLite数据库操作的方法用户界面和后台服务会调用它来实现数据库操作。在完成用户界面设计、数据库设计和模块设计后,至此程序设计阶段基本完成。文本编辑器中不同功能界面之间的切换,用户可以通过点击menu键来切换到不同的功能界面,不同功能界面的切换如图
三:设计思路。
开发的基于Android手机通讯录具有十分重要的意义。可以根据客户需求的实际情况,开发一款实用的手机通讯录软件。
本设计主要是采用Android的View框架编写,部分框架运用Android中的其他组件。
当进入通讯录的增加界面时,调用的是一个用相对布局RelativeLayout的XML布局文件。其中包括了2个Button,分别实现了不同的功能。
第一个Button是保存内容,当输入联系人姓名和号码是点击保存实现此功能。说到保存,不得不说得是保存信息涉及添加新联系人的头像,姓名,手机号码,办公室电话,家庭电话,职务职称,单位名称,地址,邮政编码,Email,其他联系方式,备注这些信息。
第二个Button是返回,顾名思义就是从增加界面返回前一界面。
响应menu键的触发事件,设置底部菜单是否可见,并通过对底部菜单选项的监听实现底部菜单中的增加、查找、删除、菜单、退出等功能,其中菜单包括显示所有、删除所有、号码备份功能。
在联系人信息界面时通过点击menu键,会弹出通信功能框,通过与发信息、打电话、发邮件功能接口的套用来实现。
四:流程图
一个好的系统设计的步骤决定了程序是否能按照设计者的目的按时完成,是否能在规定的时间内按照设计者的要求高质量的完成程序必要的功能。并且按照标准的设计步骤对程序进行调试,测试,以及后期的优化完善,使程序更加具有健壮性和可用性。通过对通讯录功能、系统模块、用户需求方面进行全方位的分析制定开发流程,开发流程如图4-1所示。
图4-1开发流程图
采用标准的开发流程确定系统具有用户管理功能,联系人增删改功能,通讯功能,查找功能,备份等功能。系统的功能图如4-2所示。
图4-2 系统功能图
通过对系统的功能结构的分析,设计后系统运行流程是系统运行后用户将进入通讯录主界面,可以看到联系人列表。通过点击MENU界面的增加功能选项可以新增联系人
‘贰’ 如何调用android通讯录
这个过程有三步:
1)许可向你的应用程序的manifest中添加读取通讯录数据的许可
<uses-permission android:name="android.permission.READ_CONTACTS"/
2)调用Contact Picker
在你的activity中,创建一个Intent,用来请求系统查找一个能够执行一个从Contacts URI的项目中发出的PICK动作的activity,
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
调用startActivityForResult在Intent中传递(和一个整数的请求代码,在这个例子中是PICK CONTACT )。这将导致android启动一个已经被等级的activity,用来支持在People.CONTENT URI上的ACTION_PICK ,然后当按下选择(或者取消)的时候返回到这个activity。startActivityForResult(intent, PICK_CONTACT);
3)仍然在你的activity中,重写onActivityResul方法来监听在你的第二个步骤中启动的activi'select a contact' activity的回调。你应该检查反馈的请求代码是否匹配你的期望值,结果代码是否是 RESULT_OK。
通过在数据Intent参数中调用getData()你可以获得选择的联系人的URI。为了获得选择的联系人的名字你需要使用URI从返回的游标中创建一个新的查询和提取的参数。
@Overridepublic void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));}}break;}}
‘叁’ android 怎么获取通讯录联系人
Example_03_02的原代码:
package com.yarin.android.Examples_03_02;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.widget.TextView;
public class Activity01 extends Activity{
public void onCreate(Bundle savedInstanceState)
{
TextView tv = new TextView(this);
String string = "";
super.onCreate(savedInstanceState);
//得到ContentResolver对象
ContentResolver cr = getContentResolver();
//取得电话本中开始一项的光标
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
//向下移动一下光标
while(cursor.moveToNext())
{
//取得联系人名字
int nameFieldColumnIndex =cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = cursor.getString(nameFieldColumnIndex);//取得电话号码
int numberFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.NUMBER);//报错,返回值为-1.
String number = cursor.getString(numberFieldColumnIndex);
string += (contact+":"+number+"
");
}
cursor.close();
//设置TextView显示的内容
tv.setText(string);
//显示到屏幕
setContentView(tv);
}
}
参考android官方API资料及网上大牛们的经验,本代码修改如下:
package com.example.helloandroid;import android.app.Activity;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.PhoneLookup;import android.database.Cursor;import android.widget.TextView;import android.content.ContentResolver;
public class Activity01 extends Activity{
public void onCreate(Bundle savedInstanceState)
{
TextView tv = new TextView(this);
String string = "";
super.onCreate(savedInstanceState);
//得到ContentResolver对象
ContentResolver cr = getContentResolver();
//取得电话本中开始一项的光标
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
//向下移动光标
while(cursor.moveToNext())
{
//取得联系人名字
int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = cursor.getString(nameFieldColumnIndex);
//取得电话号码
String ContactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
while(phone.moveToNext())
{
String Number = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); string += (contact + ":" + Number + "
");
}
}
cursor.close();
//设置TextView显示的内容
tv.setText(string);
//显示到屏幕
setContentView(tv);
}
}
‘肆’ android手机通讯录以及通话记录在哪个文件夹
在内部存储卡的的data/com.android.provides.contacts里面。
以三星的s8为例
找到通讯录以及通话记录方法:
1、打开三星的s8手机,在系统界面找到“我的文件”。
‘伍’ 安卓手机应用好多读取联系人信息,通话状态,这些应用真能读到吗
是的,"读取联系人信息" 这个是真能读取联系人数据库,所有字段都可以读到,但是“通话状态”只是读取可以监听什么时候来电话来,什么时候挂断所谓的状态,不是说在监听你的通话内容。
目前很多手机应用都是要读取手机的联系人、信息、通话记录等个人隐私信息,除了少部分社交类应用需要用到部分个人信息外,其实大部分应用完全没有必要读取用户的手机个人信息。
很多应用之所以要读取用户的个人手机信息,主要通过收集、利用或贩卖用户隐私信息,达到非法牟利的目的,不但严重侵犯了用户的个人隐私,而且很容易造成用户的资金损失,所以对于无需使用个人信息,还违规读取个人手机信息的应用尽量不要安装。
相关信息
其实各大互联网公司的APP普遍存在违规获取个人手机信息的问题,并将这些信息用于商业用途,并美其名曰为“大数据”,而“大数据杀熟”,则是通过违规收集个人信息并进行分析做到的,由于这些互联网公司处于垄断地位,用户对于这种企业的应用违规收集信息也是无可奈何。
所以手机个人信息的保护,不但需要相关企业的自律,而且需要构建完整的个人信息法律保护体系。