android 下不同进程是通过ContentResolver共享数据的,下面通过这个类去查询手机上所有联系人的信息和通话记录,包含号码、内容、日期,通话时长等信息

一、获取手机短信信息

/** * 获取所有短信 *  * @return */public String getSmsInPhone() {final String SMS_URI_ALL = "content://sms/";StringBuilder smsBuilder = new StringBuilder();try {Uri uri = Uri.parse(SMS_URI_ALL);String[] projection = new String[] { "_id", "address", "person","body", "date", "type" };Cursor cur = getContentResolver().query(uri, projection, null,null, "date desc"); // 获取手机内部短信if (cur.moveToFirst()) {int index_Address = cur.getColumnIndex("address");int index_Person = cur.getColumnIndex("person");int index_Body = cur.getColumnIndex("body");int index_Date = cur.getColumnIndex("date");int index_Type = cur.getColumnIndex("type");do {String strAddress = cur.getString(index_Address);int intPerson = cur.getInt(index_Person);String strbody = cur.getString(index_Body);long longDate = cur.getLong(index_Date);int intType = cur.getInt(index_Type);SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");Date d = new Date(longDate);String strDate = dateFormat.format(d);String strType = "";if (intType == 1) {strType = "接收";} else if (intType == 2) {strType = "发送";} else {strType = "null";}smsBuilder.append("[ ");smsBuilder.append(strAddress + ", ");smsBuilder.append(intPerson + ", ");smsBuilder.append(strbody + ", ");smsBuilder.append(strDate + ", ");smsBuilder.append(strType);smsBuilder.append(" ]\n\n");} while (cur.moveToNext());if (!cur.isClosed()) {cur.close();cur = null;}} else {smsBuilder.append("no result!");} // end ifsmsBuilder.append("getSmsInPhone has executed!");} catch (SQLiteException ex) {Log.d("SQLiteException in getSmsInPhone", ex.getMessage());}return smsBuilder.toString();}

二、获取通话记录


/** * 获取通话记录 */private void GetCallsInPhone() {String result = null;Cursor cursor = getContentResolver().query(Calls.CONTENT_URI,new String[] { Calls.DURATION, Calls.TYPE, Calls.DATE,Calls.NUMBER }, null, null, Calls.DEFAULT_SORT_ORDER);boolean hasRecord = cursor.moveToFirst();int count = 0;String strPhone = "";String date;while (hasRecord) {int type = cursor.getInt(cursor.getColumnIndex(Calls.TYPE));long duration = cursor.getLong(cursor.getColumnIndex(Calls.DURATION));strPhone = cursor.getString(cursor.getColumnIndex(Calls.NUMBER));SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");Date d = new Date(Long.parseLong(cursor.getString(cursor.getColumnIndex(Calls.DATE))));date = dateFormat.format(d);result = result + "phone :" + strPhone + ",";result = result + "date :" + date + ",";result = result + "time :" + duration + ",";switch (type) {case Calls.INCOMING_TYPE:result = result + "type :呼入";break;case Calls.OUTGOING_TYPE:result = result + "type :呼出";default:break;}result += "\n";count++;hasRecord = cursor.moveToNext();}Log.i(TAG, result);textView.setText(result);}

三、获取联系人

/** * 获取联系人 */private void getContact2() {String string = "";int count = 0;ContentResolver resolver = getApplicationContext().getContentResolver();Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);while (cursor.moveToNext()) {// 取得联系人的名字索引int nameIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);String contact = cursor.getString(nameIndex);string += contact + ":";// 取得联系人的ID索引值String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));// 查询该位联系人的电话号码,类似的可以查询email,photoCursor phone = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "+ contactId, null, null);// 第一个参数是确定查询电话号,第三个参数是查询具体某个人的过滤值// 一个人可能有几个号码while (phone.moveToNext()) {String strPhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));string = string + strPhoneNumber + " ;";}string += "\n";count++;phone.close();}cursor.close();Log.i(TAG, String.valueOf(count));// 设置显示内容textView.setText(string);}
最后需要注意的是要启动访问权限

           

源码下载地址:http://download.csdn.net/detail/leokelly001/8129689


更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  3. android 获取唯一标识
  4. android拍照与读取相册
  5. Android(安卓)热点开关状态的判断和获取热点ssid
  6. Android软键盘适配问题
  7. AIR Native Extension的使用(Android)一 : 打包ane
  8. android之BitMap
  9. Android中GPS定位的简单应用

随机推荐

  1. Android studio 正确运行java-library的g
  2. recovery 强制执行恢复出厂设置(Rescue Pa
  3. 26. android Notification 状态栏通知
  4. Android原生C语言捕获按键
  5. android实现图片圆角化实现三种方法
  6. android设置全屏时,windowSoftInputMode设
  7. Android判断Service是否运行
  8. 关于:问题和资料
  9. Android使用Retrofit2.0和RxJava2.0处理
  10. Android out of memory应注意的地方