国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程之SMS讀取短信并保存到SQLite的方法

2020-04-11 11:19:16
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程之SMS讀取短信并保存到SQLite的方法。分享給大家供大家參考,具體如下:

Android 之 SMS 短信在Android系統中是保存在SQLite數據庫中的,但不讓其它程序訪問(Android系統的安全機制)

現在我們在讀取手機內的SMS短信,先保存在我們自己定義的SQLite數據庫中,然后讀取SQLite數據庫提取短信,并顯示

SMS短信SQLite存取代碼:

package com.homer.sms; import java.sql.Date; import java.text.SimpleDateFormat; import org.loon.wsi.R; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TableRow.LayoutParams; import android.widget.TextView; /**  * 讀取手機短信, 先保存到SQLite數據,然后再讀取數據庫顯示  *  * @author sunboy_2050  * @since http://blog.csdn.net/sunboy_2050  * @date 2012.03.06  */ public class smsRead4 extends Activity {  TableLayout tableLayout;  int index = 0;  @Override  public void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.main);   tableLayout = (TableLayout) findViewById(R.id.tableLayout);   showSMS();  }  private void showSMS() {   SmsHander smsHander = new SmsHander(this);   smsHander.createSMSDatabase(); // 創建SQLite數據庫   smsHander.insertSMSToDatabase(); // 讀取手機短信,插入SQLite數據庫   Cursor cursor = smsHander.querySMSInDatabase(100); // 獲取前100條短信(日期排序)   cursor.moveToPosition(-1);   while (cursor.moveToNext()) {    String strAddress = cursor.getString(cursor.getColumnIndex("address"));    String strDate = cursor.getString(cursor.getColumnIndex("date"));    String strBody = cursor.getString(cursor.getColumnIndex("body"));    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    Date date = new Date(Long.parseLong(strDate));    strDate = dateFormat.format(date);    String smsTitle = strAddress + "/t/t" + strDate;    String smsBody = strBody + "/n";    Log.i("tableRow", smsTitle + smsBody);    // title Row    TableRow trTitle = new TableRow(this);    trTitle.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));    TextView tvTitle = new TextView(this);    tvTitle.setText(smsTitle);    tvTitle.getPaint().setFakeBoldText(true); // 加粗字體    tvTitle.setTextColor(Color.RED);    tvTitle.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));    trTitle.addView(tvTitle);    tableLayout.addView(trTitle, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));    // body Row    TableRow trBody = new TableRow(this);    trBody.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));    TextView tvBody = new TextView(this);    tvBody.setText(smsBody);    tvBody.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));    trBody.addView(tvBody);    tableLayout.addView(trBody, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));   }   if (!cursor.isClosed()) {    cursor.close();    cursor = null;   }   smsHander.closeSMSDatabase();   index = 0;  }  public class SmsHander {   SQLiteDatabase db;   Context context;   public SmsHander(Context context) {    this.context = context;   }   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)";    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, null, null, "date desc"); // 獲取手機短信   while (cursor.moveToNext()) {    System.out.println("--sms-- : " + cursor.getString(cursor.getColumnIndex("body")));   }   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;    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");    do {     address = cur.getString(iAddress);     person = cur.getString(iPerson);     body = cur.getString(iBody);     date = cur.getString(iDate);     type = cur.getInt(iType);     if (Long.parseLong(date) > lastTime) {      String sql = "insert into sms values(null, ?, ?, ?, ?, ?)";      Object[] bindArgs = new Object[] { address, person, body, date, type };      db.execSQL(sql, bindArgs);     } else {      break;     }    } 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數據庫的前 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);  }  // 關閉數據庫  public void closeSMSDatabase() {   if (db != null && db.isOpen()) {    db.close();    db = null;   }  } }}

運行結果:

完整實例代碼代碼點擊此處本站下載

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新营市| 都昌县| 云阳县| 邛崃市| 东宁县| 余庆县| 彭州市| 颍上县| 天门市| 武穴市| 五莲县| 千阳县| 勐海县| 阜新市| 越西县| 河北省| 谷城县| 新田县| 崇仁县| 固始县| 南丰县| 日照市| 札达县| 慈溪市| 建瓯市| 远安县| 张家港市| 鲁甸县| 阿鲁科尔沁旗| 伊宁县| 阳城县| 高州市| 山阴县| 天台县| 策勒县| 木兰县| 丰台区| 报价| 尉犁县| 陈巴尔虎旗| 县级市|