原理是通过,contentprovider获取系统短信数据库中的字段信息而达到获取内容目的
效果图如下:
具体代码如下:
- package com.internal.message;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import android.app.ListActivity;
- import android.content.ContentResolver;
- import android.database.Cursor;
- import android.database.sqlite.SQLiteException;
- import android.net.Uri;
- import android.os.Bundle;
- import android.provider.ContactsContract;
- import android.provider.ContactsContract.CommonDataKinds.Phone;
- import android.provider.ContactsContract.PhoneLookup;
- import android.util.Log;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- public class QureSms extends ListActivity {
- ListView smslist=null; //显示列表信息
- ArrayList<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();
- List<String> title=new ArrayList<String>(); //短信来源
- List<String> text=new ArrayList<String>(); //短信内容
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- smslist=getListView();
- getSmsInPhone();
- int lengh = title.size();
- for(int i =0; i < lengh; i++) {
- Map<String,Object> item = new HashMap<String,Object>();
- item.put(“title”, title.get(i));
- item.put(“text”, text.get(i));
- mData.add(item);
- }
- SimpleAdapter adapter = new SimpleAdapter(this,mData,android.R.layout.simple_list_item_2,
- new String[]{“title”,”text”},new int[]{android.R.id.text1,android.R.id.text2});
- setListAdapter(adapter);
- }
- /**
- * 获取手机内所以短消息
- */
- private void getSmsInPhone(){
- final String SMS_URI_ALL = “content://sms/”;
- /*final String SMS_URI_INBOX = “content://sms/inbox”;
- final String SMS_URI_SEND = “content://sms/sent”;
- final String SMS_URI_DRAFT = “content://sms/draft”; */
- try{
- ContentResolver cr = getContentResolver();
- String[] projection = new String[]{“_id”, “address”, “person”,
- “body”, “date”, “type”};
- Uri uri = Uri.parse(SMS_URI_ALL);
- Cursor cur = cr.query(uri, projection, null, null, “date desc”);
- if (cur.moveToFirst()) {
- String name;
- String phoneNumber;
- String smsbody;
- String date;
- String type;
- // int nameColumn = cur.getColumnIndex(“person”);
- int phoneNumberColumn = cur.getColumnIndex(“address”);
- int smsbodyColumn = cur.getColumnIndex(“body”);
- int dateColumn = cur.getColumnIndex(“date”);
- int typeColumn = cur.getColumnIndex(“type”);
- do{
- phoneNumber = cur.getString(phoneNumberColumn);
- // name = cur.getString(nameColumn); 这样获取的联系认为空,所以我改用下面的方法获取
- name=getPeopleNameFromPerson(phoneNumber);
- smsbody = cur.getString(smsbodyColumn);
- SimpleDateFormat dateFormat = new SimpleDateFormat(
- “yyyy-MM-dd hh:mm:ss”);
- Date d = new Date(Long.parseLong(cur.getString(dateColumn)));
- date = dateFormat.format(d);
- int typeId = cur.getInt(typeColumn);
- if(typeId == 1){
- type = “接收”;
- } else if(typeId == 2){
- type = “发送”;
- } else {
- type = “草稿”;
- }
- title.add(type+” “+date+’/n’+phoneNumber);
- text.add(name+’/n’+smsbody);
- if(smsbody == null) smsbody = “”;
- } while(cur.moveToNext());
- }
- cur.close();
- cur=null;
- } catch(SQLiteException ex) {
- Log.e(“SQLiteException in getSmsInPhone”, ex.getMessage());
- }
- }
- /**
- * 通过address手机号关联Contacts联系人的显示名字
- * @param address
- * @return
- */
- private String getPeopleNameFromPerson(String address){
- if(address == null || address == “”){
- return null;
- }
- String strPerson = “null”;
- String[] projection = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER};
- Uri uri_Person = Uri.withAppendedPath(ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI, address); // address 手机号过滤
- Cursor cursor = getContentResolver().query(uri_Person, projection, null, null, null);
- if(cursor.moveToFirst()){
- int index_PeopleName = cursor.getColumnIndex(Phone.DISPLAY_NAME);
- String strPeopleName = cursor.getString(index_PeopleName);
- strPerson = strPeopleName;
- }
- else{
- strPerson = address;
- }
- cursor.close();
- cursor=null;
- return strPerson;
- }
- }
怎么样,其实就是获取数据库内容而以,是不是很容易,希望对大家有帮助。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/5610.html