我对移动编程以及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
权限,但这无济于事。
也许可以吗?
答案 0 :(得分:1)
似乎,一旦您模拟了您的应用程序,就必须在模拟的Android内手动设置任何新权限,因为它已经安装,所以您的应用程序将不会要求它。
在模拟的Android中为我的应用授予“电话”权限并重新启动应用后,我得到了incomingNumber
。
答案 1 :(得分:0)
如果应用程序没有READ_CALL_LOG权限或运营商 特权(请参阅TelephonyManager.hasCarrierPrivileges()),为空 字符串将作为参数传递。
所以请检查您的应用程序权限。