安卓通讯录实训报告

合集下载

Android开发实验---通讯录

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报告 _通讯录

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. 团队协作方面:在实训过程中,学会了与他人沟通、协作,提高了团队意识。

六、总结本次移动通讯技术实训,使我们对移动通讯技术有了更深入的了解,提高了自身的专业技能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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>。

相关文档
最新文档