2016-09-19 11 views
0

私はもちろん、個人的な使用のためにサーバーにログオンするための電話を必要とするアンドロイドアプリケーションに取り組んでいます。私はこの目的のために登録された放送受信機を持っており、すべてのタイプの呼とその詳細を検出することができます。しかし、正確な発信時間を検出することは不可能である。すなわち、正確に通話時間ではないアウト・アウト・コールの完全なオフフック時間を検出することになる。そのため、発信ログが終了した場合のみ、コールログ履歴からレコードを読み取ろうとします。私は、発信呼び出しが終了したときに、broadcastreceiverからのコールログ履歴を読み取ることができますが、現在受信したコールのエントリがコールログエントリに表示されません。私は以前の通話をすべて通話履歴に表示できますが、受信した通話は表示できません。私はコード内でhereのGabe Sechanの例を使用しています。そして私は、このようなoutgoingcallended方法でandroid broadcastreceiverに新しい通話記録が見つかりません

ContentResolver crs = globalContext.getContentResolver(); 
    Cursor cr = getAllCallLogs(crs); 
    if(cr.moveToFirst()){ 
     duration = cr.getString(cr 
       .getColumnIndex(android.provider.CallLog.Calls.DURATION)); 
     callNumber = cr.getString(cr 
       .getColumnIndex(android.provider.CallLog.Calls.NUMBER)); 


    } 
    private Cursor getAllCallLogs(ContentResolver cr) { 
    // reading all data in descending order according to DATE 
    String strOrder = android.provider.CallLog.Calls.DATE + " DESC"; 
    Uri callUri = Uri.parse("content://call_log/calls"); 
    Cursor cur = cr.query(callUri, null, null, null, strOrder); 

    return cur; 
    } 

を最新の通話履歴を読み取ろう。しかしcallNumberは、前のコールの番号ではなく、私がbroadcastreciverと同じ期間の場合と受けたためです。 私は通話記録を読み込もうとするまでに更新されないので、これをどのように解決すればよいのですか?私は何が欠けていますか?

+0

の理由は、あなたが、放送を受信するとき、同じレコードがまだDBに更新されていないということです。 Praveenが正しく指摘したように、遅延を追加することができますが、コンテンツオブザーバを追加することをお勧めします – Ayaanp

答えて

0

getContentResolver()の前に遅延を追加して、テーブルを更新する必要があります。 Thread.sleep()を追加するか、ハンドラを使用することができます。

public void loadCursorPostDelayed(){ 
    final Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 

      ContentResolver crs = globalContext.getContentResolver(); 
      ... 
     } 
    }, 1500); 
} 

}

+0

Thanks @Praveenそれは3秒のハンドラ遅延で動作します。しかし、遅延方法は信頼できますか? –

+0

遅延メソッドは、ほとんどの場合、デバイスが非常に遅くなるまで機能します。しかし、より具体的な実装では、Ayaanpによって提案されたコンテンツオブザーバを使用します。 DBのデータ変更をコールバックします。変更に応じて、最後の通話のデータを確認することができます。 [こちら](http://stackoverflow.com/questions/16582577/android-content-observer-onchange-method-check-if-last-call-is-missed-call-or)をご確認ください – Praveen

+0

はいいいですね。ありがとう –

関連する問題