1
我有一個廣播接收機註冊了來電事件狀態,我想確保空閒來電是拒絕來電,因爲拒絕接聽來電。爲此,我訪問CallLog提供程序以獲取最新的設備調用,並將其類型與CallLog.Calls.MISSED_TYPE進行比較。問題是,我的接收機在CallLog提供程序更新之前使用設備接收到的最後一次呼叫來執行此操作......這就是爲什麼我在接收機上使用Thread.sleep,以使接收機等待CallLog提供程序要更新他查詢它之前,你可以看到如下:檢查來電是否錯過
private boolean isMissedCall(Context context){
//previous state is a global var
if(previousState != null && previousState.equals(RINGING)){
//THIS IS UGLY!!
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String callType = android.provider.CallLog.Calls.TYPE;
String callNew = android.provider.CallLog.Calls.NEW;
String callDate = android.provider.CallLog.Calls.DATE;
String[] strFields = { callType, callNew, callDate};
String strOrder = callDate + " DESC";
Cursor mCallCursor = context.getContentResolver().query(android.provider.CallLog.Calls.CONTENT_URI,
strFields,
null,
null,
strOrder);
if (mCallCursor.moveToFirst()) {
if(mCallCursor.getInt(mCallCursor.getColumnIndex(callNew)) > 0) {
return mCallCursor.getInt(mCallCursor.getColumnIndex(callType)) == CallLog.Calls.MISSED_TYPE;
}
}
}
return false;
}
我不開心具有把線程睡眠的解決方案,但我沒有找到任何地方,到目前爲止,對於另一種解決方案問題。我覺得必須有一種方法可以做到這一點,因此,我要求您提供有關如何從CallLog獲取最新來電的最佳方法,以及bradcast接收器的onReceive方法。
P.S:我的目標分鐘Android SDK中是8
提前