我是Android開發新手。我想撥打號碼,但我不想將號碼存儲在通話記錄中。通話結束後如何從通話記錄中刪除號碼?通話結束後從通話記錄中刪除通話
回答
首先,您必須設置廣播接收器來檢測手機狀態。這裏是完全一樣的問題:Stackoverflow - Intent to be fired when a call ends?
現在刪除通話記錄條目,這裏是谷歌的第一個鏈接:Call log deletion in Android
在這個例子中,他刪除特定號碼的所有來電進入,但你可以改變查詢刪除特定通話記錄標識的條目。
希望這會有所幫助。 乾杯
我只是試試這個方法對我的HTC其工作的偉大與4.0.3
private void deleteNumber() {
try {
String strNumberOne[] = { "00577698160" };
Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + " = ? ", strNumberOne, "");
boolean bol = cursor.moveToFirst();
if (bol) {
do {
int idOfRowToDelete = cursor.getInt(cursor.getColumnIndex(CallLog.Calls._ID));
getContentResolver().delete(Uri.withAppendedPath(CallLog.Calls.CONTENT_URI, String.valueOf(idOfRowToDelete)), "", null);
} while (cursor.moveToNext());
}
} catch (Exception ex) {
System.out.print("Exception here ");
}
}
即時通訊使用4.2.2反正我有,因爲它不是爲我工作,修改阿夫塔卜的代碼。這可能是一個淺薄的問題,我想要做的就是在傳入呼叫結束後立即更新通話記錄。我想我得給O/S有足夠的時間來更新表之前,我刪除的條目或它不會存在:
private void deleteNumber(String phoneNumber) {
try {
Thread.sleep(4000);
String strNumberOne[] = { phoneNumber };
Cursor cursor = context.getContentResolver().query(
CallLog.Calls.CONTENT_URI, null,
CallLog.Calls.NUMBER + " = ? ", strNumberOne, "");
boolean bol = cursor.moveToFirst();
if (bol) {
do {
int idOfRowToDelete = cursor.getInt(cursor
.getColumnIndex(CallLog.Calls._ID));
context.getContentResolver().delete(
CallLog.Calls.CONTENT_URI,
CallLog.Calls._ID + "= ? ",
new String[] { String.valueOf(idOfRowToDelete) });
} while (cursor.moveToNext());
}
} catch (Exception ex) {
Log.v("deleteNumber",
"Exception, unable to remove # from call log: "
+ ex.toString());
}
}
,並呼籲我在另一個線程運行的功能(因爲即時通訊睡覺):
new Thread() {
public void run() {
deleteNumber(incomingNumber);
}
}.start();
加入睡眠後,在通話結束後嘗試刪除時似乎工作。
UPDATE:後最後的評論意識到,我們可以建立在Android提供通話記錄的URI contentobserver:
public class BlockerContentObserver extends ContentObserver{
private Context context;
private String phoneNumber;
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public BlockerContentObserver(Handler handler,Context context) {
super(handler);
this.context=context;
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
Log.v(Consts.TAG,"has call log changed:"+selfChange);
deleteNumber(phoneNumber);
}
private void deleteNumber(String phoneNumber) {
try {
String strNumberOne[] = { phoneNumber };
Cursor cursor = context.getContentResolver().query(
CallLog.Calls.CONTENT_URI, null,
CallLog.Calls.NUMBER + " = ? ", strNumberOne, "");
boolean bol = cursor.moveToFirst();
if (bol) {
do {
int idOfRowToDelete = cursor.getInt(cursor
.getColumnIndex(CallLog.Calls._ID));
context.getContentResolver().delete(
CallLog.Calls.CONTENT_URI,
CallLog.Calls._ID + "= ? ",
new String[] { String.valueOf(idOfRowToDelete) });
} while (cursor.moveToNext());
}
} catch (Exception ex) {
Log.v(Consts.TAG,
"Exception, unable to remove # from call log: "
+ ex.toString());
}
}
}
現在我們登記聽使用這種在通話記錄數據庫的變化:
mContentObserver = new BlockerContentObserver(new Handler(),context);
然後我們做的方法要麼事件或unreigster註冊:
/*handles the registration of our content observer used for monitoring the call log*/
private void RegisterContentObserver(boolean shouldRegister){
if(shouldRegister)
{
context.getContentResolver().registerContentObserver(
android.provider.CallLog.Calls.CONTENT_URI,
true,
mContentObserver);
}
else {
try {
context.getContentResolver().unregisterContentObserver(mContentObserver);
} catch (IllegalStateException ise) {
// Do Nothing. Observer has already been unregistered.
}
}
}
它不工作,有什麼想法?它確實調用了刪除功能,布爾值爲true,但是號碼在日誌歷史記錄中,因爲 – 2016-11-14 07:29:35
是否設置了contentObserver?通話記錄發生變化時,您是否收到了發送給您的事件? – j2emanue 2016-11-28 00:27:13
早期answsers的修改版本。你並不需要一段時間循環。您也不需要Thread.sleep(4000)
,註冊ContentObserver
爲CallLog.Calls.CONTENT_URI
並在onChange
中調用以下方法。但只是打電話之前請確保您註銷ContentObserver
public static void deleteLastCallLog(Context context, String phoneNumber) {
try {
//Thread.sleep(4000);
String strNumberOne[] = { phoneNumber };
Cursor cursor = context.getContentResolver().query(
CallLog.Calls.CONTENT_URI, null,
CallLog.Calls.NUMBER + " = ? ", strNumberOne, CallLog.Calls.DATE + " DESC");
if (cursor.moveToFirst()) {
int idOfRowToDelete = cursor.getInt(cursor.getColumnIndex(CallLog.Calls._ID));
int foo = context.getContentResolver().delete(
CallLog.Calls.CONTENT_URI,
CallLog.Calls._ID + " = ? ",
new String[] { String.valueOf(idOfRowToDelete) });
}
} catch (Exception ex) {
Log.v("deleteNumber",
"Exception, unable to remove # from call log: "
+ ex.toString());
}
}
- 1. 刪除通話記錄
- 2. 我想知道通話的電話號碼,從通話記錄中刪除
- 3. 通話結束後使用BroadcastListener從Calllog獲取通話時間
- 4. iOS - 通話結束通知
- 5. 如何從通話記錄數據庫中刪除通話表數據
- 6. 黑莓手機:如何獲得通話記錄/刪除通話記錄條目
- 7. 如何刪除通話記錄
- 8. Android。通話記錄
- 9. android通話記錄
- 10. Android從通話記錄中提取通話的時間
- 11. 添加VOIP通話記錄到通話記錄IOS
- 12. 通話結束事件Phonecalltask?
- 13. 檢測結束通話PJSIP
- 14. Android Espresso 2結束通話
- 15. j2me中的通話記錄
- 16. 通話記錄在Android中
- 17. 錄音通話永不結束
- 18. 從HTML啓動Skype通話並記錄通話時間
- 19. 從通話記錄中獲取最後一個通話詳細信息
- 20. 結束通話後致電活動
- 21. 查看通話記錄歷史記錄後的黑莓通話方法?
- 22. 從mulit號碼中刪除通話記錄?
- 23. 如何以編程方式從android中刪除通話記錄?
- 24. 通話,然後從
- 25. 如何在通話結束後讀取通話記錄並存儲在日誌中?
- 26. 通話記錄在通話過程中靜音
- 27. Android完成傳出呼叫後如何刪除通話記錄
- 28. 的Android從通話記錄中
- 29. 星號AMI通話記錄
- 30. 黑莓通話記錄器
請選擇你的答案。 – clauziere 2013-01-08 18:49:39