通話履歴の取得について

281 views
Skip to first unread message

zzz

unread,
Dec 3, 2013, 1:16:55 AM12/3/13
to android-g...@googlegroups.com
初めまして。zzzといいます。よろしくお願いします 。
通話履歴についてお伺いしたいことがあり、投稿させていただきました。

発信回数をカウントするアプリを作るため、「CallLog.calls」を使い通話履歴を取得しています。
不在発信はカウントしたくないので、「通話の種類」「通話時間が0秒」の2つで不在発信かどうか判定しています。
しかし、「117」や「留守番電話問い合わせ」などに電話をかけると相手が出たのにもかかわらず、通話時間が0秒になってしまいます。
これだと不在発信ではないのに不在発信扱いになってしまい、大変困っています。

仕様なのか?と標準装備の通話アプリを確認したところ、通話履歴の一覧からは通話時間が見れないものの、詳細画面ではきちんと通話時間が表示されているようでした。
なので自分のアプリでも取れるのはず、と考えているのですが、なかなか解決せず…。
どうすればいいのかと煮詰まり、こちらへ相談させていただきました。
 
どうか、お力を貸していただけないでしょうか。
よろしくお願いいたします。

katsuki nakatani

unread,
Dec 4, 2013, 1:16:09 AM12/4/13
to android-g...@googlegroups.com
こんにちは。
中谷と申します。

通話ログですが、私の端末(Nexus5)で発信した場合117でも通話時間は3秒や5秒など帰ってきます。
取得する箇所が違うなど無いでしょうか。
ソースを載せるほうが回答がつきやすいと思います。

2013年12月3日火曜日 15時16分55秒 UTC+9 zzz:

zzz

unread,
Dec 4, 2013, 2:35:03 AM12/4/13
to android-g...@googlegroups.com
中谷様

回答ありがとうございます。
Nexus5では通話時間を取得できるのですね…!

私はGALAXY NEXUSで試していたのですが、標準アプリの通話ログで時間が取得出来て、自作アプリの方で取得できない、という状況でした。
取得には『CallLog.calls』を使っています。
最初の投稿する前に、このクラスを調べていたのですが、標準アプリがここに通話ログを保存してるっぽい? ぐらいしか自分には理解できず、取得してる場所が違う? まではわかりませんでした。
 
 
自作アプリのソースコードを遅ればせながら載せておきます。
通話切断を確認した後、Receiverを呼び出してこの動作をさせています。

// 通話関係のデータを呼び出す
        String order = CallLog.Calls.DEFAULT_SORT_ORDER;
        Cursor cursor = contentResolver.query(
                CallLog.Calls.CONTENT_URI,
                null,
                null,
                null,
                order
                );
        if (cursor.moveToFirst()){
            Date maxDate = new Date(0000000000);
            do {
                // 通話の日付取得
                Date date = new Date(cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)));
                // 取得したのがより新しいデータなのか
                if(date.after(maxDate)){
                    // その時の通話タイプと通話時間を取得
                    maxDate = date;
                    type = cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE));
                    callTime = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));
                }
            } while(cursor.moveToNext());
        }
        // 最新のログが発信で、通話時間が0秒(不在)ではなかったら
        if(type.equals("2") && !callTime.equals("0")){
            SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
            Editor editor = pref.edit();
            int callCount = pref.getInt(ResetDialog.COUNT_INT_KEY, ResetDialog.COUNT_DEFAULT);
            // 内部データの通話回数記録に 1 をプラスする
            editor.putInt(ResetDialog.COUNT_INT_KEY, callCount + 1);
            editor.commit();
        }
    }
 




2013年12月4日水曜日 15時16分09秒 UTC+9 katsuki nakatani:

zzz

unread,
Dec 6, 2013, 3:31:02 AM12/6/13
to android-g...@googlegroups.com
アドバイスをありがとうございました。
大変恐縮なのですが、プログラムを調べなおした結果自己解決しましたので報告します。
 
通話の切断を確認してログを取得するのは良かったのですが、どうやらそれが保存される前にログを取得していたようです。
切断の確認に使っていたReceiverが完全に殺されてからでないとログが保存されないようで…移動してから数秒待つことで無事取得できるようになりました。
対策をしていたはずなのですが、ほかの部分をいじっているうちに再発していたみたいです。
全く関係ない部分のソースを載せてしまい申し訳ありません……。

中谷様、返信を下さり、本当にありがとうございました。
自己解決でしたが、ほかの端末での状況を知れたのが糸口になりました。ありがとうございました!


2013年12月4日水曜日 16時35分03秒 UTC+9 zzz:
Reply all
Reply to author
Forward
0 new messages