package blackice.android.product; 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 android.app.AlertDialog; import android.app.ListActivity; import android.content.Context; import android.content.DialogInterface; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class SmsAssistantActivity extends ListActivity { private List<Map<String, Object>> mData; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { /* super.onCreate(savedInstanceState); setContentView(R.layout.main); */ super.onCreate(savedInstanceState); mData = GetSmsData(); MyAdapter adapter = new MyAdapter(this); setListAdapter(adapter); } //菜单操作 @Override public boolean onCreateOptionsMenu(Menu menu) { menu.add(Menu.NONE, Menu.FIRST + 1, 3, "退出").setIcon(android.R.drawable.ic_delete); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case Menu.FIRST + 1: //Toast.makeText(this, "删除菜单被点击了", Toast.LENGTH_LONG).show(); finish(); break; } return false; } //列表点击 @Override protected void onListItemClick(ListView l, View v, int position, long id) { } public void showInfo(){ new AlertDialog.Builder(this) .setTitle("自定义listview") .setMessage("自定义内容!") .setPositiveButton("关闭", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .show(); } public void SendMessageToServer(int position){ Toast.makeText(this, (String)mData.get(position).get("title"), Toast.LENGTH_LONG).show(); } //////////////////////////////////自定义列表/////////////////////////////////////////// public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; public MyAdapter(Context context){ this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return mData.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder=new ViewHolder(); convertView = mInflater.inflate(R.layout.vlist2, null); holder.img = (ImageView)convertView.findViewById(R.id.img); holder.title = (TextView)convertView.findViewById(R.id.title); holder.info = (TextView)convertView.findViewById(R.id.info); holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.img.setBackgroundResource((Integer)mData.get(position).get("img")); holder.title.setText((String)mData.get(position).get("title")); holder.info.setText((String)mData.get(position).get("info")); holder.viewBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SendMessageToServer(position); } }); return convertView; } } public final class ViewHolder{ public ImageView img; public TextView title; public TextView info; public Button viewBtn; } ///////////////////////////////////短信读取////////////////////////////////////////// protected List<Map<String, Object>> GetSmsData() { SmsHander smsHander = new SmsHander(this,"15802023933"); smsHander.createSMSDatabase(); // 创建SQLite数据库 smsHander.insertSMSToDatabase(); // 读取手机短信,插入SQLite数据库 Cursor cursor = smsHander.querySMSInDatabase(100); // 获取前100条短信(日期排序) cursor.moveToPosition(-1); List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); while (cursor.moveToNext()) { //短信内容 //String strAddress = cursor.getString(cursor.getColumnIndex("address")); String strDate = cursor.getString(cursor.getColumnIndex("date")); String strBody = cursor.getString(cursor.getColumnIndex("body")); String strAddress = cursor.getString(cursor.getColumnIndex("address")); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(Long.parseLong(strDate)); strDate = dateFormat.format(date); Map<String, Object> map = new HashMap<String, Object>(); map.put("img", android.R.drawable.ic_menu_add);//图像资源的ID map.put("title", strDate); map.put("info", strBody); list.add(map); } //smsList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getData())); if (!cursor.isClosed()) { cursor.close(); cursor = null; } smsHander.closeSMSDatabase(); return list; } public class SmsHander { SQLiteDatabase db; Context context; String phoneNumber; public SmsHander(Context context) { this.context = context; } public SmsHander(Context context,String mobile){ this.context = context; this.phoneNumber = mobile; } //建库 public void createSMSDatabase() { String sql = "create table if not exists sms(" + "_id integer primary key autoincrement," + "address varchar(255)," + "person varchar(255)," + "body varchar(1024)," + "date varchar(255)," + "type integer,isnew integer)"; db = SQLiteDatabase.openOrCreateDatabase(context.getFilesDir().toString() + "/data.db3", null); // 创建数据库连接 db.execSQL(sql); } // 获取手机短信 private Cursor getSMSInPhone() { Uri SMS_CONTENT = Uri.parse("content://sms/"); String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" }; Cursor cursor = context.getContentResolver().query(SMS_CONTENT, projection, "address=?", new String[]{this.phoneNumber}, "date desc"); // 获取手机短信 //Cursor cursor = context.getContentResolver().query(SMS_CONTENT, projection, null,null, "date desc"); // 获取手机短信 return cursor; } // 保存手机短信到 SQLite 数据库 public void insertSMSToDatabase() { Long lastTime; Cursor dbCount = db.rawQuery("select count(*) from sms", null); dbCount.moveToFirst(); if (dbCount.getInt(0) > 0) { Cursor dbcur = db.rawQuery("select * from sms order by date desc limit 1", null); dbcur.moveToFirst(); lastTime = Long.parseLong(dbcur.getString(dbcur.getColumnIndex("date"))); } else { lastTime = new Long(0); } dbCount.close(); dbCount = null; Cursor cur = getSMSInPhone(); // 获取短信(游标) db.beginTransaction(); // 开始事务处理 if (cur.moveToFirst()) { String address; String person; String body; String date; int type; long intDate; int iAddress = cur.getColumnIndex("address"); int iPerson = cur.getColumnIndex("person"); int iBody = cur.getColumnIndex("body"); int iDate = cur.getColumnIndex("date"); int iType = cur.getColumnIndex("type"); int IsNew = 0; do { address = cur.getString(iAddress); person = cur.getString(iPerson); body = cur.getString(iBody); date = cur.getString(iDate); type = cur.getInt(iType); intDate = Long.parseLong(date); /* */ if((!ExistSms(address,date))&&address.equalsIgnoreCase(this.phoneNumber)){ System.out.println("此日期此短信不在库中"); if (intDate > lastTime) { String sql = "insert into sms values(null, ?, ?, ?, ?, ?,?)"; Object[] bindArgs = new Object[] { address, person, body, date, type,IsNew}; db.execSQL(sql, bindArgs); } else { break; } }else { System.out.println("此日期此短信已在库中或不是此号码"); } } while (cur.moveToNext()); cur.close(); cur = null; db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交 db.endTransaction(); // 结束事务处理 } } // 获取 SQLite 数据库中的全部短信 public Cursor querySMSFromDatabase() { String sql = "select * from sms order by date desc"; return db.rawQuery(sql, null); } // 获取 SQLite 数据库中的最新 size 条短信 public Cursor querySMSInDatabase(int size) { String sql; Cursor dbCount = db.rawQuery("select count(*) from sms", null); dbCount.moveToFirst(); if (size < dbCount.getInt(0)) { // 不足 size 条短信,则取前 size 条 sql = "select * from sms order by date desc limit " + size; } else { sql = "select * from sms order by date desc"; } dbCount.close(); dbCount = null; return db.rawQuery(sql, null); } // 获取 SQLite 数据库中指定号码的最新 size 条短信 public Cursor querySMSInDatabase(int size,String mobile) { String sql; String testSql = "select count(*) from sms where address='"+ mobile +"%'"; Cursor dbCount = db.rawQuery(testSql, null); dbCount.moveToFirst(); if (size < dbCount.getInt(0)) { // 不足 size 条短信,则取前 size 条 sql = "select * from sms where address='"+ mobile ; sql += "' order by date desc"; sql += " limit " + size; } else { sql = "select * from sms where address='"+ mobile +"'"; sql += " order by date desc"; } dbCount.close(); dbCount = null; return db.rawQuery(sql, null); } // 获取 SQLite数据库的前 second秒短信 public Cursor getSMSInDatabaseFrom(long second) { long time = System.currentTimeMillis() / 1000 - second; String sql = "select * from sms order by date desc where date > " + time; return db.rawQuery(sql, null); } //检查此日期此号码是否有过短信 protected boolean ExistSms(String mobile,String time){ String sql = "select * from sms where address='"+mobile+"' and date='" +time +"'"; Cursor dbCount = db.rawQuery(sql, null); return dbCount.getCount()>0; } // 关闭数据库 public void closeSMSDatabase() { if (db != null && db.isOpen()) { db.close(); db = null; } } } }