安卓通讯录实训报告
Android开发实验---通讯录
实验报告通讯录姓名:学号:课程名称:移动应用开发所在学院:信息科学与工程学院专业班级:计算机任课教师:主要功能分析:1、增加、删除、编联系人点击通信录界面中的增加按钮,入增加联系人面。
输入联系人的基本信息,并可根据用户需求增加个性化信息如头像、姓名、手机号码、办室电话、家庭电话、职务职称、单位名称、地址、邮政编码、Email、其他联系方式、备注这些信息,击确认返回主界面。
点击通信录中一个已存在的联系人,进入联系人编辑界面,可修改系人的资料或进行删除联系人操作,完成后退回到主界面。
对列表中联系人的标记,点mnu键弹出功能界面上的删除按键也可进行删除。
还可以在菜单上选择删除全部联系人清空通讯录。
在删除联系人的过程中,系统将提示用户是否继续操作,若放弃操作,则系人信息将继续保存。
2、查找联系人用户点击menu键打开底部菜单框,底部菜单框为查询系人提供入口,进入通讯录的缺省页面为联系人列表,在列表中看到所有联系人的姓名、电话息排列,用户点击查找按键输入联系人基本信息,,通讯录显所有符合查询条件的联系人列表,用户选择一个联系人进入联系人基本信息页面进行其他操作;查询完成,用户按返回键返回主界面。
3、通功能用户在通录选择联系人进入联系详细信息界面,这时点击menu键打开通信功能框,选择打电话、发信息的功能进行操作。
4、菜单能通过对menu按的点击,显示底部菜框,包含有增加查找、除、菜单、返回功能,菜单按键则包含显示所有、删除所有等实用功能。
增加联系人:这个功能由ContactAdder类完成,具体实现不是比较麻烦,保存动作由ContentResolver类解决,但实现方式有所不同,可分为一次性批量增加与挨个增加。
由于界面设置繁琐,代码页过多,所以挑出其中的一部分进行说明首先是DB数据库建库过程:package com.xample.hivian.my_contact_manager.models.db;import android.content.ContentValues;import android.database.Cursor;import android.database.sqlite.SQLiteOpenHelper;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import com.example.hivian.my_contact_manager.models.Contact;import com.example.hivian.my_contact_manager.models.Sms;import java.util.ArrayList;import java.util.List;public class DBHandler extends SQLiteOpenHelper {// Database Versionprivate static final int DB_VERSION = 1;// Database Nameprivate static final String DB_NAME = "DB";// Contacts table nameprivate static final String CONTACTS_TABLE = "contacts";//通讯录private static final String SMS_TABLE = "sms";// Shops Table Columns names private static final String KEY_ID = "id";private static final String KEY_IMAGE = "image";//图片private static final String KEY_NAME = "name";//姓名private static final String KEY_PHONE = "phone";//电话号码private static final String KEY_EMAIL = "email";//邮箱private static final String KEY_ADDRESS = "address";//联系人地址private static final String KEY_SMS_HEADER = "sms_header";private static final String KEY_SMS_CONTENT = "sms_content";private static final String KEY_CONTACT_ID = "contact_id";private static final String KEY_SMS_TYPE = "sms_type";private static final String CONTACTS_TABLE_CREATE ="CREATE TABLE " + CONTACTS_TABLE + " (" + KEY_ID + " INTEGER PRIMARY KEY, " + KEY_IMAGE + " BLOB, " + KEY_NAME + " TEXT, " + KEY_PHONE + " TEXT, " +KEY_EMAIL + " TEXT, " + KEY_ADDRESS + " TEXT)";private static final String SMS_TABLE_CREATE ="CREATE TABLE " + SMS_TABLE + " (" + KEY_ID + " INTEGER PRIMARY KEY, " +KEY_SMS_HEADER + " TEXT, " + KEY_SMS_CONTENT + " TEXT, " +KEY_CONTACT_ID + " INTEGER," + KEY_SMS_TYPE + " INTEGER)";private static DBHandler dbInstance= null;public static DBHandlergetInstance(Context context) {if (dbInstance== null) {dbInstance= new DBHandler(context, DB_NAME, DB_VERSION);}return dbInstance;}DBHandler(Context context, String dbName, int dbVersion) {super(context, dbName, null, dbVersion);}@Overridepublic void onCreate(SQLiteDatabasedb) {db.execSQL(CONTACTS_TABLE_CREATE);db.execSQL(SMS_TABLE_CREATE);}@Overridepublic void onUpgrade(SQLiteDatabasedb, int oldVersion, int newVersion) {// Drop older table if existeddb.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE);db.execSQL("DROP TABLE IF EXISTS " + SMS_TABLE);// 重新创建表onCreate(db);}//新增联系人public void addContact(Contact contact) {SQLiteDatabasedb = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(KEY_IMAGE, contact.getImage());values.put(KEY_NAME, contact.getName());values.put(KEY_PHONE, contact.getPhone());values.put(KEY_EMAIL, contact.getEmail());values.put(KEY_ADDRESS, contact.getAddress());db.insert(CONTACTS_TABLE, null, values);}// Adding new smspublic void addSms(Smssms) {SQLiteDatabasedb = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(KEY_SMS_HEADER, sms.getHeader());values.put(KEY_SMS_CONTENT, sms.getContent());values.put(KEY_CONTACT_ID, sms.getContactId());values.put(KEY_SMS_TYPE, sms.getType());db.insert(SMS_TABLE, null, values);}// Getting one contactpublic Contact getContact(int id) {SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.query(CONTACTS_TABLE, new String[]{ KEY_ID, KEY_IMAGE, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS }, KEY_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);if (cursor != null)cursor.moveToFirst();Contact contact = new Contact(cursor.getBlob(1), cursor.getString(2), cursor.getString(3), cursor.getString(4), cursor.getString(5));contact.setId(cursor.getInt(0));cursor.close();return contact;}// Getting one contact by namepublic Contact getContactByName(String name) {SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.query(CONTACTS_TABLE, new String[]{ KEY_ID, KEY_IMAGE, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS }, KEY_NAME + "=?", new String[] { name }, null, null, null, null);if (cursor != null)cursor.moveToFirst();Contact contact = new Contact(cursor.getBlob(1), cursor.getString(2),cursor.getString(3), cursor.getString(4), cursor.getString(5));contact.setId(cursor.getInt(0));cursor.close();return contact;}// Getting one contact by phonepublic Contact getContactByPhone(String phone) {SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.query(CONTACTS_TABLE, new String[]{ KEY_ID, KEY_IMAGE, KEY_NAME, KEY_PHONE, KEY_EMAIL, KEY_ADDRESS }, KEY_PHONE + "=?", new String[] { phone }, null, null, null, null);if (!cursor.moveToFirst())return null;Contact contact = new Contact(cursor.getBlob(1), cursor.getString(2),cursor.getString(3), cursor.getString(4), cursor.getString(5));contact.setId(cursor.getInt(0));cursor.close();return contact;}// Getting one sms by contact idpublic List<Sms>getSmsByContactId(Integer id) {SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.query(SMS_TABLE, new String[]{ KEY_ID, KEY_SMS_HEADER, KEY_SMS_CONTENT, KEY_CONTACT_ID,KEY_SMS_TYPE },KEY_CONTACT_ID + "=?", new String[] { String.valueOf(id) }, null, null, null, null);List<Sms>allSms = new ArrayList<>();if (cursor.moveToFirst()) {do {Smssms = new Sms();sms.setId(Integer.parseInt(cursor.getString(0)));sms.setHeader(cursor.getString(1));sms.setContent(cursor.getString(2));sms.setContactId(cursor.getInt(3));sms.setType(cursor.getInt(4));allSms.add(sms);} while (cursor.moveToNext());}cursor.close();return allSms;}// Getting all contactspublic List<Contact>getAllContacts() {String selectQuery = "SELECT * FROM " + CONTACTS_TABLE; SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.rawQuery(selectQuery, null);List<Contact>allContacts = new ArrayList<>();if (cursor.moveToFirst()) {do {Contact contact = new Contact();contact.setId(Integer.parseInt(cursor.getString(0)));contact.setImage(cursor.getBlob(1));contact.setName(cursor.getString(2));contact.setPhone(cursor.getString(3));contact.setEmail(cursor.getString(4));contact.setAddress(cursor.getString(5));allContacts.add(contact);} while (cursor.moveToNext());}cursor.close();return allContacts;}// Getting all smspublic List<Sms>getAllSms() {String selectQuery = "SELECT * FROM " + SMS_TABLE; SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.rawQuery(selectQuery, null);List<Sms>allSms = new ArrayList<>();if (cursor.moveToFirst()) {do {Smssms = new Sms();sms.setId(Integer.parseInt(cursor.getString(0)));sms.setHeader(cursor.getString(1));sms.setContent(cursor.getString(2));sms.setContactId(cursor.getInt(3));sms.setType(cursor.getInt(4));allSms.add(sms);} while (cursor.moveToNext());}cursor.close();return allSms;}// Getting all sms from contactpublic List<Sms>getAllSmsFromContact(int id) {String selectQuery = "SELECT * FROM " + SMS_TABLE + " WHERE " + KEY_CONTACT_ID + " = " + id;SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.rawQuery(selectQuery, null);List<Sms>allSms = new ArrayList<>();if (cursor.moveToFirst()) {do {Smssms = new Sms();sms.setId(Integer.parseInt(cursor.getString(0)));sms.setHeader(cursor.getString(1));sms.setContent(cursor.getString(2));sms.setContactId(cursor.getInt(3));sms.setType(cursor.getInt(4));allSms.add(sms);} while (cursor.moveToNext());}cursor.close();return allSms;}// Getting contacts countpublic Integer getContactsCount() {String countQuery = "SELECT * FROM " + CONTACTS_TABLE; SQLiteDatabasedb = this.getReadableDatabase();Cursor cursor = db.rawQuery(countQuery, null);return cursor.getCount();}// Checking duplicates in tablepublic boolean isDuplicate(DBHandlerdb, String name) {List<Contact> contacts = db.getAllContacts();for (Contact cont : contacts) {if (cont.getName().equals(name))return true;}return false;}// Updating a contactpublic Integer updateContact(Contact contact) {SQLiteDatabasedb = this.getWritableDatabase();ContentValues values = new ContentValues();values.put(KEY_IMAGE, contact.getImage());values.put(KEY_NAME, contact.getName());values.put(KEY_PHONE, contact.getPhone());values.put(KEY_EMAIL, contact.getEmail());values.put(KEY_ADDRESS, contact.getAddress());return db.update(CONTACTS_TABLE, values, KEY_ID + " = ?", new String[]{String.valueOf(contact.getId())});}// Updating a smspublic Integer updateSms(Smssms) {SQLiteDatabasedb = this.getWritableDatabase(); ContentValues values = new ContentValues();values.put(KEY_SMS_HEADER, sms.getHeader());values.put(KEY_SMS_CONTENT, sms.getContent());values.put(KEY_CONTACT_ID, sms.getContactId());values.put(KEY_SMS_TYPE, sms.getType());return db.update(SMS_TABLE, values, KEY_ID + " = ?",new String[]{String.valueOf(sms.getId())});}// Deleting a contactpublic void deleteContact(Contact contact) { SQLiteDatabasedb = this.getWritableDatabase();db.delete(CONTACTS_TABLE, KEY_ID + " = ?",new String[] { String.valueOf(contact.getId()) });}// Deleting a contactpublic void deleteSms(Smssms) {SQLiteDatabasedb = this.getWritableDatabase();db.delete(SMS_TABLE, KEY_ID + " = ?",new String[] { String.valueOf(sms.getId()) });}// Deleting all contactspublic void deleteAllContacts(DBHandlerdb) {List<Contact> contacts = db.getAllContacts();for (Contact cont : contacts) {db.deleteContact(cont);}}// Deleting all smspublic void deleteAllSms(DBHandlerdb) {List<Sms>allSms = db.getAllSms();for (Smssms : allSms) {db.deleteSms(sms);}}}界面切换:package com.example.hivian.my_contact_manager.views.activities;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.WindowManager;import com.example.hivian.my_contact_manager.R;import java.util.Timer;import java.util.TimerTask;public class SplashActivity extends Activity {private static final long DELAY = 1000;private boolean scheduled = false;private Timer splashTimer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_splash);this.getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN);splashTimer= new Timer();splashTimer.schedule(new TimerTask(){@Overridepublic void run(){Intent intent = new Intent(SplashActivity.this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);startActivity(intent);overridePendingTransition(0, 0);SplashActivity.this.finish();}}, DELAY);scheduled = true;}@Overrideprotected void onDestroy() {super.onDestroy();if (scheduled) {splashTimer.cancel();}splashTimer.purge();}}按钮设计:package com.example.hivian.my_contact_manager.views.fragments; import android.Manifest;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.graphics.Color;import android.graphics.Typeface;import .Uri;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.content.ContextCompat;import android.support.v4.content.res.ResourcesCompat;import android.support.v7.app.ActionBar;import android.support.v7.app.AppCompatActivity;import android.util.TypedValue;import youtInflater;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.ScrollView;import android.widget.TextView;import android.widget.Toast;import android.support.v4.app.Fragment;import com.example.hivian.my_contact_manager.R;import com.example.hivian.my_contact_manager.models.Contact;import com.example.hivian.my_contact_manager.models.Sms;import com.example.hivian.my_contact_manager.models.db.DBHandler;import com.example.hivian.my_contact_manager.utilities.BitmapUtility;import com.example.hivian.my_contact_manager.views.activities.ContactEditionActivity; import com.example.hivian.my_contact_manager.views.activities.ContactSmsActivity;import com.example.hivian.my_contact_manager.views.activities.MainActivity;import com.oguzdev.circularfloatingactionmenu.library.FloatingActionMenu;import com.oguzdev.circularfloatingactionmenu.library.SubActionButton;import java.util.List;public class ContactInfoFragment extends Fragment implements View.OnClickListener, View.OnTouchListener {private TextView name;private TextView phone;public FloatingActionMenu actionMenu;private DBHandler db;@Nullable@Overridepublic View onCreateView(LayoutInflaterinflater, @Nullable ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate(yout.fragment_contact_info, container, false);setHasOptionsMenu(true);ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();if (ab != null) {ab.setTitle("Options");ab.setDisplayHomeAsUpEnabled(true);}db= DBHandler.getInstance(getActivity());Contact receivedContact = (Contact) getArguments().getSerializable("contact");if (receivedContact != null) {ImageViewimageView = (ImageView) view.findViewById(_image);name = (TextView) view.findViewById(_name);phone = (TextView) view.findViewById(_phone);TextView email = (TextView) view.findViewById(_email);TextView address = (TextView) view.findViewById(_address);if (receivedContact.getImage() != null) {Bitmap imageBm = BitmapUtility.getImage(receivedContact.getImage());imageView.setImageBitmap(imageBm);}name.setText(receivedContact.getName());phone.setText(receivedContact.getPhone());if (receivedContact.getEmail().equals("")) {email.setTypeface(null, Typeface.ITALIC);email.setTextColor(Color.GRAY);email.setTextSize(PLEX_UNIT_DIP, 18f);email.setText(R.string.placeholder_none);}elseemail.setText(receivedContact.getEmail());if (receivedContact.getAddress().equals("")) {address.setTypeface(null, Typeface.ITALIC);address.setTextColor(Color.GRAY);address.setTextSize(PLEX_UNIT_DIP, 18f);address.setText(R.string.placeholder_none);}elseaddress.setText(receivedContact.getAddress());}return view;}@Overridepublic void onViewCreated(View view, @Nullable Bundle savedInstanceState) { initInfoMenu(view);ScrollViewscrollView = (ScrollView) view.findViewById(R.id.scrollview_contact_info); scrollView.setOnTouchListener(this);super.onViewCreated(view, savedInstanceState);}@Overridepublic boolean onTouch(View v, MotionEvent event) {actionMenu.close(true);return false;}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.itemId1:toSmsManager();break;case R.id.itemId2:callContact();break;case R.id.itemId3:editContact();break;case R.id.itemId4:deleteContact();break;}actionMenu.close(true);}@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflaterinflater) {inflater.inflate(R.menu.menu_main, menu);super.onCreateOptionsMenu(menu,inflater);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case android.R.id.home:actionMenu.close(true);getFragmentManager().popBackStack();return true;default:return super.onOptionsItemSelected(item);}}private void initInfoMenu(View view) {ImageView menuIcon1 = new ImageView(getActivity());ImageView menuIcon2 = new ImageView(getActivity());ImageView menuIcon3 = new ImageView(getActivity());ImageView menuIcon4 = new ImageView(getActivity());menuIcon1.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_message_black_24dp, null));menuIcon2.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_call_black_24dp, null));menuIcon3.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_mode_edit_black_24dp, null));menuIcon4.setImageDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.ic_delete_black_24dp, null));menuIcon1.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.circle_opacity, null));menuIcon2.setBackground(ResourcesCompat.getDrawable(getResources(), R.drawable.circle_opacity, null));menuIcon3.setBackground(ResourcesCompat.getDrawable(getResources(),R.drawable.circle_opacity, null));menuIcon4.setBackground(ResourcesCompat.getDrawable(getResources(),R.drawable.circle_opacity, null));menuIcon1.setColorFilter(ContextCompat.getColor(getActivity(), android.R.color.white));menuIcon2.setColorFilter(ContextCompat.getColor(getActivity(), android.R.color.white));menuIcon3.setColorFilter(ContextCompat.getColor(getActivity(), android.R.color.white));menuIcon4.setColorFilter(ContextCompat.getColor(getActivity(), android.R.color.white));menuIcon1.setPadding(15,15,15,15);menuIcon2.setPadding(15,15,15,15);menuIcon3.setPadding(15,15,15,15); //设置的是各个控件之间的距离menuIcon4.setPadding(15,15,15,15);SubActionButton.BuilderitemBuilder = new SubActionButton.Builder(getActivity()); itemBuilder.setLayoutParams(new youtParams(160,160));ImageViewmenuInfo = (ImageView) view.findViewById(_menu);actionMenu= new FloatingActionMenu.Builder(getActivity()).addSubActionView(itemBuilder.setContentView(menuIcon1).build()) .addSubActionView(itemBuilder.setContentView(menuIcon2).build()) .addSubActionView(itemBuilder.setContentView(menuIcon3).build()) .addSubActionView(itemBuilder.setContentView(menuIcon4).build()) .attachTo(menuInfo).setStartAngle(100).setEndAngle(260).build();menuIcon1.setId(R.id.itemId1);menuIcon1.setOnClickListener(this);menuIcon2.setId(R.id.itemId2);menuIcon2.setOnClickListener(this);menuIcon3.setId(R.id.itemId3);menuIcon3.setOnClickListener(this);menuIcon4.setId(R.id.itemId4);menuIcon4.setOnClickListener(this);}private void toSmsManager() {name = (TextView) getActivity().findViewById(_name);phone = (TextView) getActivity().findViewById(_phone);Intent intent = new Intent(getActivity(), ContactSmsActivity.class);intent.putExtra("name", name.getText().toString());intent.putExtra("phone", phone.getText().toString());startActivity(intent);}private void callContact() {phone = (TextView) getActivity().findViewById(_phone);Intent callIntent = new Intent(Intent.ACTION_CALL);callIntent.setData(Uri.parse("tel:" + phone.getText().toString()));if (ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity(callIntent);} else {Toast toast = Toast.makeText(getActivity(), R.string.alert_no_call_perm, Toast.LENGTH_LONG);toast.show();}}private void editContact() {name = (TextView) getActivity().findViewById(_name);Contact contact = db.getContactByName(name.getText().toString());Intent intent = new Intent(getActivity(), ContactEditionActivity.class);intent.putExtra("contact", contact);startActivity(intent);}private void deleteContact() {AlertDialog dialog = new AlertDialog.Builder(getActivity()).setMessage(getResources().getString(R.string.alert_delete_message)).setCancelable(false).setPositiveButton(getResources().getString(R.string.alert_delete_ok),new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {TextViewtextView = (TextView) getActivity().findViewById(_name);Contact contact =db.getContactByName(textView.getText().toString());db.deleteContact(contact);List<Sms>allSms = db.getAllSmsFromContact(contact.getId());for (Smssms : allSms) {db.deleteSms(sms);}Intent intent = new Intent(getActivity(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);startActivity(intent);}}).setNegativeButton(getResources().getString(R.string.alert_delete_cancel), null).show();Button buttonPositive = dialog.getButton(DialogInterface.BUTTON_POSITIVE);Button buttonNegative = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);buttonPositive.setTextColor(ContextCompat.getColor(getActivity(),R.color.colorPrimary));buttonNegative.setTextColor(ContextCompat.getColor(getActivity(),R.color.colorPrimary));}}Main程序:package com.example.hivian.my_contact_manager.views.activities;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import com.example.hivian.my_contact_manager.R;import com.example.hivian.my_contact_manager.models.Contact;import com.example.hivian.my_contact_manager.utilities.Utility;import com.example.hivian.my_contact_manager.views.fragments.ContactInfoFragment;import com.example.hivian.my_contact_manager.views.fragments.ContactListFragment;public class MainActivity extends AppCompatActivity implementsContactListFragment.DataPassListener {private ContactListFragment fragmentA;private ContactInfoFragment fragmentB;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main_activity);if (findViewById(R.id.fragment_holder) != null) {Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);if (savedInstanceState != null) {fragmentA= new ContactListFragment();fragmentB= new ContactInfoFragment();return;}fragmentA= new ContactListFragment();fragmentB= new ContactInfoFragment();getSupportFragmentManager().beginTransaction().add(R.id.fragment_holder, fragmentA).commit();Utility.changeStatusBarColor(this);}}@Overridepublic void onBackPressed() {int count = getSupportFragmentManager().getBackStackEntryCount();if (count == 0) {super.onBackPressed();} else {if (fragmentB.actionMenu!= null) {fragmentB.actionMenu.close(true);}getSupportFragmentManager().popBackStack();}}@Overridepublic void passData(Contact contact) {if (fragmentB!= null) {Bundle args = new Bundle();args.putSerializable("contact", contact);fragmentB.setArguments(args);getSupportFragmentManager().beginTransaction().setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right).replace(R.id.fragment_holder, fragmentB).addToBackStack(null)五、实验数据(现象)处理分析下面是程序的截图:软件界面以及各个自文件目录示意图:通讯录在Android手机功能界面上的显示图标以及图标在工程里存放的位置:进入通讯录时的初界面以及图标的配置过程:刚开始运行通讯录时,出现几个权限选择:开始界面(按加号):创建一个新的联系人:会弹出键盘创建联系人的过程中如果格式不规范会有错误提示:比如Email格式错误创建好后的界面(多创建几个联系人),头像可以更改:修改头像时出现的错误如下(照相机和相册里选择合适的头像):接下来进行对通讯录的基本功能测试。
通讯录系统实验报告
通讯录系统实验报告通讯录系统实验报告一、引言通讯录系统是一种方便管理联系人信息的工具。
随着社会的发展和科技的进步,人们的联系方式越来越多样化,传统的纸质通讯录已经无法满足人们的需求。
因此,设计和开发一个高效、便捷的通讯录系统成为了一个重要的课题。
二、实验目的本次实验的目的是设计和实现一个通讯录系统,使用户能够方便地存储、查找和管理联系人信息。
通过这个实验,我们可以学习和掌握数据库的基本操作,提高我们的编程能力和实践能力。
三、实验过程1.需求分析在设计通讯录系统之前,我们首先需要进行需求分析。
通过调研和访谈,我们了解到用户对通讯录系统的需求主要包括以下几点:- 用户可以添加、编辑和删除联系人信息;- 用户可以按照姓名、电话号码等字段进行快速查找;- 用户可以导入和导出联系人信息,方便备份和共享;- 界面简洁明了,操作简单易用。
2.数据库设计在进行数据库设计时,我们需要确定通讯录系统的数据结构。
通讯录系统的主要数据包括联系人的姓名、电话号码、邮箱等信息。
我们可以使用关系型数据库来存储这些数据,并通过SQL语句进行操作。
3.界面设计为了提高用户体验,我们需要设计一个简洁明了的界面。
界面设计应该符合用户的使用习惯,操作简单易懂。
在设计界面时,我们可以考虑使用图形化界面或者命令行界面。
4.编码实现在编码实现过程中,我们需要根据需求分析和数据库设计来进行编码。
编码实现的重点是实现用户的各项操作功能,包括添加联系人、编辑联系人、删除联系人、查找联系人等。
5.测试和优化在编码实现完成后,我们需要进行测试和优化。
通过测试,我们可以发现和修复潜在的bug,优化系统的性能和稳定性。
四、实验结果经过几天的努力,我们成功地设计和实现了一个通讯录系统。
该系统具有以下特点:- 界面简洁明了,操作简单易用;- 用户可以方便地添加、编辑和删除联系人信息;- 用户可以按照姓名、电话号码等字段进行快速查找;- 用户可以导入和导出联系人信息,方便备份和共享。
手机通讯录安卓课程设计报告书
XX科技大学计算机科学与工程学院智能终端系统及应用开发课程设计报告题目:手机通讯录学号:********班级:********姓名:********指导老师:********绪论随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。
因此,移动终端的应用软件和需要的服务将会有很大的发展空间。
在Google和Android手机联盟的共同推动下,Android在众多手机操作系统中脱颖而出,受到广大消费者的欢迎。
手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。
根据手机功能使用调查显示,有9成以上的消费者使用手机通讯录功能。
随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展[4]。
通讯录从无到有,从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展为名片夹,也就是在一个人名下,可以存储座机、手机、单位、地址、电子邮件等内容。
这种名片夹在电话薄的基础上,大大丰富了内容,同时结构也发生了革命性变化,而且随着手机的发展,相信更优秀的通讯录会越来越受到社会各层人士的喜爱。
一、课程设计目的智能终端系统及应用开发课程设计是计算机相关专业的一个综合性实践教学环节,是学习完《智能终端系统及应用开发》课程后进行的一次全面的综合练习。
其目的在于促进学生复习和巩固Android 应用技术,加深对软件设计方法、软件设计技术和设计思想的理解,并能运用所学Android 设计知识,通过本课程设计让学生进行简单Android 应用软件的开发,掌握软件设计的方法和面向对象程序设计的基本技术,提高学生在软件开发方面的综合应用能力。
二、课程设计内容通过对Android技术的相关研究,了解Android源码实现原理以及过程,从而设计出一款能够使用的手机通讯录。
这款手机通讯录实现的相关内容如下:1.简洁、实用的操作界面。
作通讯录的实训报告
随着信息技术的飞速发展,通讯录在人们的工作、生活中扮演着越来越重要的角色。
为了提高同学们对通讯录管理的认识,培养实际操作能力,我校组织了通讯录实训活动。
本次实训旨在使同学们掌握通讯录的基本操作,提高信息处理能力,为今后的工作打下坚实基础。
二、实训目标1. 熟悉通讯录的基本概念和作用;2. 掌握通讯录的创建、编辑、查询、导出等功能;3. 学会使用通讯录进行日常信息管理;4. 培养同学们团队协作和沟通能力。
三、实训内容1. 通讯录基础知识实训老师首先向同学们介绍了通讯录的基本概念、作用以及常见的通讯录类型。
通讯录是一种用于存储和查询联系人信息的工具,可以方便地记录和查找电话、邮箱、地址等个人信息。
常见的通讯录类型有纸质通讯录、电子通讯录等。
2. 通讯录创建与编辑同学们在实训老师的指导下,学习了如何创建一个新的通讯录。
首先,选择合适的通讯录类型,如电子通讯录;然后,输入联系人的姓名、电话、邮箱、地址等基本信息。
在编辑通讯录时,同学们掌握了如何修改、删除、添加联系人信息。
3. 通讯录查询与导出实训老师讲解了如何通过姓名、电话、邮箱等条件在通讯录中查询联系人信息。
此外,同学们还学会了如何将通讯录导出为Excel、Word等格式,方便后续的整理和使用。
4. 实际操作演练为了巩固所学知识,同学们进行了实际操作演练。
在实训老师的带领下,同学们分组进行通讯录管理,包括创建通讯录、添加联系人、查询信息等。
通过实际操作,同学们熟练掌握了通讯录的基本操作。
1. 同学们对通讯录的基本概念、作用有了更深入的了解;2. 掌握了通讯录的创建、编辑、查询、导出等功能;3. 提高了信息处理能力,为今后的工作打下了坚实基础;4. 培养了团队协作和沟通能力。
五、实训总结本次通讯录实训活动,同学们积极参与,认真完成各项任务。
通过实训,同学们对通讯录有了更加全面的认识,掌握了通讯录的基本操作,提高了信息处理能力。
在今后的工作和生活中,通讯录将发挥重要作用,希望同学们能够充分利用所学知识,提高工作效率。
(实习报告)移动通信实习报告
(实习报告)移动通信实习报告
移动通信实习报告。
一、实习单位介绍。
我所在的实习单位是一家知名的移动通信公司,主要从事移动
通信网络的建设和维护工作。
公司拥有先进的通信设备和技术团队,致力于为用户提供高质量的通信服务。
二、实习内容。
在实习期间,我主要参与了移动通信网络的日常维护工作。
具
体包括对基站设备的巡检和维护、网络故障的排查和修复、通信设
备的安装和调试等工作。
通过实际操作,我深入了解了移动通信网
络的运行原理和维护流程,提高了自己的实际操作能力和问题解决
能力。
三、实习收获。
通过这段时间的实习,我对移动通信网络有了更深入的了解,
学到了很多实用的技能和知识。
同时,我也锻炼了自己的动手能力
和团队协作能力,提高了自己的工作效率和实际操作能力。
四、实习感想。
这次实习让我深刻体会到了移动通信行业的发展迅速和技术更
新换代的速度。
在未来的发展中,我会继续学习和提升自己的技能,为移动通信行业的发展贡献自己的力量。
五、实习建议。
在实习过程中,我觉得实习单位可以加强对实习生的培训和指导,让实习生更快地适应工作环境和工作内容。
同时,也希望实习
单位能够给予实习生更多的实践机会,让实习生能够更好地学习和
成长。
总之,这次实习让我受益匪浅,我会把所学所得运用到未来的
工作中,不断提升自己,为移动通信行业的发展贡献自己的力量。
感谢实习单位给予我这次宝贵的实习机会。
Android报告 _通讯录
计算机技术与工程学院课程设计报告课程名称:移动互联网设备程序设计设计题目:手机通讯录学生姓名:**学号:**********专业班级:软件1242指导教师:王文涛张东辉起止时间:9月21日至10月10日内容表现成果报告总评成绩目录1.前言 (01)2.设计主要功能 (03)3.技术介绍 (04)4.总体设计 (04)5.程序数据库的表格代码 (07)6.详细设计 (07)7.分组的业务处理 (08)8.添加分组 (09)9.删除分组 (10)10.重命名 (10)11.添加联系人 (11)12.联系人的业务处理 (12)13.删除联系人 (13)14.移动联系人 (14)15.联系人功能 (15)16.设计总结 (16)17.参考文献 (16)前言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操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。
通讯录制作实习报告
一、实习背景随着信息化时代的到来,通讯录作为人们日常工作中不可或缺的工具,其重要性日益凸显。
为了更好地掌握通讯录制作的相关技能,提高自己的办公效率,我于近期在一家企业进行了为期一个月的通讯录制作实习。
本次实习旨在通过实际操作,深入了解通讯录制作的全过程,提高自己的办公软件应用能力。
二、实习单位及岗位实习单位:XX科技有限公司实习岗位:行政助理三、实习内容1. 实习目标通过本次实习,我期望达到以下目标:(1)掌握通讯录制作的基本流程和技巧;(2)熟悉常用办公软件(如Excel、Word等)在通讯录制作中的应用;(3)提高自己在实际工作中的沟通能力和团队协作能力。
2. 实习过程(1)实习初期实习初期,我在导师的带领下,了解了公司各部门的组织架构和人员信息。
随后,我开始学习通讯录制作的基本流程,包括收集信息、整理数据、设计模板、录入信息、校对修改等。
(2)实习中期在实习中期,我参与了公司通讯录的更新和维护工作。
具体内容包括:1)收集各部门人员的新增、变动和离职信息;2)根据收集到的信息,更新通讯录内容;3)对通讯录进行分类整理,便于查找;4)定期检查通讯录的准确性,确保信息及时更新。
(3)实习后期实习后期,我尝试独立完成一次通讯录的制作。
在导师的指导下,我学习了如何设计通讯录模板,并运用Excel和Word等办公软件进行操作。
以下是我制作通讯录的具体步骤:1)确定通讯录模板样式:根据公司实际情况,我选择了简洁、大方的模板样式,方便员工查找和使用。
2)收集信息:通过询问各部门负责人,收集到最新的员工信息,包括姓名、部门、职位、联系方式等。
3)录入信息:运用Excel软件,将收集到的信息录入表格中,并对数据进行分类整理。
4)设计模板:利用Word软件,根据模板样式,设计通讯录的排版和格式。
5)校对修改:在完成通讯录制作后,对内容进行仔细检查,确保信息准确无误。
6)打印分发:将制作好的通讯录打印出来,分发给各部门。
移动通讯技术实训报告
一、实训背景随着信息技术的飞速发展,移动通讯技术在人们的生活中扮演着越来越重要的角色。
为了更好地掌握移动通讯技术,提高自身的专业技能,我们选择了移动通讯技术作为实训课程。
本次实训旨在通过理论与实践相结合的方式,使学生对移动通讯技术的基本原理、技术规范和实际应用有更深入的了解。
二、实训目标1. 掌握移动通讯技术的基本原理和关键技术;2. 熟悉移动通讯网络的架构和组成;3. 了解移动通讯设备的操作和维护方法;4. 培养实际操作能力和团队协作精神。
三、实训内容1. 移动通信基本原理(1)信号传输方式:模拟信号、数字信号;(2)调制解调技术:调幅、调频、调相;(3)复用技术:频分复用、时分复用、码分复用;(4)编码技术:纠错编码、扩频技术。
2. 移动通信网络架构(1)无线接入网:基站、移动交换中心;(2)核心网:交换中心、归属位置寄存器、访问位置寄存器;(3)支撑网:短信中心、计费中心、网管中心。
3. 移动通信设备操作与维护(1)基站设备:天馈线、RRU、BBU;(2)移动交换设备:MSC、SGSN、GGSN;(3)移动终端设备:手机、平板电脑。
4. 实际应用案例分析(1)4G网络建设与应用;(2)5G网络技术展望;(3)物联网、车联网等新兴领域应用。
四、实训过程1. 理论学习:通过课堂讲授、自学等方式,掌握移动通讯技术的基本原理和关键技术;2. 实验操作:在实验室进行移动通讯设备操作、调试、维护等实验;3. 案例分析:通过查阅资料、讨论等方式,了解移动通讯技术在实际应用中的问题及解决方案;4. 项目实践:参与移动通讯网络规划、优化等实际项目,提高实际操作能力。
五、实训成果1. 理论知识方面:掌握了移动通讯技术的基本原理、技术规范和实际应用;2. 实际操作方面:熟练掌握了移动通讯设备的操作、调试、维护等技能;3. 团队协作方面:在实训过程中,学会了与他人沟通、协作,提高了团队意识。
六、总结本次移动通讯技术实训,使我们对移动通讯技术有了更深入的了解,提高了自身的专业技能。
Android手机通讯录实验报告
Android手机通讯录实验报告学院:安徽机电职业技术学院专业:软件技术班级:软件3141姓名:张程庆小分组指导老师:范宏宇小组分组详细信息组长:张程庆文档:赵晶蓉编程:蔡婷、刘朝群、宋昱昊界面:江晓雨测试:王健康目录1.系统描述1.1问题描述 (1)1.2功能描述 (2)1.3数据需求 (3)1.4设计意义 (4)2.界面设计2.1主界面 (5)2.2新建界面 (6)2.3修改界面 (7)2.4查询界面 (8)2.5添加界面 (9)3.运用的组件4.java代码部分截图5.xml代码部分截图6.设计总结与收获1.系统描述1.1问题描述在我们学习完Android的相关知识以及软件技术这门学科所涉及的不同编程语言,让我们在现在这个学习阶段对软件编程有了一定的了解,这次的实验是做我们都很熟悉的通讯录,实现手机通讯录的基本功能,包括添加手机联系人,查询手机联系人,删除手机联系人等最基本操作。
这次的手机通讯录是以java语言为主体,xml布局,结合Android 的移动开发平台等实现安卓手机通讯录的基本操作,做到基本的操作都能够完好的运行,在数据丢失后也能够及时的找回。
1.2功能描述1.3数据需求本程序是编程通讯录的相关信息,包括联系人姓名、手机号码、公司号码、存储信息等,在我们的通讯录中利用客户输入的相关用户信息进行保存从而传输到数据库中。
1.4设计意义我们设计的通讯录包括添加联系人、删除联系人、修改联系人信息、存储联系人信息等基本的手机通讯录的功能,在现在的信息和现代化社会环境下,为了更加方便的找到我们的朋友或家人,我们需要更加简洁方便手机通讯录来方便我们联系他人,随着手机的不断更新换代我们的通讯录也向着更加人性化的方向发展着。
在未来的发展中,通讯录作为手机最基本的功能,对人们的影响也有了一定的程度,人们也越发多的使用着手机通讯录,相信在今后的发展中我们会做到更好,更方便他们的生活。
实现人与人更亲密的互动。
手机通讯录实验报告及使用说明(附源代码)
手机通讯录实验报告及使用说明(附源代码)自查报告。
标题,手机通讯录实验报告及使用说明(附源代码)。
自查报告:在进行手机通讯录实验及使用说明的撰写过程中,我对手机通讯录的功能和操作进行了深入的研究和实践。
在实验中,我首先对手机通讯录的基本功能进行了分析和总结,包括添加联系人、编辑联系人信息、删除联系人等操作。
然后,我利用编程知识,编写了手机通讯录的源代码,并进行了测试和调试。
在实验中,我发现手机通讯录的功能十分实用,可以帮助用户轻松管理联系人信息,提高工作效率。
通过对手机通讯录的操作和源代码的编写,我对手机通讯录的原理和实现方式有了更深入的了解,也增强了我的编程能力和实际操作能力。
在使用说明的撰写过程中,我详细介绍了手机通讯录的各项功能操作和使用方法,并附上了源代码的下载链接,方便读者进行学习和实践。
我还对手机通讯录的使用注意事项进行了说明,帮助用户更好地使用手机通讯录,并避免操作失误。
总的来说,通过本次实验和使用说明的撰写,我对手机通讯录有了更深入的了解,也提高了我的编程能力和文档撰写能力。
我相信这份实验报告和使用说明能够帮助更多的人学习和使用手机通讯录,提高工作和生活效率。
附源代码:```java。
public class Contact {。
private String name;private String phoneNumber;private String email;public Contact(String name, String phoneNumber, String email) {。
= name;this.phoneNumber = phoneNumber;this.email = email;}。
public String getName() {。
return name;}。
public void setName(String name) {。
= name;}。
public String getPhoneNumber() {。
安卓通讯录实训报告
安卓实训设计报告安卓通讯录设计题目:安卓通讯录班级:姓名:学号:指导老师:日期: 2012年6月7日内容要求一、题目分析,功能要求。
1.1 实验目的熟悉Android软件开发的基本架构利用Eclipse和ADT插件设计通讯录1.2 功能本手机通讯录工具主要实现五大功能:联系人的查询:字段查询,分组查询,字母排序查询;增加、删除联系人以及修改联系人信息;导入、导出联系人;发送联系人信息;设置。
二、实验设计2.1 UI设计我们用一个ListView来显示整个通讯录,其中用TextView显示每一记录,他们的xml文件分别为:main.xml(通讯录主界面),addres.xml(添加联系人界面),list_item.xml(浏览联系人界面),find.xml(查找联系人界面)。
2.2功能的设计为了在主界面中浏览联系人的信息,并且创建主要菜单栏,我们设计了MainActivity类,主要用于显示联系人信息和菜单栏,通过菜单栏,实现通讯录的相关功能。
AddressBook类主要是为了实现联系人的添加功能,并且实现信息的保存后跳转到主界面。
Findactivity类主要是为了实现联系人的查找功能,输入联系人的姓名,点击查找按钮,显示所查联系人的相关信息。
三、实验程序四、实验效果图五、总结通过设计该通讯录,主要学习了UI设计、数据库的综合操作、动态菜单的使用以及各种权限的注册。
通过本次设计,使我对Android平台的数据库操作有了更进一步的理解,同时也对Android系统有了更深入的了解。
附录一//定义数据public class ContactColumn implements BaseColumns{public ContactColumn(){}//列名public static final String NAME = "name"; //姓名public static final String MOBILENUM = "mobileNumber"; //移动电话public static final String HOMENUM = "homeNumber"; //家庭电话public static final String ADDRESS = "address"; //地址public static final String EMAIL = "email"; //邮箱public static final String BLOG = "blog"; //博客//列索引值public static final int_ID_COLUMN = 0;public static final int NAME_COLUMN = 1;public static final int MOBILENUM_COLUMN = 2;public static final int HOMENUM_COLUMN = 3;public static final int ADDRESS_COLUMN = 4;public static final int EMAIL_COLUMN = 5;public static final int BLOG_COLUMN = 6;//查询结果public static final String[] PROJECTION ={_ID,NAME,MOBILENUM,HOMENUM,ADDRESS,EMAIL,BLOG,};}public class DBHelper extends SQLiteOpenHelper{public static final String DATABASE_NAME = "mycontacts.db";//数据库名public static final int DATABASE_VERSION = 2; //版本public static final String CONTACTS_TABLE = "contacts"; //表名//创建表private static final String DATABASE_CREATE ="CREATE TABLE " + CONTACTS_TABLE +" ("+ ContactColumn._ID+" integer primary key autoincrement,"+ +" text,"+ ContactColumn.MOBILENUM+" text,"+ ContactColumn.HOMENUM+" text,"+ ContactColumn.ADDRESS+" text,"+ ContactColumn.EMAIL+" text,"+ ContactColumn.BLOG+" text);";public DBHelper(Context context){super(context, DATABASE_NAME, null, DATABASE_VERSION);}public void onCreate(SQLiteDatabase db){db.execSQL(DATABASE_CREATE);}public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){db.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE);onCreate(db);}}// URI类型转换public String getType(Uri uri){switch (uriMatcher.match(uri)){case CONTACTS:return"vnd.android.cursor.dir/vnd.yarin.android.mycontacts";case CONTACT_ID:return"vnd.android.cursor.item/vnd.yarin.android.mycontacts";default:throw new IllegalArgumentException("Unsupported URI: " + uri);}}// 删除指定数据列@Overridepublic int delete(Uri uri, String where, String[] selectionArgs){int count;switch (uriMatcher.match(uri)){case CONTACTS:count = contactsDB.delete(CONTACTS_TABLE, where, selectionArgs);break;case CONTACT_ID:String contactID = uri.getPathSegments().get(1);count = contactsDB.delete(CONTACTS_TABLE,ContactColumn._ID+ "=" + contactID+ (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""),selectionArgs);break;default:throw new IllegalArgumentException("Unsupported URI: " + uri);}getContext().getContentResolver().notifyChange(uri, null);return count;}// 插入数据public Uri insert(Uri uri, ContentValues initialValues){if (uriMatcher.match(uri) != CONTACTS){throw new IllegalArgumentException("Unknown URI " + uri);}ContentValues values;if (initialValues != null){values = new ContentValues(initialValues);Log.e(TAG + "insert", "initialValues is not null");}else{values = new ContentValues();}// 设置默认值if (values.containsKey() == false){values.put(, "");}if (values.containsKey(ContactColumn.MOBILENUM) == false){values.put(ContactColumn.MOBILENUM, "");}if (values.containsKey(ContactColumn.HOMENUM) == false){values.put(ContactColumn.HOMENUM, "");}if (values.containsKey(ContactColumn.ADDRESS) == false){values.put(ContactColumn.ADDRESS, "");}if (values.containsKey(ContactColumn.EMAIL) == false){values.put(ContactColumn.EMAIL, "");}if (values.containsKey(ContactColumn.BLOG) == false){values.put(ContactColumn.BLOG, "");}Log.e(TAG + "insert", values.toString());long rowId = contactsDB.insert(CONTACTS_TABLE, null, values);if (rowId > 0){Uri noteUri = ContentUris.withAppendedId(CONTENT_URI, rowId);getContext().getContentResolver().notifyChange(noteUri, null);Log.e(TAG + "insert", noteUri.toString());return noteUri;}throw new SQLException("Failed to insert row into " + uri);}// 更新数据库public int update(Uri uri, ContentValues values, String where, String[] selectionArgs){int count;Log.e(TAG + "update", values.toString());Log.e(TAG + "update", uri.toString());Log.e(TAG + "update :match", "" + uriMatcher.match(uri));switch (uriMatcher.match(uri)){case CONTACTS:Log.e(TAG + "update", CONTACTS + "");count = contactsDB.update(CONTACTS_TABLE, values, where, selectionArgs);break;case CONTACT_ID:String contactID = uri.getPathSegments().get(1);Log.e(TAG + "update", contactID + "");count = contactsDB.update(CONTACTS_TABLE, values, ContactColumn._ID + "=" + contactID+ (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""), selectionArgs);break;default:throw new IllegalArgumentException("Unsupported URI: " + uri);}getContext().getContentResolver().notifyChange(uri, null);return count;}}public boolean onPrepareOptionsMenu(Menu menu){super.onPrepareOptionsMenu(menu);final boolean haveItems = getListAdapter().getCount() > 0;if (haveItems){Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId());Intent[] specifics = new Intent[2];specifics[0] = new Intent(Intent.ACTION_EDIT, uri);specifics[1] = new Intent(Intent.ACTION_VIEW, uri);MenuItem[] items = new MenuItem[2];//添加满足条件的菜单Intent intent = new Intent(null, uri);intent.addCategory(Intent.CATEGORY_ALTERNATIVE);menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items);if (items[0] != null){//编辑联系人items[0].setShortcut('1', 'e').setIcon(R.drawable.edituser).setTitle(R.string.editor_user);}if (items[1] != null){//查看联系人items[1].setShortcut('2', 'f').setTitle(R.string.view_user).setIcon(R.drawable.viewuser);}}else{menu.removeGroup(Menu.CATEGORY_ALTERNATIVE);}return true;}<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.yarin.android.MyContacts"android:versionCode="1"android:versionName="1.0"><application android:icon="@drawable/icon" android:label="@string/app_name"><provider android:name="ContactsProvider"android:authorities="com.yarin.android.provider.ContactsProvider"/><activity android:name=".MyContacts"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER"/></intent-filter></activity><activity android:name=".ContactEditor"android:label="@string/editor_user"><intent-filter><action android:name="android.intent.action.EDIT"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.item/vnd.yarin.android.mycontacts"/> </intent-filter><intent-filter><action android:name="android.intent.action.INSERT"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.yarin.android.mycontacts"/> </intent-filter></activity><activity android:name=".ContactView"android:label="@string/view_user"><intent-filter><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.item/vnd.yarin.android.mycontacts"/> </intent-filter><intent-filter><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.yarin.android.mycontacts"/> </intent-filter></activity></application><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission><uses-permission android:name="android.permission.SEND_SMS"></uses-permission><uses-permission android:name="android.permission.RECEIVE_SMS"/><uses-sdk android:minSdkVersion="5"/></manifest>。
通讯录管理实验报告
一、实验背景随着科技的发展,人们的生活节奏越来越快,通讯方式也日益多样化。
为了方便人们管理和查阅通讯信息,通讯录管理系统应运而生。
本实验旨在通过设计和实现一个通讯录管理系统,提高通讯信息管理的效率和便捷性。
二、实验目的1. 熟悉通讯录管理系统的基本功能和操作流程;2. 掌握通讯录管理系统的设计方法和实现技巧;3. 提高编程能力和系统分析能力。
三、实验内容1. 系统需求分析根据实验要求,本通讯录管理系统应具备以下功能:(1)添加联系人:输入联系人信息,包括姓名、电话、邮箱、QQ号等,并将其保存到系统中;(2)删除联系人:根据联系人姓名或电话,删除指定联系人信息;(3)修改联系人信息:根据联系人姓名或电话,修改指定联系人的信息;(4)查询联系人:根据联系人姓名、电话、邮箱或QQ号,查询指定联系人的信息;(5)导出通讯录:将通讯录信息导出到文本文件或Excel文件;(6)导入通讯录:从文本文件或Excel文件中导入通讯录信息。
2. 系统设计本系统采用C++编程语言,利用面向对象编程思想进行设计。
系统采用单例模式,确保全局只有一个通讯录对象。
联系人信息以链表形式存储,便于插入、删除和修改操作。
(1)数据结构设计联系人信息使用结构体存储,包括姓名、电话、邮箱、QQ号等字段。
```cppstruct Contact {string name;string phone;string email;string qq;Contact next;};```(2)类设计- Contact类:负责存储联系人信息,包括姓名、电话、邮箱、QQ号等字段;- ContactManager类:负责管理联系人链表,包括添加、删除、修改、查询、导出和导入等功能。
```cppclass Contact {public:string name;string phone;string email;string qq;Contact next;Contact(string n, string p, string e, string q) : name(n), phone(p), email(e), qq(q), next(NULL) {}};class ContactManager {private:Contact head;public:ContactManager() : head(NULL) {}~ContactManager() {// 释放链表内存Contact temp;while (head != NULL) {temp = head;head = head->next;delete temp;}}void AddContact(Contact contact) {// 添加联系人}void DeleteContact(string phone) {// 删除联系人}void ModifyContact(string phone, Contact newContact) { // 修改联系人信息}Contact QueryContact(string phone) {// 查询联系人return NULL;}void ExportContact() {// 导出通讯录}void ImportContact() {// 导入通讯录}};```3. 系统实现根据系统设计,使用C++编程语言实现各个功能模块。
Android报告 _通讯录
计算机技术与工程学院课程设计报告课程名称:移动互联网设备程序设计设计题目:手机通讯录学生姓名:**学号:**********专业班级:软件1242指导教师:王文涛张东辉起止时间:9月21日至10月10日内容表现成果报告总评成绩目录1.前言 (01)2.设计主要功能 (03)3.技术介绍 (04)4.总体设计 (04)5.程序数据库的表格代码 (07)6.详细设计 (07)7.分组的业务处理 (08)8.添加分组 (09)9.删除分组 (10)10.重命名 (10)11.添加联系人 (11)12.联系人的业务处理 (12)13.删除联系人 (13)14.移动联系人 (14)15.联系人功能 (15)16.设计总结 (16)17.参考文献 (16)前言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操作系统的智能手机目前已经成为市场上最炙手可热的智能产品。
通讯录制作实习报告
实习单位:ABC通讯录制作公司实习时间:2023年2月1日至2023年2月28日实习内容:在ABC通讯录制作公司实习期间,我主要负责了通讯录的制作、排版和校对工作。
实习期间,我参与了多个项目的通讯录制作,包括公司内部通讯录、学校班级通讯录和社团组织通讯录等。
以下是我实习期间的主要工作内容:1. 数据收集:在制作通讯录之前,我需要收集相关人员的姓名、职务、电话号码和电子邮件等信息。
通过与相关人员沟通,确保数据的准确性和完整性。
2. 通讯录排版:根据客户的要求,使用专业软件(如InDesign、Word等)进行通讯录的排版。
包括设置页边距、字体、字号、行间距等,确保通讯录的版面整洁、美观。
3. 信息校对:在通讯录排版完成后,我对每个页面的信息进行仔细校对,确保姓名、职务、电话号码等信息的准确无误。
同时,与客户沟通,确认通讯录的版面和内容是否符合要求。
4. 打印和装订:在通讯录校对无误后,我将文件发送至打印厂进行打印,并根据客户的要求选择合适的纸张和装订方式。
在装订过程中,确保通讯录的装订质量。
5. 交付客户:在通讯录制作完成后,我将成品交付给客户,并收集客户的反馈意见,以便在今后的制作过程中进行改进。
实习收获:1. 技能提升:通过实习,我熟练掌握了通讯录制作、排版和校对的相关技能,提高了自己的专业素养。
2. 团队协作:在实习过程中,我与同事们共同完成多个项目的通讯录制作,学会了与他人协作,提高了自己的沟通能力和团队意识。
3. 客户服务:在与客户沟通的过程中,我学会了倾听客户需求,为客户提供满意的服务,提高了自己的客户服务能力。
4. 工作态度:实习期间,我严格遵守公司的规章制度,按时完成工作任务,养成了良好的工作习惯和态度。
通过本次实习,我深刻认识到通讯录制作工作的重要性。
作为一名通讯录制作人员,需要具备严谨的工作态度、良好的沟通能力和团队协作精神。
在今后的学习和工作中,我将继续努力提升自己的专业素养,为客户提供更优质的服务。
安卓实训总结报告5篇
安卓实训总结报告5篇篇1一、引言在科技飞速发展的今天,安卓技术作为移动开发领域的翘楚,受到了广泛关注。
为了更好地掌握安卓开发技能,我参加了为期三个月的安卓实训课程。
本次实训旨在提高学员的安卓开发能力,通过系统学习安卓应用开发的核心技术,培养具备实战能力的开发人才。
二、课程概述本次实训课程涵盖了安卓开发的基础知识与核心技术,包括Java 编程基础、安卓SDK应用、安卓UI设计、网络通信、数据存储等方面的内容。
通过理论讲解、案例分析、实践操作等多种教学方式,使学员能够全面了解安卓开发的各个方面。
此外,课程还设置了多个实践环节,让学员通过实际操作来巩固所学知识,提升开发能力。
三、重点收获1. 掌握了Java编程基础,为安卓开发奠定了坚实的基础。
2. 深入学习了安卓SDK的应用,能够熟练运用各种开发工具进行开发。
3. 学会了安卓UI设计,能够设计出美观大方的用户界面。
4. 了解了网络通信、数据存储等核心技术,能够开发出功能完善的安卓应用。
5. 通过实践操作,提高了自己的动手能力和解决问题的能力。
四、不足之处1. 对某些技术细节掌握不够深入,需要进一步加强学习和实践。
2. 在UI设计方面,还需要提高审美能力和设计水平。
3. 在开发过程中,需要进一步提高代码质量和开发效率。
五、建议与展望1. 建议学校加强实训课程的实践环节,增加更多的实战项目,让学员能够更好地将所学知识运用到实际开发中。
2. 希望学校能够提供更多的学习资源和技术支持,方便学员进行自主学习和交流。
3. 对于想要从事安卓开发的学员来说,需要注重基础知识的学习和实践能力的提升,同时还需要不断关注新技术的发展和应用,以适应市场的需求和变化。
六、总结与展望通过本次安卓实训课程的学习和实践,我收获了许多宝贵的经验和知识。
在未来的学习和工作中,我将继续努力提升自己的技能和能力,不断探索和尝试新的技术和方法,为成为一名优秀的安卓开发人才而努力。
同时,我也希望学校能够继续加强实训课程的建设和改革,为学员提供更好的学习体验和实践机会。
手机通讯录实验报告及使用说明(附源代码)
手机通讯录实验报告及使用说明(附源代码)自查报告。
标题,手机通讯录实验报告及使用说明(附源代码)。
自查报告:
在进行手机通讯录实验及使用说明的撰写过程中,我仔细阅读
了实验要求,并按照要求完成了实验报告的撰写和源代码的整理。
在此过程中,我遇到了一些困难,但通过查阅资料和请教老师同学,最终顺利完成了任务。
在实验报告中,我详细描述了手机通讯录的功能和使用方法,
包括添加联系人、查找联系人、编辑联系人信息、删除联系人等操作。
我还附上了源代码,并对关键部分进行了解释和注释,以便他
人能够理解和使用。
在整个实验过程中,我学习到了许多关于手机通讯录的知识,
包括数据库的设计和操作、用户界面的设计和实现等。
通过动手实践,我加深了对这些知识的理解,并提升了自己的编程能力。
在撰写实验报告的过程中,我也注意到了一些自己的不足之处,比如在代码注释和格式上还有待改进。
因此,我会继续努力学习,
不断提升自己的编程水平和文档撰写能力。
总的来说,通过这次实验和撰写实验报告,我收获颇丰,不仅
掌握了手机通讯录的设计和实现方法,还提升了自己的综合能力。
我会继续努力,为以后更多的实验和项目做好准备。
自查人,XXX。
日期,XXXX年XX月XX日。
Android编写的通讯录以及实验报告
课程名称Android高级编程班级11sf01 实验日期2013-09-10姓名学号指导教师周景实验成绩95一、实验名称Android开发基础实验二、实验目的及要求1,创建一个联系人的类Contact作为联系人对象的抽象,联系人类的可以包含属性包括:姓名,电话,手机号码,Email,QQ号码,备注信息等等;2,利用联系人类可以实例化联系人对象,例如一个联系人对象的信息可以是:(姓名,张三),(电话,12345678),(手机号码,133****5678),(Email,******************),其他的信息为空。
3,使用XML布局文件创建一个显示联系人信息的界面,在Activity中使用代码加载这个界面。
三、实验环境PC, Android SDK, Eclipse四、实验内容创建一个显示联系人信息的界面五、过程及实验结果1, 任务一:在Eclipse中创建一个Android Application Project,选择合适的应用名称,例如:Contacts、AddressBook或者其他有自己特色的名字,选择合适的Package名称,例如:su.contacts。
2,在工程中创建一个新的Class,名称是Contact,下面是Contact 类的参考实现。
3,实例化一个Contact对象。
4,任务三:使用XML布局文件创建一个显示联系人信息的界面,参考实现如下(注意:用于显示姓名,手机和电子邮件的三个TextView 控件设置了android:id属性,该属性的值作为参数来调用Activity 的findViewById方法就可以获取这三个TextView控件的引用)。
5,任务四:通过findViewById方法获取三个TextView对象,然后调用TextView的setText方法设置显示的文字信息。
六、实验小结1、任务一:在Eclipse中创建一个Android Application Project,名称:Contact;Package,名称:su.contacts。
Android实验报告_基于SQLite的通信录
第一次实验Android界面设计一、实验目的及实验环境1、实验目的1)掌握SQLiteOpenHelper类结构2)掌握基于SQLite数据库的应用开发过程3)掌握Content Provider发布数据的方法4)掌握Content Resolver获取数据的方法2、实验环境系统开发平Android Studio 3、0系统开发平台:Android 7、1运行平台:Windows10 x64运行环境:Microsoft、NET Framework SDK 2、0二、实验教材、组织方式、实验内容1、实验教材: Andorid开发与应用2、组织方式:个人独立完成2、实验内容:实现基于SQLite数据库的通信录应用,通过单击增加图标打开添加通信录界面,通过单击通信录中的各条信息可删除选中项。
三.方案设计Android系统中集成了SQLite数据库,并且为数据库的操作提供了相关的类与方法,便于没有数据库开发经验的开发者编写程序。
另外,Android平台中利用Content Provider机制来实现跨应用程序数据共享。
一个应用程序可以通过Content Provider来发布自己的数据,其她的应用程序可以通过Content Resolver来获取共享数据。
四.运行结果五.总结通过这次实验掌握了SQLite OpenHelper类结构,掌握了基于SQLite数据库的应用开发过程以及Content Provider发布数据的方法与掌握Content Resolver获取数据的方法。
六.附录:源代码主布局文件activity_main、xml:<LinearLayout xmlns:android="、android、com/apk/res/android"<TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="通信录"/><ListViewandroid:id="@+id/listView"android:layout_width="wrap_content"android:layout_height="wrap_content"></ListView> <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="add"/></LinearLayout>添加联系人布局文件addrelation、xml:<?xml version="1、0"encoding="utf-8"?><LinearLayout xmlns:android="、android、com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名"/><EditTextandroid:id="@+id/addName"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="电话"/><EditTextandroid:id="@+id/addTel"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="所属组"/><Spinnerandroid:id="@+id/addGroup"android:layout_width="wrap_content"android:layout_height="wrap_content"android:entries="@array/test"></Spinner><Buttonandroid:id="@+id/save"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text=" 保存 "/></LinearLayout>主Activity文件MainActivity、java:import android、support、v7、app、ActionBarActivity;import android、app、AlertDialog;import android、app、Application;import android、content、DialogInterface;import android、content、Intent;import android、database、Cursor;import android、os、Bundle;import android、view、Menu;import android、view、MenuItem;import android、view、View;import android、widget、AdapterView;import android、widget、ListView;import android、widget、SimpleCursorAdapter;public class MainActivity extends ActionBarActivity {private ListView listView;protected void onCreate(Bundle savedInstanceState) {super、onCreate(savedInstanceState);setContentView(R、layout、activity_main);listView = (ListView) findViewById(R、id、listView);// getRelationFromDB();}private void getRelationFromDB() {final DatabaseHelper dbHelper = new DatabaseHelper(this);Cursor cursor = dbHelper、query();String[] from = { "_id", "name", "tel", "groupName" };int[] to = { R、id、_id, R、id、name, R、id、tel, R、id、group };SimpleCursorAdapter scadapter = new SimpleCursorAdapter(this,R、layout、relationlist, cursor, from, to);listView、setAdapter(scadapter);listView、setOnItemClickListener(new AdapterView、OnItemClickListener() {public void onItemClick(AdapterView<?> adapter, View view,int position, long id) {final long temp = id;AlertDialog、Builder adBuilder = new AlertDialog、Builder(MainActivity、this);adBuilder、setMessage("确认要删除记录不?")、setPositiveButton("确认",new DialogInterface、OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {// TODO Auto-generated method stubdbHelper、del((int) temp);Cursor cursor = dbHelper、query();String[] from = { "_id", "name", "tel","groupName" };int[] to = { R、id、_id, R、id、name,R、id、tel, R、id、group };SimpleCursorAdapter scadapter = new SimpleCursorAdapter (getApplicationContext(),R、layout、relationlist, cursor,from, to);MainActivity、this、listView、setAdapter(scadapter);}})、setNegativeButton("取消",new DialogInterface、OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {}});AlertDialog aleraDialog = adBuilder、create();aleraDialog、show();}});dbHelper、close();}public void add(View view) {Intent intent = new Intent(MainActivity、this, AddrelationActivity、class);startActivityForResult(intent, 0x111);}protected void onActivityResult(int requestCode, int resultCode, Intent data) {super、onActivityResult(requestCode, resultCode, data);if (requestCode == 0x111 && resultCode == 0x111) {getRelationFromDB();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present、getMenuInflater()、inflate(R、menu、main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here、 The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest、xml、int id = item、getItemId();if (id == R、id、action_settings) {return true;}return super、onOptionsItemSelected(item);}}添加联系人AddrelationActivity、javaimport android、app、Activity;import android、app、AlertDialog;import android、content、ContentValues;import android、content、DialogInterface;import android、content、Intent;import android、os、Bundle;import android、view、View;import android、widget、EditText;import android、widget、Spinner;public class AddrelationActivity extends Activity {private EditText addName, addTel;private Spinner addGroup;protected void onCreate(Bundle savedInstanceState) {super、onCreate(savedInstanceState);setContentView(R、layout、addrelation);addName = (EditText) findViewById(R、id、addName);addTel = (EditText) findViewById(R、id、addTel);addGroup = (Spinner) findViewById(R、id、addGroup);}public void save(View view) {final ContentValues values = new ContentValues();values、put("name", addName、getText()、toString());values、put("tel", addTel、getText()、toString());values、put("groupName", addGroup、getSelectedItem()、toString());final DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());final AlertDialog、Builder adBuilder = new AlertDialog、Builder(this);adBuilder、setMessage("确认保存记录不?")、setPositiveButton("确认", new DialogInterface、OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stubdbHelper、insert(values);Intent intent = getIntent();setResult(0x111, intent);AddrelationActivity、this、finish();}})、setNegativeButton("取消", new DialogInterface、OnClickListener() {public void onClick(DialogInterface dialog, int which) {}});AlertDialog aleraDialog = adBuilder、create();aleraDialog、show();}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安卓实训设计报告安卓通讯录设计题目:安卓通讯录班级:姓名:学号:指导老师:日期: 2012年6月7日容要求一、题目分析,功能要求。
1.1 实验目的熟悉Android软件开发的基本架构利用Eclipse和ADT插件设计通讯录1.2 功能本手机通讯录工具主要实现五大功能:联系人的查询:字段查询,分组查询,字母排序查询;增加、删除联系人以及修改联系人信息;导入、导出联系人;发送联系人信息;设置。
二、实验设计2.1 UI设计我们用一个ListView来显示整个通讯录,其中用TextView显示每一记录,他们的xml文件分别为:main.xml(通讯录主界面),addres.xml(添加联系人界面),list_item.xml(浏览联系人界面),find.xml(查找联系人界面)。
2.2功能的设计为了在主界面中浏览联系人的信息,并且创建主要菜单栏,我们设计了MainActivity类,主要用于显示联系人信息和菜单栏,通过菜单栏,实现通讯录的相关功能。
AddressBook类主要是为了实现联系人的添加功能,并且实现信息的保存后跳转到主界面。
Findactivity类主要是为了实现联系人的查找功能,输入联系人的,点击查找按钮,显示所查联系人的相关信息。
三、实验程序四、实验效果图五、总结通过设计该通讯录,主要学习了UI设计、数据库的综合操作、动态菜单的使用以及各种权限的注册。
通过本次设计,使我对Android平台的数据库操作有了更进一步的理解,同时也对Android系统有了更深入的了解。
附录一//定义数据public class ContactColumn implements BaseColumns{public ContactColumn(){}//列名public static final String NAME = "name"; //public static final String MOBILENUM = "mobileNumber"; //移动public static final String HOMENUM = "homeNumber"; //家庭public static final String ADDRESS = "address"; //地址public static final String EMAIL = "email"; //public static final String BLOG = "blog"; //博客//列索引值public static final int_ID_COLUMN = 0;public static final int NAME_COLUMN = 1;public static final int MOBILENUM_COLUMN = 2;public static final int HOMENUM_COLUMN = 3;public static final int ADDRESS_COLUMN = 4;public static final int EMAIL_COLUMN = 5;public static final int BLOG_COLUMN = 6;//查询结果public static final String[] PROJECTION ={_ID,NAME,MOBILENUM,HOMENUM,ADDRESS,EMAIL,BLOG,};}public class DBHelper extends SQLiteOpenHelper{public static final String DATABASE_NAME = "mycontacts.db";//数据库名public static final int DATABASE_VERSION = 2; //版本public static final String CONTACTS_TABLE = "contacts"; //表名//创建表private static final String DATABASE_CREATE ="CREATE TABLE " + CONTACTS_TABLE +" ("+ ContactColumn._ID+" integer primary key autoincrement,"+ +" text,"+ ContactColumn.MOBILENUM+" text,"+ ContactColumn.HOMENUM+" text,"+ ContactColumn.ADDRESS+" text,"+ ContactColumn.EMAIL+" text,"+ ContactColumn.BLOG+" text);";public DBHelper(Context context){super(context, DATABASE_NAME, null, DATABASE_VERSION);}public void onCreate(SQLiteDatabase db){db.execSQL(DATABASE_CREATE);}public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){db.execSQL("DROP TABLE IF EXISTS " + CONTACTS_TABLE);onCreate(db);}}// URI类型转换public String getType(Uri uri){switch (uriMatcher.match(uri)){case CONTACTS:return"vnd.android.cursor.dir/vnd.yarin.android.mycontacts";case CONTACT_ID:return"vnd.android.cursor.item/vnd.yarin.android.mycontacts";default:throw new IllegalArgumentException("Unsupported URI: " + uri);}}// 删除指定数据列Overridepublic int delete(Uri uri, String where, String[] selectionArgs){int count;switch (uriMatcher.match(uri)){case CONTACTS:count = contactsDB.delete(CONTACTS_TABLE, where, selectionArgs);break;case CONTACT_ID:String contactID = uri.getPathSegments().get(1);count = contactsDB.delete(CONTACTS_TABLE,ContactColumn._ID+ "=" + contactID+ (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""),selectionArgs);break;default:throw new IllegalArgumentException("Unsupported URI: " + uri);}getContext().getContentResolver().notifyChange(uri, null);return count;}// 插入数据public Uri insert(Uri uri, ContentValues initialValues){if (uriMatcher.match(uri) != CONTACTS){throw new IllegalArgumentException("Unknown URI " + uri);}ContentValues values;if (initialValues != null){values = new ContentValues(initialValues);Log.e(TAG + "insert", "initialValues is not null");}else{values = new ContentValues();}// 设置默认值if (values.containsKey() == false){values.put(, "");}if (values.containsKey(ContactColumn.MOBILENUM) == false){values.put(ContactColumn.MOBILENUM, "");}if (values.containsKey(ContactColumn.HOMENUM) == false){values.put(ContactColumn.HOMENUM, "");}if (values.containsKey(ContactColumn.ADDRESS) == false){values.put(ContactColumn.ADDRESS, "");}if (values.containsKey(ContactColumn.EMAIL) == false){values.put(ContactColumn.EMAIL, "");}if (values.containsKey(ContactColumn.BLOG) == false){values.put(ContactColumn.BLOG, "");}Log.e(TAG + "insert", values.toString());long rowId = contactsDB.insert(CONTACTS_TABLE, null, values);if (rowId > 0){Uri noteUri = ContentUris.withAppendedId(CONTENT_URI, rowId);getContext().getContentResolver().notifyChange(noteUri, null);Log.e(TAG + "insert", noteUri.toString());return noteUri;}throw new SQLException("Failed to insert row into " + uri);}// 更新数据库public int update(Uri uri, ContentValues values, String where, String[] selectionArgs){int count;Log.e(TAG + "update", values.toString());Log.e(TAG + "update", uri.toString());Log.e(TAG + "update :match", "" + uriMatcher.match(uri));switch (uriMatcher.match(uri)){case CONTACTS:Log.e(TAG + "update", CONTACTS + "");count = contactsDB.update(CONTACTS_TABLE, values, where, selectionArgs);break;case CONTACT_ID:String contactID = uri.getPathSegments().get(1);Log.e(TAG + "update", contactID + "");count = contactsDB.update(CONTACTS_TABLE, values, ContactColumn._ID + "=" + contactID+ (!TextUtils.isEmpty(where) ? " AND (" + where + ")" : ""), selectionArgs);break;default:throw new IllegalArgumentException("Unsupported URI: " + uri);}getContext().getContentResolver().notifyChange(uri, null);return count;}}public boolean onPrepareOptionsMenu(Menu menu){super.onPrepareOptionsMenu(menu);final boolean haveItems = getListAdapter().getCount() > 0;if (haveItems){Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId());Intent[] specifics = new Intent[2];specifics[0] = new Intent(Intent.ACTION_EDIT, uri);specifics[1] = new Intent(Intent.ACTION_VIEW, uri);MenuItem[] items = new MenuItem[2];//添加满足条件的菜单Intent intent = new Intent(null, uri);intent.addCategory(Intent.CATEGORY_ALTERNATIVE);menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items);if (items[0] != null){//编辑联系人items[0].setShortcut('1', 'e').setIcon(R.drawable.edituser).setTitle(R.string.editor_user);}if (items[1] != null){//查看联系人items[1].setShortcut('2', 'f').setTitle(R.string.view_user).setIcon(R.drawable.viewuser);}}else{menu.removeGroup(Menu.CATEGORY_ALTERNATIVE);}return true;}<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="schemas.android./apk/res/android"package=".yarin.android.MyContacts"android:versionCode="1"android:versionName="1.0"><application android:icon="drawable/icon" android:label="string/app_name"><provider android:name="ContactsProvider"android:authorities=".yarin.android.provider.ContactsProvider"/><activity android:name=".MyContacts"android:label="string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER"/></intent-filter></activity><activity android:name=".ContactEditor"android:label="string/editor_user"><intent-filter><action android:name="android.intent.action.EDIT"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.item/vnd.yarin.android.mycontacts"/> </intent-filter><intent-filter><action android:name="android.intent.action.INSERT"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.yarin.android.mycontacts"/> </intent-filter></activity><activity android:name=".ContactView"android:label="string/view_user"><intent-filter><action android:name="android.intent.action.VIEW"/><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.item/vnd.yarin.android.mycontacts"/> </intent-filter><intent-filter><category android:name="android.intent.category.DEF AULT"/><data android:mimeType="vnd.android.cursor.dir/vnd.yarin.android.mycontacts"/> </intent-filter></activity></application><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission><uses-permission android:name="android.permission.SEND_SMS"></uses-permission><uses-permission android:name="android.permission.RECEIVE_SMS"/><uses-sdk android:minSdkVersion="5"/></manifest>。