为什么IncomingNumber始终为空?

时间:2018-10-13 12:09:06

标签: android xamarin xamarin.forms

我对移动编程以及Xamarin或Xamarin.Forms完全陌生。因此,我考虑从小做起,尝试使用第一个显示来电号码的应用程序(只是想知道如何将此信息输入到我的应用程序中)。

经过大量的尝试和搜索,没有找到合适的答案,我设法至少能够在有来电时达到断点。

为此,我在Xamarin.Forms解决方案的Android特定项目中创建了一个名为StateListener的类。此类看起来像这样:

public class StateListener : PhoneStateListener
{
    public override void OnCallStateChanged(CallState state, string incomingNumber)
    {
        base.OnCallStateChanged(state, incomingNumber);

        switch (state)
        {
            case CallState.Ringing:
                break;   // <== set break point here
            case CallState.Offhook:
                break;
            case CallState.Idle:
                break;
        }
    }
}

然后我在MainActivity的{​​{1}}方法中实例化了此类,如下所示:

OnCreate

现在,当我运行我的小解决方案时,会遇到断点(请参见代码中的注释),但是不幸的是,StateListener phoneStateListener = new StateListener(); TelephonyManager telephonyManager = (TelephonyManager)GetSystemService(Context.TelephonyService); telephonyManager.Listen(phoneStateListener, PhoneStateListenerFlags.CallState); 方法的incomingNumber始终为空。

在关于OnCallStateChanged方法的文档不满意之后,我在清单文件中设置了所需的OnCallStateChanged权限,但这无济于事。

也许可以吗?

2 个答案:

答案 0 :(得分:1)

似乎,一旦您模拟了您的应用程序,就必须在模拟的Android内手动设置任何新权限,因为它已经安装,所以您的应用程序将不会要求它。 在模拟的Android中为我的应用授予“电话”权限并重新启动应用后,我得到了incomingNumber

答案 1 :(得分:0)

friendly_id说:

  

如果应用程序没有READ_CALL_LOG权限或运营商   特权(请参阅TelephonyManager.hasCarrierPrivileges()),为空   字符串将作为参数传递。

所以请检查您的应用程序权限。