我使用的是contentObserver
監視sms content provider
的內容多了,我已經把Log.d()
標籤進行調試,並在logcat
標籤是被視爲不止一次意味着onchange()
id被多次調用,我如何防止這種情況發生。我已經在後臺運行的服務中實現了觀察者。 這裏是平變化函數被調用一次
2
A
回答
0
我使用的是內容的觀察者觀看傳出短信,發現該代碼
package com.messageHider;
import android.app.Service;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;
public class smsSentService extends Service {
ContentResolver contentResolver;
Uri uri=Uri.parse("content://sms/");
Handler handler;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
contentResolver=getContentResolver();
contentResolver.registerContentObserver(uri, true, new contentObserver(handler));
Log.d("SENTSERVICE", "Service created");
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Log.d("SENTSERVICE", "Service started");
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
}
public class contentObserver extends ContentObserver
{
public contentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
Cursor cursor=contentResolver.query(uri, null, null, null, null);
cursor.moveToFirst();
String type=cursor.getString(cursor.getColumnIndex("type"));
Log.d("THEMESSAGE", type);
super.onChange(selfChange);
}
}
},如果你試圖從模擬器發送外發SMS,你居然看到它的3個實例,因爲它試圖重新發送文本,但失敗。你是否也看到了入站文本消息?
如果只是出站SMS消息,請查看SMS狀態字段。 -1值表示失敗。
0
您需要覆蓋deliverSelfNotifications()以返回true。
class contentObserver extends ContentObserver { private Context mContext;
public contentObserver(Handler handler) {
super(handler);
}
@Override
public void onChange(boolean selfChange) {
Cursor cursor=contentResolver.query(uri, null, null, null, null);
cursor.moveToFirst();
String type=cursor.getString(cursor.getColumnIndex("type"));
Log.d("THEMESSAGE", type);
super.onChange(selfChange);
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
}
1
只是一個建議:註冊上的onResume方法的內容觀察者和註銷其上的onPause。
相關問題
- 1. 一次平變化
- 2. 火狐平變化不調用函數
- 3. 平變化函數調用Ajax在firefox
- 4. 函數被調用兩次
- 5. jQuery .load()函數只被調用一次
- 6. Javascript keydown函數僅被調用一次
- 7. 。擴展函數只被調用一次
- 8. 函數應該只被調用一次
- 9. 創建一個被一次又一次調用的函數
- 10. 要計數no。次函數被調用?
- 11. 計算函數被調用的次數
- 12. 計算函數被調用的次數
- 13. 函數被調用n + 1次而不是一次 - 爲什麼?
- 14. 函數被一次點擊調用兩次
- 15. 每次使用變量時,PHP函數都會被調用嗎?
- 16. 構造函數被調用多少次?
- 17. 該函數將被調用多少次?
- 18. Nodejs函數被多次調用
- 19. jQuery - 函數被調用三次
- 20. javascript函數被調用兩次
- 21. php析構函數被調用兩次
- 22. android webview函數onPagefinished被調用兩次
- 23. 函數被調用多次(角JS)
- 24. PageViewController委託函數被調用兩次
- 25. Async.waterfall函數被調用兩次
- 26. AngularJS函數被調用很多次?
- 27. 構造函數被再次調用?
- 28. AngularJS ngEnter - 函數被調用兩次
- 29. 函數被事件調用兩次
- 30. 函數是否被多次調用?
我重寫deliverSelfNotifications()然後onChange()被調用兩次。 – 2012-03-09 05:55:44