在我的Android应用中识别未知/私人/受限制的来电

时间:2011-11-10 22:20:14

标签: android phone-call

我在contentObserver中使用一个简单的投影来检测未接来电。

String[] projection = new String[] {Calls.NUMBER, Calls.DATE};

以后......

String number = cursor.getString(0);

我希望能够识别没有来电显示的来电。一个快速的实验表明,对于“受限制”的呼叫(来自真实手机,使用#31#),返回的数字为“-2”。在使用“#”作为电话号码的模拟器上,显示为来自“-1”的呼叫,报告为“未知”。

我找不到任何证明这一点的文件。只是寻找负数或“ - ”前缀是识别此类呼叫的可靠方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用具有以下可能值的其他列:Calls.NUMBER_PRESENTATION

  • PRESENTATION_ALLOWED
    • 允许显示来电号码的号码。常数值:1(0x00000001)
  • PRESENTATION_RESTRICTED
    • 号码被用户阻止。常数值:2(0x00000002)
  • PRESENTATION_UNKNOWN
    • 网络未指定或未知号码。常数值:3(0x00000003)
  • PRESENTATION_PAYPHONE
    • 号码是付费电话。常数值:4(0x00000004)

来自受限制的未知号码的电话,字段值将为2或3.所以你可以这样做:

String[] projection = new String[] {
    Calls.NUMBER, 
    Calls.DATE, 
    Calls.NUMBER_PRESENTATION
};

以后......

String number = cursor.getString(0);
String type = cursor.getString(2);
if(type == "2" || type == "3") { 
   number = "RESTICTED OR UNKNOWN";
}