Как получить номер телефона в формах xamarin? - PullRequest
7 голосов
/ 28 марта 2019

Я работаю над xamarin.forms.Мне нужно получить номер телефона, если устройство двух сим, то мне нужно получить оба номера.Как мне этого добиться?Там было так много вопросов, связанных с этим после ссылки на все, что я пришел сюда.

Я создал один интерфейс в проекте шарда и реализовал интерфейс в проекте Android.android.permission.READ_PHONE_NUMBERS

создан интерфейс в общем проекте

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: getLine1NumberForDisplay: Ни пользователь 10286, ни текущий процесс не имеет android.permission.READ_PHONE_STATE, android.permission.READ_SMS или android.permission.READ_PHONE_NUMBERS

Как решить эту проблему во всех версиях Android?

1 Ответ

6 голосов
/ 28 марта 2019

Для iOS это невозможно, и даже если вы каким-то образом получите его, используя CoreTelephony или что-то еще, ваше приложение будет отклонено для развертывания Apple Store со следующей проблемой, как указано Диланом здесь :

"В целях безопасности iPhone OS ограничивает приложение (включая его настройки и данные) уникальным местоположением в файловой системе. Это ограничение является частью функции безопасности, известной как" песочница "приложения.Песочница - это набор детальных элементов управления, ограничивающих доступ приложения к файлам, настройкам, сетевым ресурсам, оборудованию и т. Д. "

Номер телефона устройства недоступен в контейнере вашего приложения.Вам нужно будет пересмотреть приложение, чтобы оно было доступно только для чтения в контейнере каталогов, и повторно отправить двоичный файл в iTunes Connect, чтобы пересмотреть приложение в App Store.

Теперь для Android выМожно использовать подход TelephonyManager для получения номера телефона, но, насколько мне известно, это ненадежный подход, поэтому он не получает номер телефона из данных сима или что-то такое, что он берет из информации об устройстве, которую вывведите при запуске телефона объяснение его присутствия здесь

Кроме того, здесь есть важный комментарий, который, кажется, относится

На самом деле не так идеально.В прошлый раз, когда я пробовал этот метод, он сообщал номер телефона, который был у моего телефона, прежде чем мой старый номер мобильного телефона был перенесен на него.Это, вероятно, все еще делает, поскольку приложение Настройки все еще показывает тот несуществующий номер.Также есть сообщения о том, что некоторые SIM-карты приводят к тому, что этот метод возвращает ноль.Это, как говорится, я не знаю лучшего ответа.

Даже если это как-то хорошо с вами, вы можете получить только один номер телефона, используя этот, и этот номер будет нулевым большинствомвремя, когда ваш пользователь не настроен в настройках мобильного телефона.

Возможное решение (только если вы спросите меня)

Способ решения обеих проблем - создание экрананапример, всплывающее окно или страницу по вашему усмотрению, которая просит самого пользователя ввести номер телефона, если необходимо, сделать модальную страницу все вместе

Удачи

Возврат в случае запросов

...