【问题标题】:How to retrieve missed calls on Android SDK 2.2如何在 Android SDK 2.2 上找回未接来电
【发布时间】:2010-09-24 09:23:50
【问题描述】:

在我的应用程序中,当来电但用户未接听时,我应该执行一些操作。

我已经在android.telephonyNotificationManager中进行了搜索,但是我没有找到解决这个问题的方法。

有人知道如何知道电话上是否有未接电话吗?

【问题讨论】:

    标签: android notifications telephony


    【解决方案1】:

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

    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);
        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);
            }
        }
    }catch(Exception ex){
        if (_debug) Log.e("ERROR: " + ex.toString());
    }finally{
        cursor.close();
    }
    

    我希望你觉得这很有用。

    【讨论】:

    • MISSED_CALL_TYPE 是如何声明的?
    • MISSED_CALL_TYPE = android.provider.CallLog.Calls.MISSED_TYPE; - 很抱歉漏掉了那部分。
    • 谢谢!我当时无法使用它,所以我发现这些调用类型有两种方法:1.将其声明为整数:int typeColumn = c.getColumnIndex(android.provider.CallLog.Calls.TYPE);,然后是 int callType = c.getInt(typeColumn);毕竟,例如如果 calltype==1 那么..... 2: 使用 int outsidetypeColumn = c.getColumnIndex(android.provider.CallLog.Calls.TYPE + "='2'");等等。希望这对其他人有帮助!
    • 感谢 Camille,这段代码很有用。对于其他计划使用它的人:不要忘记将 android.permission.READ_CONTACTS 添加到您的 AndroidManifest.xml 中,并在关闭光标之前检查光标是否为空。
    • 我收到上下文错误,无法解决。我已经把上面的代码放在类扩展活动中。
    【解决方案2】:

    据我了解,您需要查询CallLog 提供程序(或者可能是CallLog.Calls),此页面说明如何查询内容提供程序:http://developer.android.com/guide/topics/providers/content-providers.html#basics

    如果你能做到这一点,我很高兴看到代码!

    【讨论】:

    • 是的。但在那种情况下,我将无法知道未接电话是否被接听。在我的应用程序中,如果未接电话已被接听,我不应再次通知用户未接电话。
    • 如何接听未接电话? CallLog.Calls 类中有一个 MISSING_TYPE 常量,我相信调用是 MISSING_TYPE、INCOMING_TYPE 或 OUTGOING_TYPE
    • 是的。很抱歉我没有把我想要的表达清楚。我同意您的观点,即电话“响铃”时无法接听“未接电话”。但是当我们知道之后有未接来电时,我们可以回拨,这就是我在我的问题中的“回答”的意思。所以通过这种方式,我认为最好使用通知而不是阅读呼叫日志中的信息。我希望这次我更清楚了。
    【解决方案3】:

    我想您有内容提供商可以访问通话记录。

    http://www.anddev.org/video-tut_-_querying_and_displaying_the_calllog-t169.html

    http://www.devx.com/wireless/Article/41133

    如果此代码有效,您只需在正确的时间运行此查询。我的意思是检查一些可以在您的设备中接到电话时通知您的示例

    http://groups.google.com/group/android-developers/browse_thread/thread/d97a759a3708cbe3

    一旦您收到此通知,请设置一个计时器或使用一些内置 Intents 来发现手机恢复正常状态并访问通话记录...

    可能重复

    broadcast receiver for missed call in android

    Show Toast on Missed Call in android application

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-16
      • 2017-05-27
      • 2014-06-09
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多