我正试着接到我刚打的电话。为此,我使用了BroadcastReceiver和IntentServices。
事情是这样发生的:
在我的SharedPreferences,类中,我检查状态是否是OFFHOOK,如果是,我在BroadcastReceiver中设置了标志,所以当状态变为空闲时,我检查这个标志是否仍然是true,如果是,我将调用CallLog *ContentProvider*中的IntentService,并获取这样的lates数据:
cursor = getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI, mCursorFields, null, null, android.provider.CallLog.Calls.DATE + " DESC");
cursor.moveToFirst();
cursor.getString(cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
...到目前为止,唯一的问题是:
“它没有得到最新的条目。它得到下一个条目,即在此之前进行的调用。”。
所以,如果我之前打了个电话给person 'X',那么在CallLog中,就会注册这个呼叫person 'X‘。现在,如果我给人'Y‘打个电话,而不是给人'Y’打电话,它就是给人'X‘的电话,这是我之前打的电话。
我不知道会发生什么。它在使用ContentObserver时工作得很好,但我认为用BroadcastReceiver.构建它会更有效率。
有什么想法吗?
提前谢谢。
只是一个关于使用ContentObserver:的评论
使用ContentObserver的问题是,如果我更改联系人的名称,它将检测到CallLog中的更改,因为具有旧名称的CallLog中的用户将被更新为新名称,并且会发生更改并调用该类。为此,我需要进行验证,以检查它是否真的改变了,我认为这很烦人。
发布于 2011-10-12 04:58:32
试着把电话延迟一点。我相信在添加呼叫日志之前需要“一段时间”。ContentObserver是正确的处理方法,因为在发生更改时会通知您。如果你想这样工作,你将需要推迟几秒钟后,电话是空闲的。
发布于 2011-10-12 05:09:54
您正在跟踪使用共享功能的呼叫,这是没有效率的。您不必使用一个static variable,然后必须设置它的值,每当调用状态发生变化时,我在下面放置了一个代码,用于跟踪调用状态并从内部数据库获取新的调用日志数据,这段代码对我来说很好。
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
// Toast.makeText(context, "CALL_STATE_IDLE", Toast.LENGTH_LONG).show();
/**this condition will check that last state was not CALL_STATE_IDLE means that
* recently there was disconneted call
*/
if(UDF.phoneState != TelephonyManager.CALL_STATE_IDLE) {
//You can query for new call log
}
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
//Toast.makeText(context, "CALL_STATE_OFFHOOK", Toast.LENGTH_LONG).show();
break;
case TelephonyManager.CALL_STATE_RINGING:
//Toast.makeText(context, "CALL_STATE_RINGING", Toast.LENGTH_LONG).show();
endCallIfBlocked(incomingNumber);
break;
default:
break;
}
UDF.phoneState = state;
}发布于 2013-07-12 20:19:38
我只是修正了后延迟高达4000毫秒,而从db在空闲状态检索。
handler.postdelay(new Runnable(run() {
//write code here
}), 4000);对我来说很好..。
https://stackoverflow.com/questions/7735401
复制相似问题