取得前回の通話にCallLogサービスを利用して
-
23-12-2019 - |
質問
いくつかはプログラムを送信するCallLogサーバーに作ったサービスにより、投票の電話状況は以下の方法です。このメソッドが呼び出されるonCreate.
private void pollForCallStatus() {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
Log.d("Poll", Integer.toString(telephonyManager.getCallState()));
switch (telephonyManager.getCallState()){
case TelephonyManager.CALL_STATE_RINGING:
Log.d("CallService", "ringing");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
callStart();
break;
case TelephonyManager.CALL_STATE_IDLE:
callEnd();
break;
}
}
}, 0, 1000);
}
の方法CallEnd、チェックの場合、通話が始まれば、その場合はその期間のこの呼び出しのCallLogに使っているCallLogることができるからないの確定時の発信を開始します。
private void callEnd() {
if (isStart) {
Log.d("CallService", "callEnd");
Integer duration = getDuration();
Log.d("CallService", duration.toString());
Command sender = new SendCall(this.phoneNumber, duration);
isStart = false;
this.stopSelf();
}
}
ま貼り付け方法にgetDurationまでの期間中にお電話CallLog.
private Integer getDuration(){
Integer duration = 0;
callLogCursor.moveToFirst();
if ( phoneNumber.equalsIgnoreCase(callLogCursor.getString(callLogCursor.getColumnIndex(CallLog.Calls.NUMBER))) )
duration = callLogCursor.getInt(callLogCursor.getColumnIndex(CallLog.Calls.DURATION));
return duration;
}
私の問題はgetDurationあく、前回の通話時間にわた各前ます。した待ち時間も受けている。
---編集---
私のコードを使用ContentObserverが、今ではもうほとんど同じ結果です。のようなオブザーバのBroadcastReceiver
public class CallsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
ContentResolver cr = context.getContentResolver();
Cursor callLogCursor = cr.query(android.provider.CallLog.Calls.CONTENT_URI,
null,
null,
null,
android.provider.CallLog.Calls.DEFAULT_SORT_ORDER /*sort by*/);
Command sender = new SendCall(phoneNumber, callLogCursor);
context.getContentResolver().
registerContentObserver(android.provider.CallLog.Calls.CONTENT_URI,
true, new CallObserver(context, sender));
}
}
時CallLog変更を実行する方法getDuration、新getDurationは
private Integer getDuration(){
Integer duration = 0;
callCursor.moveToFirst();
if ( phoneNumber.equalsIgnoreCase(callCursor.getString(callCursor.getColumnIndex(CallLog.Calls.NUMBER))) )
duration = callCursor.getInt(callCursor.getColumnIndex(CallLog.Calls.DURATION));
Log.d("SendCall.getDuration", duration.toString());
return duration;
}
の期間、前回の通話を継続間違っているのは、この期間は前ます。わからないと思います。
解決
追加ContentObserverに話しています何かが変更となりますcallLogる新しく通話が通話履歴は削除され、通話履歴
編集
うした話後に通話が終了してい右結果を出すことができコード
待ちに3~4秒間呼び出し後の仕上げとその後
CursorLoader cursorLoader = new CursorLoader(mActivity,
CallLog.Calls.CONTENT_URI, null, null, null, null);
managedCursor = cursorLoader.loadInBackground();
int durationIndex = managedCursor.getColumnIndex(CallLog.Calls.DURATION);
managedCursor.moveToFirst();
String duration =managedCursor.getString(duration)
所属していません StackOverflow