Android入门扫盲之三-------------电话薄

电话薄在实际的开发中还是很常见的,在论坛中经常有人问,回答的也是事实而非,今天有空做点记录吧。

电话薄的开发无非就是对联系方式的增、删、改、查四种操作,这里可要注意了,在 Android 里面给用户的权限更大,可以修改和删除已有的联系人的信息,与 J2me PIM 不一样哦。在 Android 系统里面正对联系人的操作是被划分在 Content Providers 里面,用做好类似的开发,需要了解的知识: Uri( 不是 Url) Android 的权限控制、 Android 的联系方是表的字段等等。

有了上面的知识其实就可以开发增删改查的功能了,在网络上面看的基本只有增和查,在这里重点也在更新和删除,注意在做涉及到网系统读写的操作的时候,要在你的 AndroidMainfest.xml 里面把权限打开:

< uses-permission android:name = "android.permission.WRITE_CONTACTS" />

< uses-permission android:name = "android.permission.READ_CONTACTS" />

这里读和写的权限都要打开,与我们一般的思路有点不一样,这里读写权限是分开的,要是还想打电话就要也要把其对应的权限打开

< uses-permission android:name = "android.permission.CALL_PHONE" />

这些都是一些很细节性的基础东西,对于初学者很有必要注意哦,有的时候这些简单的基础东西没有注意可能会然他你死活找不到 bug 所在。

废话少说,下面贴点代码:

<1> 添加 :

public boolean insert(String name, String phoneNum, String email, String qq) {

       if (name == null ) {

           Log.e ( TAG , "The Name is not allow null!!" );

           return false ;

       }

       try {

           ContentResolver contentResolver = mContext .getContentResolver();

           ContentValues values = new ContentValues();

           Uri phoneUri = null ;

           // 添加姓名

           values.put(Contacts.People. NAME , name);

           // 映射关系 :1 = 新的联系方式加入 favorites,0 = 新的联系方式不是加入 favorites

           values.put(Contacts.People. STARRED , 1);

           Uri uri = Contacts.People.createPersonInMyContactsGroup (contentResolver, values);

 

           // 添加电话号码

           // 最好的办法是先得到 People 表的 Uri ,然后使用 Uri 的静态方法 withAppendedPath 来获取一个新的 Uri 作为我们新要插入数据的 Uri

           if (phoneNum != null && !phoneNum.trim().equals( "" )) {

              phoneUri = Uri.withAppendedPath (uri, Contacts.People.Phones. CONTENT_DIRECTORY );

              values.clear();

              values.put(Contacts.Phones. TYPE , Contacts.Phones. NUMBER );

              values.put(Contacts.Phones. NUMBER , phoneNum);

              contentResolver.insert(phoneUri, values);

           }

           if (email != null && !email.trim().equals( "" )) {

              // 添加 Email

              Uri emailUri = Uri.withAppendedPath (uri, Contacts.People.ContactMethods. CONTENT_DIRECTORY );

              values.clear();

              // ContactMethods.KIND 是用来区分像 email,im 等等不同联系方式

              values.put(Contacts.ContactMethods. KIND , Contacts. KIND_EMAIL );

              values.put(Contacts.ContactMethods. DATA , email);

              values.put(Contacts.ContactMethods. TYPE , Contacts.ContactMethods. TYPE_HOME );

              contentResolver.insert(emailUri, values);

           }

           if (qq != null && !qq.trim().equals( "" )) {

              // 添加 QQ 号码

              values.clear();

              Uri qqUri = Uri.withAppendedPath (uri, Contacts.People.ContactMethods. CONTENT_DIRECTORY );

              values.put(Contacts.ContactMethods. KIND , Contacts. KIND_IM );

              values.put(Contacts.ContactMethods. DATA , qq);

              values.put(Contacts.ContactMethods. TYPE , Contacts.ContactMethods. TYPE_HOME );

              contentResolver.insert(qqUri, values);

           }

 

       } catch (Exception e) {

           Log.e ( TAG , "InsertContact Error !!!!" );

           return false ;

       }

       return true ;

    }

 

<2> 删除:

public boolean delete(String name) {

       ContentResolver contentResolver = mContext .getContentResolver();

       if (name != null )

           contentResolver.delete(Contacts.People. CONTENT_URI , Contacts.People. NAME + "=?" , new String[] { name });

       else

           contentResolver.delete(Contacts.People. CONTENT_URI , null , null );

       return true ;

    }

<3> 更新 :

更新麻烦一点,需要先按更新条件找到记录所带的 id, 之后再做相应的操作。

ContentResolver contentResolver = mContext.getContentResolver();
   Cursor cusor = null;
   String[] projection = new String[] { Contacts.People._ID, Contacts.People.NAME, Contacts.People.NUMBER };
   cusor = contentResolver.query(Contacts.People.CONTENT_URI, projection, Contacts.People.NAME + "=?", new String[] { oldName }, Contacts.People.NAME + " ASC");
   cusor.moveToFirst();
   ContentValues values = new ContentValues();
   Uri uri = Uri.withAppendedPath(Contacts.People.CONTENT_URI, cusor.getString(cusor.getColumnIndex(Contacts.People._ID)));
   values.put(Contacts.People.NAME, newName);
   values.put(Contacts.People.STARRED, 0);
   values.put(Contacts.Phones.NUMBER, newPhoneNum);
   contentResolver.update(uri, values, null, null);

你可能感兴趣的:(Android入门扫盲之三-------------电话薄)