我正在做xamarin.forms。我需要得到电话号码,如果设备是双卡,那么我需要得到两个号码。我如何实现这一点?有这么多的问题后,参考所有我来到这里有关这一点。
我在shard项目中创建了一个接口,并在android项目中实现了该接口。
已在共享项目中创建接口
public interface IDeviceInfo
{
string GetMyPhoneNumber();
}
在android项目中实现了该接口
public string GetMyPhoneNumber()
{
try
{
TelephonyManager mgr =
Android.App.Application.Context.GetSystemService(Context.TelephonyService) as TelephonyManager;
return mgr.Line1Number;
}
catch (Exception ex)
{
throw;
}
}
在其中一个按钮上单击共享项目
private void GetPhone_Clicked(object sender, EventArgs e)
{
try
{
var data = DependencyService.Get<IDeviceInfo>().GetMyPhoneNumber();
}
catch (Exception ex)
{
throw;
}
}
当我使用Android 5时,它返回空字符串,如果我使用Android 6+,它会给出权限错误,如Java. Lang. SecurityException:获取要显示的第1行编号:用户10286和当前进程都没有android.权限READ_PHONE_STATE,android.权限READ_SMS或android.权限READ_PHONE_NUMBERS
如何在所有Android版本中解决此问题?
1条答案
按热度按时间xmjla07d1#
对于iOS,这是不可能的,即使你以某种方式得到它使用
CoreTelephony
或其他东西,你的应用程序将被拒绝为苹果商店部署与以下问题所述的迪伦here:出于安全原因,iPhone OS将应用程序(包括其偏好设置和数据)限制在文件系统中的唯一位置。此限制是称为应用程序"沙箱"的安全功能的一部分。沙箱是一组精细控制,用于限制应用程序对文件、偏好设置、网络资源、硬件等的访问。
设备的电话号码在您的应用程序容器中不可用。您需要将应用程序修改为在目录容器中只读,并将二进制文件重新提交到iTunes Connect,以便App Store重新考虑您的应用程序。
现在对于
Android
,您可以使用TelephonyManager
方法来获取电话号码,但据我所知,这不是一个可靠的方法,因此它不会从SIM卡详细信息或其他信息中获取电话号码,它会从您在手机启动时输入的设备信息中获取电话号码。此外,这里有一个重要的注解,似乎是relevant
实际上,并不是那么完美。上次我尝试这个方法时,它报告了我的手机原来的电话号码,在我的旧手机号码被移植到它之前。它可能仍然这样做,因为设置应用程序仍然显示那个不存在的号码。此外,有报告说,一些SIM卡导致这个方法返回空值。话虽如此,我不知道一个更好的答案。
即使这对你来说没问题,你也只能用这个得到一个电话号码,如果你的用户没有在手机的设置中配置,这个电话号码在大多数情况下都是空的。
可能的解决方案(只有在您问我的情况下)
解决这两个问题的方法是,根据您的方便创建一个类似弹出窗口或页面的屏幕,要求用户自己输入电话号码(如果强制性的话),同时创建一个模态页面
祝你好运
如有疑问则还原