Android中讀取簡訊資訊

來源:互聯網
上載者:User

Android中讀取的簡訊檔案有

[java]
/**
 * 所有的簡訊
 */ 
public static final String SMS_URI_ALL = "content://sms/"; 
/**
 * 收件匣簡訊
 */ 
public static final String SMS_URI_INBOX = "content://sms/inbox"; 
/**
 * 寄件匣簡訊
 */ 
public static final String SMS_URI_SEND = "content://sms/sent"; 
/**
 * 草稿箱簡訊
 */ 
public static final String SMS_URI_DRAFT = "content://sms/draft"; 

讀取的簡訊資訊有:
    _id:簡訊序號,如100   
*   thread_id:對話的序號,如100,與同一個手機號互發的簡訊,其序號是相同的   
*   address:寄件者地址,即手機號,如+8613811810000   
*   person:寄件者,如果寄件者在通訊錄中則為具體姓名,陌生人為null   
*   date:日期,long型,如1256539465022,可以對日期顯示格式進行設定   
*   protocol:協議0SMS_RPOTO簡訊,1MMS_PROTO多媒體訊息      read:是否閱讀0未讀,1已讀   
*   status:簡訊狀態-1接收,0complete,64pending,128failed   
*   type:簡訊類型1是接收到的,2是已發出      body:簡訊具體內容   
*   service_center:簡訊服務中心號碼編號,如+8613800755500
下面我們可以先建立一個SmsInfo來提取各種資訊如下:

[java]
package com.pei.info; 
 
/**
 * class name:SmsInfo<BR>
 * class description:擷取簡訊各種資訊的類<BR>
 * PS: <BR>
 * Date:2012-3-19<BR>
 * 
 * @version 1.00
 * @author CODYY)peijiangping
 */ 
public class SmsInfo { 
    /**
     * 簡訊內容
     */ 
    private String smsbody; 
    /**
     * 傳送簡訊的電話號碼
     */ 
    private String phoneNumber; 
    /**
     * 傳送簡訊的日期和時間
     */ 
    private String date; 
    /**
     * 傳送簡訊人的姓名
     */ 
    private String name; 
    /**
     * 簡訊類型1是接收到的,2是已發出
     */ 
    private String type; 
 
    public String getSmsbody() { 
        return smsbody; 
    } 
 
    public void setSmsbody(String smsbody) { 
        this.smsbody = smsbody; 
    } 
 
    public String getPhoneNumber() { 
        return phoneNumber; 
    } 
 
    public void setPhoneNumber(String phoneNumber) { 
        this.phoneNumber = phoneNumber; 
    } 
 
    public String getDate() { 
        return date; 
    } 
 
    public void setDate(String date) { 
        this.date = date; 
    } 
 
    public String getName() { 
        return name; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public String getType() { 
        return type; 
    } 
 
    public void setType(String type) { 
        this.type = type; 
    } 

然後就是封裝類,讀取資訊內容SmsContent.java
[java]
package com.pei.util; 
 
import java.util.ArrayList; 
import java.util.List; 
 
import com.pei.info.SmsInfo; 
 
import android.app.Activity; 
import android.database.Cursor; 
import android.net.Uri; 
 
/**
 * class name:SmsChoose<BR>
 * class description:擷取手機中的各種簡訊資訊<BR>
 * PS: 需要許可權 <uses-permission android:name="android.permission.READ_SMS" /><BR>
 * Date:2012-3-19<BR>
 * 
 * @version 1.00
 * @author CODYY)peijiangping
 */ 
public class SmsContent { 
    private Activity activity;//這裡有個activity對象,不知道為啥以前好像不要,現在就要了。自己試試吧。 
    private Uri uri; 
    List<SmsInfo> infos; 
 
    public SmsContent(Activity activity, Uri uri) { 
        infos = new ArrayList<SmsInfo>(); 
        this.activity = activity; 
        this.uri = uri; 
    } 
 
    /**
     * Role:擷取簡訊的各種資訊 <BR>
     * Date:2012-3-19 <BR>
     * 
     * @author CODYY)peijiangping
     */ 
    public List<SmsInfo> getSmsInfo() { 
        String[] projection = new String[] { "_id", "address", "person", 
                "body", "date", "type" }; 
        Cursor cusor = activity.managedQuery(uri, projection, null, null, 
                "date desc"); 
        int nameColumn = cusor.getColumnIndex("person"); 
        int phoneNumberColumn = cusor.getColumnIndex("address"); 
        int smsbodyColumn = cusor.getColumnIndex("body"); 
        int dateColumn = cusor.getColumnIndex("date"); 
        int typeColumn = cusor.getColumnIndex("type"); 
        if (cusor != null) { 
            while (cusor.moveToNext()) { 
                SmsInfo smsinfo = new SmsInfo(); 
                smsinfo.setName(cusor.getString(nameColumn)); 
                smsinfo.setDate(cusor.getString(dateColumn)); 
                smsinfo.setPhoneNumber(cusor.getString(phoneNumberColumn)); 
                smsinfo.setSmsbody(cusor.getString(smsbodyColumn)); 
                smsinfo.setType(cusor.getString(typeColumn)); 
                infos.add(smsinfo); 
            } 
            cusor.close(); 
        } 
        return infos; 
    } 

在提供一個listview來顯示簡訊內容:
[java]
package com.pei.activity; 
 
import java.util.List; 
 
import com.pei.fixed.AllFinalInfo; 
import com.pei.info.SmsInfo; 
import com.pei.util.SmsContent; 
import android.app.Activity; 
import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
 
/**
 * class name:SmsListActivity<BR>
 * class description:顯示簡訊的列表<BR>
 * PS: <BR>
 * Date:2012-3-19<BR>
 * 
 * @version 1.00
 * @author CODYY)peijiangping
 */ 
public class SmsListActivity extends Activity { 
    private ListView listview; 
    private List<SmsInfo> infos; 
 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.sms); 
        Uri uri = Uri.parse(AllFinalInfo.SMS_URI_INBOX); 
        SmsContent sc = new SmsContent(this, uri); 
        infos = sc.getSmsInfo(); 
        listview = (ListView) this.findViewById(R.id.ListView_Sms); 
        listview.setAdapter(new SmsListAdapter(this)); 
    } 
 
    class SmsListAdapter extends BaseAdapter { 
        private LayoutInflater layoutinflater; 
        private View myview; 
 
        public SmsListAdapter(Context c) { 
            layoutinflater = LayoutInflater.from(c); 
        } 
 
        @Override 
        public int getCount() { 
            // TODO Auto-generated method stub 
            return infos.size(); 
        } 
 
        @Override 
        public Object getItem(int position) { 
            // TODO Auto-generated method stub 
            return null; 
        } 
 
        @Override 
        public long getItemId(int position) { 
            // TODO Auto-generated method stub 
            return 0; 
        } 
 
        @Override 
        public View getView(int position, View convertView, ViewGroup parent) { 
            if (convertView == null) { 
                myview = layoutinflater.inflate(R.layout.smsitem, null); 
            } 
            TextView body = (TextView) myview 
                    .findViewById(R.id.TextView_SmsBody); 
            TextView name = (TextView) myview 
                    .findViewById(R.id.TextView_SmsName); 
            body.setText(infos.get(position).getSmsbody()); 
            name.setText(infos.get(position).getName()); 
            return myview; 
        } 
 
    } 

這樣你就可以隨意的讀取各種簡訊的各種內容了,顯示也十分方便。方法還可以繼續封裝。有待改進。


摘自  裴裴的Android學習和分享

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.