當前位置:首頁 » 安卓系統 » android監聽簡訊庫

android監聽簡訊庫

發布時間: 2022-12-31 00:49:48

㈠ android怎樣實現用代碼從資料庫獲取簡訊內容等等

資料庫獲取代碼如下:
String databaseFilename = DATABASE_PATH + "/" + DATABASE_NAME;

File dir = new File(DATABASE_PATH);
if (!dir.exists())
dir.mkdir();
if (!(new File(databaseFilename)).exists()) {
InputStream is = context.getResources().openRawResource(R.raw.jobexam);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
db = sqliteDatabase.openOrCreateDatabase(databaseFilename, null);

㈡ 如何查看android軟體的行為

引言

在一個家庭中,老、幼兩類群體的安全是家庭成員比較擔心的,老人外出購物走丟,初中生上課期間去網吧等事件頻繁發生。針對此類安全問題,本文基於Android設計出位置實時監控系統。由於在Android系統手機上開發,可提高便捷性和普及程度,降低成本。

1 系統總體設計

本系統在整體上可以分成兩大部分,即被監控端和監控端。被監控端和監控端都是在基於Android操作系統的智能手機上開發實現。該系統內數據傳輸可採用WiFi、GPRS或者3G網路等通信模式,定位採用的GPS衛星定位的方式。然後利用位置分析資料庫進行位置數據分析,在手機上載入電子地圖,直觀地顯示被監控端的位置(若出現在非正常區域則進行提醒監控端)。系統總體的結構圖如圖1所示。

3.3 程序實現

一是接收發送過來的經緯度信息。本設計為直觀顯示經緯度信息,在載入地圖的同時,顯示在「簡訊內容:」部分。其接收功能實現代碼如下:

/**
* 監聽收到的簡訊
*/
private final class SmsObserver extends ContentObserver {
public SmsObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
ContentResolver resolver = getContentResolver();
//查到發出的簡訊
Uri uri = Uri.parse("content://sms/inbox");
Cursor cursor = resolver.query(uri, new String[] { "address", "body" }, null, null, "_id desc limit 1");
if (cursor.moveToNext()) {
String address = cursor.getString(0);
if (address.equals("此處為被監控對象的手機號碼")) {
String body = cursor.getString(1);
smsContent.setText(body);
SearchButtonProcess(body);
}
}
}

二是實現電子地圖上的位置顯示。僅僅有經緯度信息,監控者無法直觀地了解被監控對象的方位。所以在監控端軟體上,載入網路地圖實現被監控對象的實時監控,運行結果如圖8所示。其實現代碼如下:

/**
* 對收到的地點發起搜索並顯示在地圖上
*
* @param v
*/
private void SearchButtonProcess(String smsContent) {
try {
// 逗號分隔過濾得到經緯度字元串
String[] point = smsContent.split(",");
// 獲取到的字元串需要轉化成long,然後long值需要乘1e6後轉化為int
String latitudeStr = point[0];
String longitudeStr = point[1];
GeoPoint ptCenter = new GeoPoint((int)(Float.valueOf(latitudeStr)*1e6),
(int)(Float.valueOf(longitudeStr)*1e6));
// 反Geo搜索
mSearch.reverseGeocode(ptCenter);
} catch (Throwable e) {
Toast.makeText(MainActivity.this, "SearchButtonProcess Error", Toast.LENGTH_LONG).show();
}

4 系統測試結果

如果被監控端和監控端都採用Android手機平台,可以充分利用Android提供的豐富的介面,使系統具有更好的擴展性和實用性。該系統進一步改進還可以實現拍照、截圖、標注和查看軌跡等功能。

5 結束語

該系統結構簡單、功能明確,軟體界面方便美觀,設計完成後該系統在自己家庭中進行試用。經過實際生活中的運用證明,該系統可對家中的老人或者孩子進行位置的實時監控,並根據其位置信息家庭成員可以判斷是否正常,及時打電話確保安全。此外在本系統的設計基礎上,添加LED的顯示模塊也可以應用到城市公交當中去,為乘客向導系統(PIS,Passenger Information System)的建立提供了一些方法和思路。還可以通過司機的Android操作系統手機,實現遠程運輸車輛的全程監控,極大地降低成本。

㈢ android開發中,怎樣將Broadcast Receiver監聽到的簡訊內容顯示在一個Activity中

在你要顯示的activity里注冊一個廣播,通過廣播獲取數據後直接textview.setText("簡訊內容啊")

㈣ 為什麼無法使用android.provider.Telephony.SMS

即使去監聽廣播也不一定能攔截到簡訊的,很久之前我們都是去直接監聽簡訊資料庫的變化的。
雖然不是很清楚你找來幹嘛,但是這應該是一個標識,而不是類,所以開發文檔應該是不會寫的

㈤ android 資料庫怎麼監聽數據變化

在android中經常會用到改變資料庫內容後再去使用資料庫更新的內容,很多人會重新去query一遍,但是這樣的問題就是程序會特別占內存,而且有可能會摟關cursor而導致程序內存未釋放等等。其實android內部提供了一種ContentObserver的東西來監聽資料庫內容的變化。

ContentObserver的構造函數需要一個參數Hanlder,因為ContentObserver內部使用了一個實現Runnable介面的內部類NotificationRunnable,來實現資料庫內容的變化。需要使用hanlder去post消息。注冊ContentObserver的方法是:getContentResolver().registerContentObserver(uri, notifyForDescendents, observer).

上面3個參數為:uri----Uri類型,是需要監聽的資料庫的uri.

notifyForDescendents---boolean true的話就會監聽所有與此uri相關的uri。false的話則是直接特殊的uri才會監聽。一般都設置為true.

observer-----ContentObserver 就是需要的contentobserver.

初始化一個ContentObserver對象,重載onChange(boolean ),在這個方法里去操作資料庫的使用,針對變化後的使用。

寫了一個小demo,可以參考下。提示這種監聽方式必須是contentprovider才能使用,因為contentprovider有uri.簡單的那種sqlite資料庫沒有uri是使用不了的。

下面demo操作的是在一個activityA里點擊button跳轉至另外一個activityB,在B中點擊button往資料庫中加數據,加完後關閉B回到A。A的button的文字自動變化設置到資料庫中的字元串。[code]

packagety.com.lto;
02
03importandroid.app.Activity;
04importandroid.content.Intent;
05importandroid.database.ContentObserver;
06importandroid.os.Bundle;
07importandroid.os.Handler;
08importandroid.view.View;
09importandroid.widget.Button;
10
{
12privateButtontestBtn;
13
14@Override
15protectedvoidonCreate(BundlesavedInstanceState){
16super.onCreate(savedInstanceState);
17setContentView(R.layout.listen_data_test);
18getContentResolver().registerContentObserver(DataChangeProvider.CONTENT_URI,
19true,cob);
20
21testBtn=(Button)findViewById(R.id.test_btn);
22testBtn.setOnClickListener(newView.OnClickListener(){
23
24publicvoidonClick(Viewv){
25Intentin=newIntent(ListenDataTest.this,DataChangeTest.class);
26startActivity(in);
27
28}
29});
30
31}
32
33privateContentObservercob=newContentObserver(newHandler()){
34
35@Override
(){
37returnsuper.deliverSelfNotifications();
38}
39
40@Override
41publicvoidonChange(booleanselfChange){
42super.onChange(selfChange);
43testBtn.setText(DataUtils.getChangeName(getApplicationContext()));
44}
45
46};
47
48@Override
49protectedvoidonDestroy(){
50super.onDestroy();
51getContentResolver().unregisterContentObserver(cob);
52}
53
54
55}
[code]01packagety.com.lto;
02
03importandroid.app.Activity;
04importandroid.content.ContentValues;
05importandroid.content.Intent;
06importandroid.database.ContentObservable;
07importandroid.database.ContentObserver;
08importandroid.os.Bundle;
09importandroid.os.Handler;
10importandroid.view.View;
11importandroid.widget.Button;
12
{
14privateButtondataBtn;
15DataSqlitemDataSqlite;
16@Override
17protectedvoidonCreate(BundlesavedInstanceState){
18super.onCreate(savedInstanceState);
19setContentView(R.layout.data_change_test);
20dataBtn=(Button)findViewById(R.id.data_test_btn);
21mDataSqlite=newDataSqlite(this);
22dataBtn.setOnClickListener(newView.OnClickListener(){
23
24publicvoidonClick(Viewv){
25ContentValuescon=newContentValues();
26con.put("name","數據變化了");
27getContentResolver().insert(DataChangeProvider.CONTENT_URI,con);
28finish();
29}
30});
31}
32}
[code]viewsourceprint?
001packagety.com.lto;
002
003
004importandroid.content.ContentProvider;
005importandroid.content.ContentUris;
006importandroid.content.ContentValues;
007importandroid.content.Context;
008importandroid.content.UriMatcher;
009importandroid.database.Cursor;
010importandroid.database.SQLException;
011importandroid.database.sqlite.SQLiteDatabase;
012importandroid.database.sqlite.SQLiteOpenHelper;
013importandroid.database.sqlite.SQLiteQueryBuilder;
014importandroid.database.sqlite.SQLiteDatabase.CursorFactory;
015importandroid.net.Uri;
016importandroid.text.TextUtils;
017
{
;
=1;
_ID=2;
=newUriMatcher(UriMatcher.NO_MATCH);
_URI=Uri.parse("content://ty.com.lto/test");
024
025static{
026sURLMatcher.addURI("ty.com.lto","test",ALARMS);
027sURLMatcher.addURI("ty.com.lto","test/#",ALARMS_ID);
028}
029
{
_DATABASE="test.db";
=1;
033
034publicDatabaseHelper(Contextcontext){
035super(context,TEST_DATABASE,null,VERSION);
036//TODOAuto-generatedconstructorstub
037}
038
039
040@Override
041publicvoidonCreate(SQLiteDatabasedb){
042Stringsql="CREATETABLE"+"test"+"("+
043"_idINTEGERPRIMARYKEY,"+
044"nameTEXT"+
045");";
046db.execSQL(sql);
047}
048
049@Override
050publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
051Stringsql="DROPTABLEIFEXIST"+TEST_DATABASE;
052db.execSQL(sql);
053onCreate(db);
054}
055
056}
057
058publicDataChangeProvider(){
059}
060
061@Override
062publicintdelete(Uriurl,Stringwhere,String[]whereArgs){
063SQLiteDatabasedb=mOpenHelper.getWritableDatabase();
064intcount;
065longrowId=0;
066switch(sURLMatcher.match(url)){
067caseALARMS:
068count=db.delete("test",where,whereArgs);
069break;
070caseALARMS_ID:
071Stringsegment=url.getPathSegments().get(1);
072

㈥ android簡訊驗證碼怎麼利用contentobserve自動讀取

android上獲取簡訊信息主要有BroadcastReceiver方式與資料庫方式,要實時的話就BroadcastReceiver比較方便

public class SMSReceiver extends BroadcastReceiver{
private String verifyCode="";
public static final String TAG = "SMSReceiver";
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent){
if (intent.getAction().equals(SMS_RECEIVED_ACTION)){
SmsMessage[] messages = getMessagesFromIntent(intent);
for (SmsMessage message : messages){
Log.i(TAG, message.getOriginatingAddress() + " : " +
message.getDisplayOriginatingAddress() + " : " +
message.getDisplayMessageBody() + " : " +
message.getTimestampMillis());
String smsContent=message.getDisplayMessageBody();
Log.i(TAG, smsContent);
writeFile(smsContent);//將簡訊內容寫入SD卡
}
}
}
public final SmsMessage[] getMessagesFromIntent(Intent intent){
Object[] messages = (Object[]) intent.getSerializableExtra("ps");
byte[][] pObjs = new byte[messages.length][];
for (int i = 0; i < messages.length; i++)
{
pObjs[i] = (byte[]) messages[i];
}
byte[][] ps = new byte[pObjs.length][];
int pCount = ps.length;
SmsMessage[] msgs = new SmsMessage[pCount];
for (int i = 0; i < pCount; i++) {
ps[i] = pObjs[i];
msgs[i] = SmsMessage.createFromP(ps[i]);
}
return msgs;
}
//將簡訊內容寫到SD卡上的文件里,便於將文件pull到PC,這樣可方便其它如WWW/WAP平台的自動化
@SuppressLint("SdCardPath")
public void writeFile(String str){
String filePath="/mnt/sdcard/verifyCode.txt";
byte [] bytes = str.getBytes();
try{
File file=new File(filePath);
file.createNewFile();
FileOutputStream fos=new FileOutputStream(file);
fos.write(bytes);
fos.close();
}catch(IOException e){
e.printStackTrace();
}
}

如此當有簡訊收到時就可以將簡訊內容寫到SD卡中的文件里
在另一個java類中寫個讀取文件內容的方法,並在寫測試用例過程中,將得到的String按驗證碼的具體位置截取即可。

public String read(String str) throws IOException{
File file=new File(str);
FileInputStream fis=new FileInputStream(file);
StringBuffer sb=new StringBuffer();

BufferedInputStream bis=new BufferedInputStream(fis);
BufferedReader read = new BufferedReader (new InputStreamReader(bis));
int c=0;
while ((c=read.read())!=-1) {
sb.append((char) c);
}
read.close();
bis.close();
fis.close();
Log.i(TAG, sb.toString());
String verify=sb.toString();
return verify;
}

最後需要在manifest中增加申明,且注冊許可權

<receiver android:name="com.cplatform.surfdesktop.test.util.SMSReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS"/>

測試過程中需要用到簡訊驗證碼時就可以實時獲取了

㈦ android開發 接收簡訊時在哪個文件寫入資料庫

data文件加下,具體:/data/data/com.android.providers.telephony/dababases/mmssms.db

㈧ android 簡訊在framework中嗎

當新接收到的簡訊插入資料庫以後,因為資料庫改變了,UI會收到onContentChanged事件,而ComposeMessageActivity注冊了MessageListAdapter.OnDataSetChangedListener監聽,所以會觸發onContentChanged()方法,在此方法中調用startMsgListQuery()開始查詢,查詢結束後在BackgroundQueryHandler的onQueryComplete()中changeCursor,重新綁定MessageItem。至此,一條簡訊的接收處理完成。

㈨ Android的信息應用中mmsms.db、telephony.db、HbpcdLookup.db的作用分別是什麼

首先明了未接信息的資料庫的位置在系統
/data/data/com.android.providers.telephony/databases/mmssms.db 包下。
希望大家能夠結合源碼中的
1. Telephony.java (主要講這些表裡有哪些欄位)
2. MmsSmsProvider.java (ContentProvider被重寫)
3. MmsProvider.java (ContentProvider被重寫)
4. SmsProvider.java (ContentProvider被重寫)
5. Conversation.java 描述 mmssms資料庫的Threads表

前一段時間在開發項目時,遇到這樣的需求,要求將 未接簡訊,未接彩信的信息顯示在Widget上。當我們查詢mmssms.db資料庫時,這其中涉及到以下幾張表:
1. threads表
2. 存放簡訊的表(sms表)
3. 存放彩信的表(p表,part表)
4. 存放phone number的表( Canonical_address表)

能否將未接簡訊,彩信信息直接顯示在Widget上,關鍵是必須要搞清出這4張表之間的表關系。根據我的編碼經驗,先拋磚引玉地在這里講解出我的理解…

對於這幾張表,我只簡單地列出關鍵欄位,省略部分均用(….)代替。
以下的 」信息」 指代(mms,sms)

具體的內容你可以看看原文啊:http://blog.sina.com.cn/s/blog_74c22b210100r0kn.html

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:631
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:360
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:76
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:301
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:789
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:339
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:204
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:804
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:358
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:584