我一直在使用以下代码BroadcastReceiver来获取传入呼叫的来电显示:
@Override
public void onReceive(Context aContext, Intent aIntent) {
String action = aIntent.getAction();
if (action==null) return;
if (!action.equals("android.intent.action.PHONE_STATE")) return;
String curState = aIntent.getStringExtra(TelephonyManager.EXTRA_STATE);
if ((TelephonyManager.EXTRA_STATE_RINGING.equals(curState))
&&(TelephonyManager.EXTRA_STATE_IDLE.equals(oldState)))){
String incNumber = aIntent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
// do something here
}
oldState=curState;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这已经停止了Android 9.0 (API 28).更具体地说,
aIntent.getStringExtra(EXTRA_INCOMING_NUMBER)始终返回null.在android中versions<=API 27一切正常
我还在清单文件中添加了READ_PHONE_STATE和READ_CALL_LOG权限.
有任何想法吗?还有其他人遇到同样的问题吗?
在此先感谢您的帮助.
您好我想使用56K调制解调器获取拨打家庭电话的电话号码,有没有办法用C#实现这一目标?
在Google 的“ 电话 ”应用中,有一个“来电显示和垃圾邮件”选项:
因此,如果您收到了不在通讯录上的某个人或某个组织的呼叫,但以某种方式被识别,则将为其命名,例如(称为“ + 972-035283487”):
自从Android的M(6.0 - API 23),应用程序可以替换默认的手机应用程序,然后还提供了替代的UI,当你呼叫某人或接到一个电话,通过扩展InCallService类,证明这里是基于此。
我想尝试显示与“电话”应用程序上相同的信息,这意味着该人员/公司的名称(以防万一它可以识别出该名称)(并且不在通讯录上)。
我试图分析通过拨号器的API获得的各种信息,但失败了:
android.telecom.Call类的各个字段和功能
有getDetails Call类的里面,所以我就先里面有什么在那里,也有statusHints和“ 标签 ”内“ statusHints ”。这些都没有任何信息(返回null)。我尝试查看“ statusHints”的原因是因为这就是我在docs上看到的内容:
包含在通话界面中显示的状态标签和图标。
是否可以获取此CallerId信息?如果是这样,怎么办?
电话应用程序如何做到这一点?它应该是开源的,所以必须有一些东西可以提供此信息,对吗?克隆它会以某种方式获得此信息吗?也许Google拥有自己的CallerID服务?
什么是“ callDetails”和“ statusHints”?他们提供什么?
我发现了一篇有趣的文章和github 存储库,它表明可以让电话应用程序在通话期间显示人员的来电显示信息,所以我想知道这是否是官方的方法,或者其他什么别的。
此示例表明,为了提供此数据,您需要实现 ContentProvider。
在我看来,这几乎就像一个黑客,并且看到它可以在某些(大多数?)设备上运行,但不能在三星设备上运行。
可能只是三星自己的应用程序出于某种原因不使用这些数据。
但还有另一个问题:如果我制作一个为另一个应用程序提供服务来显示来电显示数据的应用程序,那么最好只在通话期间为当前默认的电话应用程序执行此操作。
我不希望任何应用程序都能访问这些数据并获取全部数据。遗憾的是,我没有看到任何使用 ContentProvider 的方法,只允许查询当前的手机应用程序。我也许可以检查设备当前是否正在通话,但这并不是一个数据保护......
事实是,互联网上几乎没有关于这一罕见案例的信息,也没有任何问题。好的,有这个,但它指向相同的解决方案......
我进行了很多搜索,甚至找到了这篇文章和存储库。
这真的是为电话应用程序提供数据的官方方式吗?如果不是,我该怎么办?它适用于所有设备,包括三星吗?
对于数据保护,ContentProvider 是否有一种方法可以在运行时仅允许特定应用程序查询数据?这意味着对于每个查询,我可以检查哪个应用程序请求该查询?