安卓:如何编程检测私人号码

13
我使用BroadcastReceiver在Android手机上拦截来电,如下所示。
tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
Bundle bundle = intent.getExtras();
String number = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);

在"私人号码"的情况下,我在两部设备上进行了测试,在HTC Wildfire上显示为-1,在Galaxy S上显示为-2。我查了一下android.telephony.PhoneNumberUtils,但它无法帮助我。

是否有一种函数或通用方法可以检测Android手机上的私人号码?

1个回答

13
你已经回答了自己的问题。私人号码会以-1或-2的形式发送到手机。在我的应用程序中,我检查是否存在小于零的整数值,若是,则将其视为私人号码。这听起来就像是你想要做的事情。
希望我的想法能对你有所帮助。

1
我不确定它适用于所有设备,因为我找不到任何关于此的文档。 - Bao Le
我同意你的观点。我不知道是否有任何设备违反了这个“小于零”的规则,但目前对我来说似乎是有效的。由于没有文档,并且Android设备在实现上各不相同,所以在我收到用户的错误报告之前,我会遵循这个规则。虽然这不是最好的做法,但考虑到当前的事实,这是唯一的选择。 - Camille Sévigny
2
@BaoLe 这个为什么可行可以在CallLog.java的android源代码中看到,这里有一个链接,http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/android/provider/CallLog.java#269 ,被限制的呼叫被分配了一个常量,在com.android.internal.telephony.CallerInfo中定义为-1表示未知、-2表示私人和-3表示付费电话号码。 - Sojurn
有人知道这种行为在Android 4.4中是否仍然有效吗? - alice.harrison
1
这在至少 Android 5.1 中不是真的,因为它会返回 null(对于私人号码)。此外,在 Android 开发者网站上:“如果来电者来自未知号码,则额外信息将被填充为空字符串。”。虽然我不知道这是哪个 API,因为在我的情况下,对于私人号码,它返回 null 的 getString。所以我想检查空字符串、null 字符串和负数,以解决所有情况。 - Edw590

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接