安卓(android studio)课程设计操作系统通讯录
2022/6/26 23:28:03
本文主要是介绍安卓(android studio)课程设计操作系统通讯录,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Android高级开发及实践
课程设计报告
姓 名: |
学 号: |
专 业: 计算机科学与技术 |
项目名称: 操作系统通讯录 |
指导教师: |
实训日期: |
|
2022年 6月 20日
Android程序开发实训记录单
学号 |
|
姓名 |
|
性别 |
|
||
指导教师 |
|
||||||
项目名称 |
操作系统通讯录 |
||||||
项目描述 |
实现对通讯录添加、查询、删除、更新 |
||||||
项目评语 |
|
||||||
分项成绩 |
平时成绩 |
实践能力 |
设计报告 |
||||
|
|
|
|||||
总成绩 |
|
等级 |
|
目 录
第一章 概述
第二章 需求分析
2.1 项目背景
2.2 项目需求
2.3系统主要实现功能
第三章 相关技术
3.1 Android studio介绍
一、应用程序
二、应用程序框架
三、系统运行库
3.2 关键技术研究
3.3 手机通讯录管理系统分析
(1)技术可行性
(2)经济可行性
(3)需求可行性
第四章 概要设计
4.1 系统体系结构
4.2 用户界面设计
4.2.1添加联系人界面
4.2.2查看联系人界面
4.2.3修改联系人界面
4.2.4删除联系人界面
第五章 页面设计
5.1 系统体系结构
5.2 用户添加联系人界面设计
5.3 用户查看联系人界面设计
5.4.用户修改联系人界面设计
5.5 用户删除联系人界面设计
第六章 详细设计
6.1 添加查看修改删除界面模块
6.2 获取联系人到通讯录模块
6.3 添加联系人布局代码
6.4 查看联系人布局代码
6.5 删除联系人布局代码
6.6 清单文件代码
第七章 结论
第一章 概述
随着科学技术的不断进步与发展,移动便携式设备,如手机,平板电脑等产品越来越普及,其中大部分产品的操作系统采用的Android操作系统,并且自Alphabet收购安卓系统后,安卓的市场份额急剧扩大并且还在进一步增加。得益于安卓份额的急剧扩大,众多开发者投身安卓开发,使得安卓软件的数量得到了一个爆发式增长。在移动设备终端中,手机通讯录作为一项基础服务,其体验至关重要。随着用户需求的不断提高,其体验也变得越来越丰富。该软件的开发基于android studio和sQLite数据库。本项目开发出一个人际界面友好,功能完备的手机通讯录管理系统,方便用户的使用。
第二章 需求分析
2.1 项目背景
当代社会,随着移动通信的不断发展,第三代,第四代,甚至第五代移动通信技术得到快速发展,移动终端也随之得到的越来越快速的普及。现阶段. IOS 和Android移动操作系统几乎完全垄断了移动终端的操作系统的市场份额。同时,因为Android天然开放的特性,其几乎占据了全球超过六成的移动市场份额。
Android作为-款迅猛发展的移动操作系统,其包含操作系统,中间件和一 整套相应的应用。Android 基于Java语言进行开发,其运行在Dalvik虛拟机上。同时,由于Dalvik虛拟机的不断优化,Java 程序的运行效率得到了极大程度的提高。Android 系统的底层技术基于Linux开发而来,并且为了使Android得到更加高效的运行效率,Google 对Linux底层进行了深度的优化。同时,Android对操作系统的调度,内存管理,进程管理机制都提供了优秀的解决方案。
Android是一款的开放的移动操作系统.任何厂家和个人都能得到Android系统的源代码,并且可以按照自己的意愿进行修改。这带来了用户可定制化体验的极大提升。同时,Android对浏览器,图形图像系统,多媒体等都有着极大的兼容性。电信运营商也可以设计出符合自身电信网络特点的Android终端产品。这些特性,又进一步的提高了安卓产品的市场占有率。
2.2 项目需求
随着科技的发展,手机等移动终端的普及速度不断加快,同时,随着手机的功能的不断发展,手机已经不是简单的一款移动设备, 其更多的成为了人与互联网进行联系的载体。为了满足人们对于手机的不断提高的要求,手机上的软件也开始变得越来越功能强大。同时,由于Alphabet的不断制定的规范,Android 的软件生态也变得越来越丰富。作为手机上一款必不可少的软件,手机通讯录正变得越来越重要,用户几乎离不开它,并且,根据调查显示,用户几乎每天都会与手机通讯录打交道。根据最新的一项调查显示, 平均每个用户每天使用通讯录的次数达到了七八次,随着时代的不断发展,手机通讯录由最开始的打电话,发短信的功能,开始不断衍生出越来越丰富的其余功能。现在,手机通讯录已经不仅仅简单的是-一个软件,其已经发展为集合了个人多重信息的一个功能载体,并不断朝着个人名片的方向不断发展.正是由于手机通讯录不断增强的个性化功能,其也受到了了越来越多的人的喜爱。
2.3 系统主要实现功能
通过学习Android和Java开发,在熟悉安卓开发流程的基础上,设计出一款符合要求的手机通讯录软件。这款手机通讯录实现目的功能有: 1.用户友好的界面,实现手机通讯录的基本功能,如增加,删除,查找,修改联系人。2、实现用户对短信息的相关操作。3、为满足越来越多的对安全性的需求,设计了相应的通讯录备份模块。
通讯录模块可以用下图来进行一个说明:
如图2-1所示:
图2-1 通讯录视图分布
整个程序基于Android技术开发,首页面为通讯录页面。在首页中可以进行添加、查询、修改、删除联系人。当点击“添加联系人”的时候,你可以输入想要添加的联系人的姓名和电话号码。添加完成之后就会发现主页面上有你添加的联系人。当你点击已经添加的联系人,可以进行修改。如果你想删除联系人,你会看到一个删除的按钮,进行删除联系人。我们绘制了一个管理员操作流程图
以便更好地传达我们的意思,提高使用体验。
如图2-2所示:
图2-2 通讯录流程图
第三章 相关技术
3.1 Android studio介绍
A2017年6月,英创公司在ESM6802+10.1”LCD的硬件平台上成功运行Android 7.1.1原生操作系统。2017年8月,ESM6802 Android 版可以支持GPIO、串口、以太网、U盘。后续将进一步完善对CAN、SPI、I2C、WIFI、4G等接口的支持。
Google公司专门为开发Android应用程序提供了集成开发环境Android Studio,涵盖了所有Android应用开发相关的功能。Android应用程序主要使用Java语言编写,要用到开发工具集SDK(Software Development Kit,提供java编译工具、Android系统API等,可以直接在Android Studio中下载)。当应用程序中要直接访问硬件,或者需要提高运行效率时,需要将访问硬件、复杂逻辑部分使用C/C++实现。要在Android Studio中开发编译C/C++代码,需要用到工具集NDK(Native Development Kit,提供C/C++编译工具、API、打包工具等,可直接在Android Studio中下载)。使用NDK可以将C/C++源码编译成动态链接库,供Java调用。由于Java语言要调用C/C++函数需要用到JNI(Java Native Interface)技术,这就要求使用NDK开发C/C++时,C/C++源码要符合JNI规范要求。
一、应用程序
Android 会同一系列核心应用程序包一起发布,该应用程序包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。
二、应用程序框架
开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统, 其中包括:
(1)丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。
(2)内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
(3)资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。
(4)通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
(5)活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
三、系统运行库
开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。隐藏在每个应用后面的是一系列的服务和系统, 其中包括;
(1)丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。
(2)内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的 数据
(3)资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。
(4)通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
(5)活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
3.2 关键技术研究
在安卓系统中,包含有四个基本组件,其中组件 Activity,Content Provider是可见的,而组件 Service 和 BroadcastReceiver 是不可见的,只会默默的在后台运行。
(1)Service
通过字面意思我们就可以知道 Service 是一种后代的服务程序,在通常情况下他是不会与用户有联系的,所以我们不需要对其设计一个可视化界面,只要它能够实现功能就可以了,他的任务是对可见的 Activity 以及一些数据源进行更新。而且它必须在 Android Manifest.xml 配置文件注册,只有这样才能实现其功能,为了实现这个,我们可以通过 startService()来实现启动一个 Service 的目的。
(2)Activity
在安卓系统中,程序的显示是依靠 Activity 实现的,需要通过 Views 来构建 UI 来达到显示信息的目的。我们经常把他做成一个用户的可视化界面。在安卓系统中的软件程序在一般情况下不是通过仅仅一个 Activity 组成的,而是需要多个才行。比如一个应用程序需要一个 Activity 来进行显示联系人,需要另外一个来编写信息,还需要一个来查看信息以及对应用程序进行修改。虽然一个程序应用了多个 Activity,但是每一个都是相对独立的。虽然单独每一个是独立的但是多个就可以组成了栈,我们将现在活跃的放在栈顶。对于安卓系统来说每一个 Activity 的生命周期受到系统的制约。
(3)Broadcast Receiver
与 Service 类似,我们通过字面意思就知道 Broadcast Receiver 的作用为广播接收器,相比较处理组件级别系统响应的事件处理机制,Broadcast Receiver的处理对象为系统级别的,尤其是在通过 Intent 来启动一个程序组件的时候,我们可以通过广播事件处理机制来监听和响应。它是对事件驱动程序进行处理的理想方式。
(4)Content Provider
当我们需要进行数据的保存以及检索的时候,Content Provider 就可以发挥它的作用了,通过它我们可以实现程序间的数据互访,如果我们的权限足够高的话,我们可以比较方便的通过 Content Provider 访问很多数据,与此同时为了实现共享数据,我们也可以自己来定义Content Provider,这样也能实现访问功能。
3.3 手机通讯录管理系统分析
(1)技术可行性
Android是一种基于Linux底层开放式移动操作系统,由谷歌公司在2005年收购获得,为推广安卓操作系统,谷歌公司联合电信运行商,手机终端厂商,芯片厂商,组成了开放手机联盟,其中,谷歌公司处于主导地位。联盟内的成员可以免费获得安卓的源代码,并且根据自己的需要进行修改,满足个性化的需求。同时,安卓的开发语言是Java, 全世界内存在数量巨大的Java开发人员。谷歌为了提高安卓的活跃度,提供了完整的安卓开发文档,程序员只要遵循谷歌的官方文档可以很方便快捷的开发出自己的安卓应用。
(2)经济可行性
由于互联网的免费性,本软件的开发资料可以通过互联网免费获得。为了解用户的基本的软件需求,可以通过发放问卷调查的形式进行需求分析。软件开发完成后的测试工作可以通过一台安卓设备或者Androidstudio开发环境中的安卓虚拟机完成。因此,该毕业设计的开发经济需求低廉,具有充分的经济可行性。
(3)需求可行性
Android现在在全世界移动设备的市场份额处于垄断地位,同时,手机通讯录作为最基础,也是最必不可少的软件,起品质对用户体验存在至关重要的作用。
第四章 概要设计
4.1 系统体系结构
整个系统由四大界面组成,主要分为添加联系人、查看联系人、修改联系人、删除联系人四大页面。
4.2 用户界面设计
4.2.1添加联系人界面
添加你想要记录的联系人,输入名字和电话号码,之后保存。
如图4.2.1所示流程图:
图4.2.1 用户添加联系人流程图
4.2.2查看联系人界面
添加完成之后,在主页面查看你已经添加成功的页面。
如图4.2.2所示流程图:
图4.2.2 用户添加联系人流程图
4.2.3修改联系人界面
通讯录添加之后,后期如果联系人联系方式更改,就得需要更改联系方式,点击联系人就可以进行更改。
如图4.2.3所示流程图:
图4.2.3 用户修改联系人流程图
4.2.4删除联系人界面
联系人不再联系或者有了别的联系方式,就会想到删除之前的联系方式,可以点击删除。
如图4.2.4所示流程图:
图4.2.24用户删除联系人流程图
第五章 页面设计
5.1 系统体系结构
整个系统由添加、查看、修改、删除页面构成。详细方式应用如下。
如图5-1-1所示
图5-1-1 通讯录框架结构
5.2 用户添加联系人界面设计
用户打开app后,点击“添加联系人”,跳转到新的页面,输入联系人的名字、联系人的联系方式,如图5-2-1所示。
图5-2-1添加联系人设计
5.3 用户查看联系人界面设计
查看通讯录已经添加之后的联系人,如图5-3-1所示。
图5-3-1查看联系人设计
5.4.用户修改联系人界面设计
用户修改已经添加完成的页面,修改时的设计如图5-4-1所示,修改后的页面如图5-4-2所示。
图5-4-1修改联系人时设计 图5-4-2修改联系人后设计
5.5 用户删除联系人界面设计
用户不想要的联系人进行删除操作,删除时的页面如图5-4-1所示,删除后的页面5-5-2所示。
图5-5-1删除联系人时设计 图5-5-2删除联系人后设计
第六章 详细设计
6.1 添加查看修改删除界面模块
MainActivity代码如下:
import androidx.annotation.NonNull;
public class MainActivity extends AppCompatActivity {
private ListView listView = null;
private ContactListAdapter adapter = null;
private List<Contact> contacts = new ArrayList<Contact>();
private Contact tempcontact = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_CONTACTS},1);
} else {
}
listView = findViewById(R.id.act_main_listview);
adapter = new ContactListAdapter(this,contacts);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
final Contact contact = contacts.get(i);
showDialog(contact);
}
});
Button addBtn = findViewById(R.id.act_main_add_btn);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDialog(null);
}
});
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
//ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CALENDAR},1);
showContactList();
} else {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},1);
}
}
private void showContactList(){
List<Contact> contactsTemp = ContactHelper.getContacts(this);
contacts.removeAll(contacts);
contacts.addAll(contactsTemp);
adapter.notifyDataSetChanged();
}
private void showDialog(final Contact contact){
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_contact_info_layout,null);
final EditText nameEt = view.findViewById(R.id.dialog_contact_name_et);
final EditText phoneEt = view.findViewById(R.id.dialog_contact_phone_et);
if (contact != null){
nameEt.setText(contact.getName());
phoneEt.setText(contact.getPhone());
}
new AlertDialog.Builder(MainActivity.this).setView(view)
.setCancelable(false).setNegativeButton("取消",null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String name = nameEt.getText().toString();
String phone = phoneEt.getText().toString();
if(contact == null){
Contact ctt = new Contact();
ctt.setName(name);
ctt.setPhone(phone);
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
addContact(ctt);
} else {
tempcontact = ctt;
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_CONTACTS},2);
}
}else {
contact.setName(name);
contact.setPhone(phone);
updateContact(contact);
}
}
}).show();
}
protected void addContact(Contact contact){
ContactHelper.addContact(MainActivity.this,contact);
showContactList();
}
protected void updateContact(Contact contact){
ContactHelper.updateContact(MainActivity.this,contact);
showContactList();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
switch (requestCode){
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
showContactList();
} else {
Toast.makeText(this, "获取联系人权限失败", Toast.LENGTH_SHORT).show();
}
break;
case 2:
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
addContact(tempcontact);
}else {
Toast.makeText(this, "写入联系人权限失败", Toast.LENGTH_SHORT).show();
}
}
// if(requestCode == 1){
// if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
// showContactList();
// }else {
// Toast.makeText(MainActivity.this,"权限已经被拒绝",Toast.LENGTH_SHORT).show();
// }
// return;
// }
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
}
6.2 获取联系人到通讯录模块
ContactHelper .java代码如下:
private void init() {
import com.example.contactmanager.R;
import com.example.contact.adapter.ContactListAdapter;
import com.example.contact.entity.Contact;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ListView listView = null;
private ContactListAdapter adapter = null;
private List<Contact> contacts = new ArrayList<Contact>();
private Contact tempcontact = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_CONTACTS},1);
} else {
}
listView = findViewById(R.id.act_main_listview);
adapter = new ContactListAdapter(this,contacts);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
final Contact contact = contacts.get(i);
showDialog(contact);
}
});
Button addBtn = findViewById(R.id.act_main_add_btn);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showDialog(null);
}
});
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
//ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CALENDAR},1);
showContactList();
} else {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},1);
}
}
private void showContactList(){
List<Contact> contactsTemp = ContactHelper.getContacts(this);
contacts.removeAll(contacts);
contacts.addAll(contactsTemp);
adapter.notifyDataSetChanged();
}
private void showDialog(final Contact contact){
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.dialog_contact_info_layout,null);
final EditText nameEt = view.findViewById(R.id.dialog_contact_name_et);
final EditText phoneEt = view.findViewById(R.id.dialog_contact_phone_et);
if (contact != null){
nameEt.setText(contact.getName());
phoneEt.setText(contact.getPhone());
}
new AlertDialog.Builder(MainActivity.this).setView(view)
.setCancelable(false).setNegativeButton("取消",null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
String name = nameEt.getText().toString();
String phone = phoneEt.getText().toString();
if(contact == null){
Contact ctt = new Contact();
ctt.setName(name);
ctt.setPhone(phone);
if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_CONTACTS) == PackageManager.PERMISSION_GRANTED) {
addContact(ctt);
} else {
tempcontact = ctt;
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_CONTACTS},2);
}
}else {
contact.setName(name);
contact.setPhone(phone);
updateContact(contact);
}
}
}).show();
}
protected void addContact(Contact contact){
ContactHelper.addContact(MainActivity.this,contact);
showContactList();
}
protected void updateContact(Contact contact){
ContactHelper.updateContact(MainActivity.this,contact);
showContactList();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults){
switch (requestCode){
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
showContactList();
} else {
Toast.makeText(this, "获取联系人权限失败", Toast.LENGTH_SHORT).show();
}
break;
case 2:
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
addContact(tempcontact);
}else {
Toast.makeText(this, "写入联系人权限失败", Toast.LENGTH_SHORT).show();
}
}
// if(requestCode == 1){
// if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
// showContactList();
// }else {
// Toast.makeText(MainActivity.this,"权限已经被拒绝",Toast.LENGTH_SHORT).show();
// }
// return;
// }
super.onRequestPermissionsResult(requestCode,permissions,grantResults);
}
}
6.3 添加联系人布局代码
contact_info_layout代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:background="@drawable/bg2"
android:padding="10dp">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="联 系 人"/>
<EditText
android:id="@+id/dialog_contact_name_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="联系方式"/>
<EditText
android:id="@+id/dialog_contact_phone_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:inputType="phone"/>
</LinearLayout>
</LinearLayout>
6.4 查看联系人布局代码
activity_main代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg3"
tools:context="com.example.contact.MainActivity">
<ListView
android:id="@+id/act_main_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/act_main_add.btn">
</ListView>
<Button
android:id="@+id/act_main_add.btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@android:color/holo_green_light"
android:textColor="#ffffff"
android:text="添加联系人"
android:textSize="20dp" />
</RelativeLayout>
6.5 删除联系人布局代码
item_main_list代码如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal"
android:padding="10dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_main_list_name_tv"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_main_list_phome_tv"
android:layout_marginTop="5dp"/>
</LinearLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/item_main_list_del_btn"
android:layout_alignParentRight="true"
android:textColor="#ffffff"
android:text="删除"/>
</RelativeLayout>
}ublic class MD5Utils {
6.6 清单文件代码
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.contactmanager">
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<application
android:allowBackup="true"
android:icon="@drawable/app"
android:label="通讯录"
android:roundIcon="@drawable/app"
android:supportsRtl="true"
android:theme="@style/Theme.contactmanager">
<activity
android:name="com.example.contact.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
第七章 结论
在开发系统的过程中,学习Android 的困难比想象的要大很多,为了在较短的时间掌握Android的开发,并且在限定的时间内完成本手机通讯录程序的开发,需要投入大量的精力去学习。在软件开发过程中,我从书店,图书馆,互联网上查询借阅了大量的相关数据和资料,通过书本上的案例,不断进行学习,力求在最短的时间掌握安卓开发的相关知识。
本软件也即研究开发一款手机通讯录软件。在开发Android平台通讯录的过程中,我投入了大量精力去开发和解决出现的各种问题。在开发过程中,由于个人能力的所限以及知识水平的局限性,开发过程中我碰到了很多问题,而且程序开发的过程和结果也不是非常完美。为了解决这些问题,我通过咨询同学或者通过互联网查找相关资料,学习解决问题的相关方式。这次毕业设计的课题对我而言是一个巨大的挑战, 以前未系统研究过安卓的我,经过不断的学习努力,解决了软件开发过程中的各种问题,最终完成了软件的开发,完成了软件开发。通过这次综合的软件开发的过程,使我学习到了很多,对我以后的学习生活有着积极的促进作用。
这篇关于安卓(android studio)课程设计操作系统通讯录的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法