路,在脚下!

Android之修改短信程序

分类:android

android 短信

今天搞了个小程序,可以修改你自己android手机的任何一条短信。

直接进入正题,先放两张效果图:

主界面就是四个按钮加一个显示短信的listview:

<LinearLayout xmlns:android=""xmlns:tools=""android:id="@+id/linearlayout"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btnAll"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="所有短信"/><Buttonandroid:id="@+id/btnInbox"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="收件箱短信"/></LinearLayout><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/btnSend"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="发件箱短信"/><Buttonandroid:id="@+id/btnDraft"android:layout_weight="1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="草稿箱短信"/></LinearLayout><ListViewandroid:id="@+id/listview"android:layout_width="fill_parent"android:layout_height="wrap_content"android:clickable="true"/></LinearLayout>还有一个StaticValues类放置一些常量package com.jackchan.sms;public class StaticValues {//android系统短信数据库的字段public static final String _ID = "_id";public static final String PERSON = "person";public static final String BODY = "body";public static final String ADDRESS = "address";public static final String DATE = "date";public static final String TYPE = "type";}主类代码如下,重点在getSmsInPhone()这个方法,通过ContentResolver分别传入收件箱、发件箱、草稿的Uri获取你想要的字段,

sms相关的字段如下:

_id 一个自增字段,从1开始 ,每条短信_id都不一样,根据这个唯一性可以修改短信thread_id 序号,同一发信人的id相同address 发件人手机号码person 联系人列表里的序号,陌生人为nulldate 发件日期protocol 协议,分为: 0 SMS_RPOTO, 1 MMS_PROTOread 是否阅读 0未读, 1已读status 状态 -1接收,,0 complete, 64 pending, 128 failedtype ALL = 0; INBOX = 1; SENT = 2; DRAFT = 3; OUTBOX = 4; FAILED = 5; QUEUED = 6;body 短信内容service_center 短信服务中心号码编号subject 短信的主题reply_path_present TP-Reply-Path

package com.jackchan.sms;import java.sql.Date;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.jackchan.sms.ChangeSMSWindow.onOkClick;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.database.sqlite.SQLiteException;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.Gravity;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.ListView;public class SMS extends Activity {private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); //已发送信息列表private SMSAdapter adapter;private Button btnAll;private Button btnInbox;private Button btnSend;private Button btnDraft;public static String url;private ListView listView;private final String SMS_URI_ALL = "content://sms/";private final String SMS_URI_INBOX = "content://sms/inbox";private final String SMS_URI_SEND = "content://sms/sent";private final String SMS_URI_DRAFT = "content://sms/draft";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initComponet();setBtnClick();url = SMS_URI_ALL;//默认获取全部短信adapter = new SMSAdapter(this, getSmsInPhone());listView.setAdapter(adapter);listView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {// TODO Auto-generated method stubChangeSMSWindow change = new ChangeSMSWindow(SMS.this, list.get(arg2).get(StaticValues.BODY).toString(),(Long) list.get(arg2).get(StaticValues._ID));change.setOkClick(new onOkClick() {@Overridepublic void dataChange() {listChange();}});change.showAtLocation(listView,//LayoutInflater.from(context).inflate(R.layout.main, null),Gravity.CENTER_HORIZONTAL|Gravity.CENTER_VERTICAL,0, 0);}});}private void initComponet(){listView = (ListView)findViewById(R.id.listview);btnAll = (Button)findViewById(R.id.btnAll);btnInbox = (Button)findViewById(R.id.btnInbox);btnSend = (Button)findViewById(R.id.btnSend);btnDraft = (Button)findViewById(R.id.btnDraft);}private void setBtnClick(){btnAll.setOnClickListener(click);btnInbox.setOnClickListener(click);btnSend.setOnClickListener(click);btnDraft.setOnClickListener(click);}/** listview数据发生改变*/private void listChange(){adapter.clearList();adapter.changeList(getSmsInPhone());adapter.notifyDataSetChanged();}private btnClick click = new btnClick();private class btnClick implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(v == btnAll){url = SMS_URI_ALL;}else if(v == btnInbox){url = SMS_URI_INBOX;}else if(v == btnSend){url = SMS_URI_SEND;}else if(v == btnDraft){url = SMS_URI_DRAFT;}listChange();}}/** 获取指定类型短信*/public List<Map<String, Object>> getSmsInPhone(){try{ContentResolver cr = getContentResolver();String[] projection = new String[]{"_id", "address", "person","body", "date", "type"};Uri uri = Uri.parse(url);Cursor cur = cr.query(uri, projection, null, null, "date desc");if (cur.moveToFirst()) {long id;String name;String phoneNumber;String smsbody;String date;String type;int idColumn = cur.getColumnIndex(StaticValues._ID);int nameColumn = cur.getColumnIndex(StaticValues.PERSON);int phoneNumberColumn = cur.getColumnIndex(StaticValues.ADDRESS);int smsbodyColumn = cur.getColumnIndex(StaticValues.BODY);int dateColumn = cur.getColumnIndex(StaticValues.DATE);int typeColumn = cur.getColumnIndex(StaticValues.TYPE);do{id = cur.getLong(idColumn);name = cur.getString(nameColumn);phoneNumber = cur.getString(phoneNumberColumn);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 if(typeId == 3){type = "草稿";} else {type = "";}if(smsbody == null)smsbody = "";Map<String, Object> map = new HashMap<String, Object>();map.put(StaticValues._ID, id);map.put(StaticValues.PERSON, name);map.put(StaticValues.ADDRESS, phoneNumber);map.put(StaticValues.BODY, smsbody);map.put(StaticValues.DATE, date);map.put(StaticValues.TYPE, type);list.add(map);}while(cur.moveToNext());cur.close();}} catch(SQLiteException ex) {Log.d("SQLiteException in getSmsInPhone", ex.getMessage());}return list;} }沿途跟着一条河,你看着它在晨光暮霭中变换着色彩,

路,在脚下!

相关文章:

你感兴趣的文章:

标签云: