【问题标题】:How to know the call state in android如何知道android中的通话状态
【发布时间】:2014-10-19 04:09:24
【问题描述】:

我从 Phonestatelistener 知道,我们将了解呼叫类型,如来电、振铃或接听等。但是一旦呼叫结束,即一旦电话进入空闲状态,我想知道呼叫的状态是什么,是它选择、错过或拒绝

接听吧,+91123456789是来电,通话结束后,该号码将作为未接来电存储在通话记录中,

有没有办法从通话记录中获取特定号码 +91123456789 的最近状态,有可能吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    这是可以查询未接电话的通话记录的代码。基本上,您必须触发此操作并确保给通话记录一些时间(应该几秒钟)以写入信息,否则如果您过早检查通话记录,您将找不到最近的通话。

    int MISSED_CALL_TYPE = android.provider.CallLog.Calls.MISSED_TYPE
    final String[] projection = null;
    final String selection = null;
    final String[] selectionArgs = null;
    final String sortOrder = android.provider.CallLog.Calls.DATE + " DESC";
    Cursor cursor = null;
    try{
       // cursor = context.getContentResolver().query(
       //         Uri.parse("content://call_log/calls"),
       //         projection,
       //         selection,
       //         selectionArgs,
       //         sortOrder);
    cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, null, CallLog.Calls.NUMBER + "=? ", yourNumber, sortOrder);
            while (cursor.moveToNext()) { 
                String callLogID = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls._ID));
                String callNumber = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NUMBER));
                String callDate = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.DATE));
                String callType = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.TYPE));
                String isCallNew = cursor.getString(cursor.getColumnIndex(android.provider.CallLog.Calls.NEW));
                if(Integer.parseInt(callType) == MISSED_CALL_TYPE && Integer.parseInt(isCallNew) > 0){
                    if (_debug) Log.v("Missed Call Found: " + callNumber);
    break ;
                    }
                }
            }catch(Exception ex){
                if (_debug) Log.e("ERROR: " + ex.toString());
            }finally{
                cursor.close();
            }
    

    我希望你觉得这很有用,就像你可以得到其他状态一样。

    在清单中添加此权限 android.permission.READ_CONTACTS

    【讨论】:

    • 嗨,谢谢你,我找到了一种方法是phonestatelistener,如果它是一个电话,这很好用。假设如果我接到一个电话并且我接到另一个来电,那将处于等待状态,我需要知道如何接听那个等待的电话并检查它是否未接来电?
    • 这就是这段代码的作用,如果您有未接电话,则可以查询通话记录以检查最近未接电话是否来自正在等待的特定号码
    • 但是正如您所说,手机确实需要一些时间来更新其日志,所以有时信息不准确对吧?
    • 使用后延迟 final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { //100ms后做某事 } }, 100);
    • 好的,太好了,我想知道最后一件事。直接通过号码,我们可以找到最近的状态,即它的未接电话,或接受或拒绝?。这个迭代对于电话来说有点耗时。那么我们可以通过传递数字一次性得到它吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多