Sag*_*til 7 c# xamarin.android telephonymanager xamarin xamarin.forms
我正在研究xamarin.forms。我需要获取电话号码,如果设备是双SIM卡,那么我需要获取两个号码。我该如何实现?引用我来到这里后,有很多与此相关的问题。
我在shard项目中创建了一个接口,并在android项目中实现了该接口。android.permission.READ_PHONE_NUMBERS
在共享项目中创建接口
public interface IDeviceInfo
{
string GetMyPhoneNumber();
}
Run Code Online (Sandbox Code Playgroud)
在android项目中实现了界面
public string GetMyPhoneNumber()
{
try
{
TelephonyManager mgr =
Android.App.Application.Context.GetSystemService(Context.TelephonyService) as TelephonyManager;
return mgr.Line1Number;
}
catch (Exception ex)
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
在按钮之一上单击共享项目
private void GetPhone_Clicked(object sender, EventArgs e)
{
try
{
var data = DependencyService.Get<IDeviceInfo>().GetMyPhoneNumber();
}
catch (Exception ex)
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用android 5时,它返回空字符串,如果我使用android 6+,则给出权限错误,如Java.Lang.SecurityException:getLine1NumberForDisplay:用户10286或当前进程都没有android.permission.READ_PHONE_STATE,android.permission。 READ_SMS或android.permission.READ_PHONE_NUMBERS
如何在所有Android版本中解决此问题?
对于iOS,这是不可能的,即使您以某种方式使用它,CoreTelephony或者由于以下问题,您的应用程序将被苹果商店部署拒绝,如Dylan 在此处所述:
“出于安全考虑,iPhone OS将应用程序(包括其首选项和数据)限制为文件系统中的唯一位置。此限制是称为应用程序“沙箱”的安全功能的一部分。沙箱是一组优良的功能,细粒度的控件限制了应用程序对文件,首选项,网络资源,硬件等的访问。”
该设备的电话号码在您应用程序的容器中不可用。您将需要修改您的应用程序以使其只能在目录容器中读取,然后将二进制文件重新提交给iTunes Connect,以便将您的应用程序重新考虑用于App Store。
现在Android,您可以使用这种TelephonyManager方法来获取电话号码,但是据我所知,这不是一种可靠的方法,因此它不会从sim详细信息中获取电话号码,也不会从设备信息中获取电话号码。您在手机启动时输入了说明,请在此处输入
另外,这里有一条重要的评论似乎很重要
实际上,并不是那么完美。上一次我尝试此方法时,它报告了我的手机原来的电话号码,然后才将旧手机号码移植到该电话号码上。可能仍会这样做,因为“设置”应用程序仍会显示该无效数字。此外,有报告说某些SIM卡导致此方法返回null。话虽这么说,我不知道一个更好的答案。
即使您觉得某种方式很好,您也只能使用此电话号码来获得一个电话号码,而且如果您的用户未在手机设置中配置,那么该电话号码在大多数情况下将为空。
解决这两个问题的方法是,根据您的方便程度创建一个屏幕,如弹出窗口或页面,要求用户自己输入电话号码(如果必须的话)一起创建模式页面
祝好运
查询时还原