【发布时间】:2017-08-21 09:31:38
【问题描述】:
我目前正在开发一个 Xamarin 表单项目,在该项目中我需要能够从设备获取用户的电话号码。它发现在 iOS 和 Windows Phone 上不可能做到这一点,但我仍然想在 Android 上这样做,这就是为什么我在互联网上找到了一段应该在 Android 上运行的代码。我正在使用 MVVM 模式。
在我的 ViewModel 中,我尝试以这种方式获取电话号码:
string phoneNumber = DependencyService.Get<IPhoneNumber>().GetPhoneNumber();
从这个类调用这个方法:
public class PhoneNumber : IPhoneNumber
{
public string GetPhoneNumber()
{
TelephonyManager mTelephonyMgr;
mTelephonyMgr = (TelephonyManager)Application.Context.GetSystemService(Context.TelephonyService);
return mTelephonyMgr.Line1Number;
}
}
当我在 Android Emulator for Visual Studio 上运行我的应用程序时,它可以工作,我得到一个由 11 位数字组成的电话号码。但是当我在真实设备上时,该方法返回一个空字符串(“”)。我已将 READ_PHONE_STATE 权限放入我的 AndroidManifest.xml 文件中。哦还有,当然,我的真机插了一张 SIM 卡,而且它只有一个 SIM 卡槽。
我错过了什么吗?我会尽快在另一台设备上进行测试,但目前还不可能。
感谢您的帮助!
【问题讨论】:
-
我很久以前就尝试过使用原生android程序,结果表明许多运营商不提供此信息。特别是在伊朗,没有活跃的运营商这样做。我听说这甚至是非法的!这就是 Telegram 和 Viber 等应用询问您的电话号码的原因。
-
哦,我明白了!是的,我想知道为什么像 Viber 这样的著名应用程序不这样做,我想我现在已经有了答案。所以我会尝试以这种方式预先填写“电话号码”字段,如果我无法获得号码,用户将不得不手动输入。谢谢!
标签: c# xamarin mvvm xamarin.android cross-platform