如何在xamarin表格中获得电话号码?

oyt4ldly  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(191)

我正在做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版本中解决此问题?

xmjla07d

xmjla07d1#

对于iOS,这是不可能的,即使你以某种方式得到它使用CoreTelephony或其他东西,你的应用程序将被拒绝为苹果商店部署与以下问题所述的迪伦here
出于安全原因,iPhone OS将应用程序(包括其偏好设置和数据)限制在文件系统中的唯一位置。此限制是称为应用程序"沙箱"的安全功能的一部分。沙箱是一组精细控制,用于限制应用程序对文件、偏好设置、网络资源、硬件等的访问。
设备的电话号码在您的应用程序容器中不可用。您需要将应用程序修改为在目录容器中只读,并将二进制文件重新提交到iTunes Connect,以便App Store重新考虑您的应用程序。
现在对于Android,您可以使用TelephonyManager方法来获取电话号码,但据我所知,这不是一个可靠的方法,因此它不会从SIM卡详细信息或其他信息中获取电话号码,它会从您在手机启动时输入的设备信息中获取电话号码。
此外,这里有一个重要的注解,似乎是relevant
实际上,并不是那么完美。上次我尝试这个方法时,它报告了我的手机原来的电话号码,在我的旧手机号码被移植到它之前。它可能仍然这样做,因为设置应用程序仍然显示那个不存在的号码。此外,有报告说,一些SIM卡导致这个方法返回空值。话虽如此,我不知道一个更好的答案。
即使这对你来说没问题,你也只能用这个得到一个电话号码,如果你的用户没有在手机的设置中配置,这个电话号码在大多数情况下都是空的。

可能的解决方案(只有在您问我的情况下)

解决这两个问题的方法是,根据您的方便创建一个类似弹出窗口或页面的屏幕,要求用户自己输入电话号码(如果强制性的话),同时创建一个模态页面
祝你好运
如有疑问则还原

相关问题