【发布时间】:2019-11-12 00:47:02
【问题描述】:
我需要在我的 android 应用程序中有一些代码,以获得某种独特的价值(手机特有的价值)。我在 Visual Studio 中使用 Xamarin/C# 环境。我了解并非所有 Android 手机都会将电话号码公开给程序访问。
我目前的方法是使用 Android.Telephony.TelephonyManager 类。
Android.Telephony.TelephonyManager manager = null;
manager = activity.GetSystemService(Android.Content.Context.TelephonyService);
// [RequiresPermission("android.permission.READ_PHONE_STATE")]
imei_value = manager.Imei;
meid_value = manager. Meid;
carrier = manager.NetworkOperatorName;
country = manager.NetworkCountryIso;
sn = manager.SimSerialNumber;
initialized = true;
Log.Debug("DEBUG", "initialized phone");
Log.Debug("DEBUG", "carrier: " + carrier);
Log.Debug("DEBUG", "country: " + country);
Log.Debug("DEBUG", "serial: [" + sn + "]");
Log.Debug("DEBUG", "MEID: [" + meid_value + "]");
Log.Debug("DEBUG", "IMEI: [" + imei_value + "]");
Log.Debug("DEBUG", "MEID(2): [" + manager.GetMeid(0) + "]");
Log.Debug("DEBUG", "IMEI(2): [" + manager.GetImei(0) + "]");
Log.Debug("DEBUG", "phone: [" + manager.Line1Number + "]");
这是调试器生成的:
11-11 17:00:45.690 D/DEBUG (24041): initialized phone
11-11 17:00:45.691 D/DEBUG (24041): carrier: Verizon
11-11 17:00:45.691 D/DEBUG (24041): country: us
11-11 17:00:45.691 D/DEBUG (24041): serial: []
11-11 17:00:45.691 D/DEBUG (24041): MEID: []
11-11 17:00:45.691 D/DEBUG (24041): IMEI: []
11-11 17:00:45.694 D/DEBUG (24041): MEID(2): []
11-11 17:00:45.698 D/DEBUG (24041): IMEI(2): []
11-11 17:00:45.703 D/DEBUG (24041): phone: [xxx866xxxx]
我正在测试的手机是 Google Pixel 3
【问题讨论】:
-
您能解释一下为什么需要使用“手机独有的”ID吗?通常,仅当“[移动] 运营商相关功能需要它”时,才适合使用硬件 ID。 (特别是关于 IMEI,请参阅 RFC 7254 的第 8 节;请注意,IMEI 和序列号尤其不适用于识别用户,因为设备可以将所有权从一个用户更改为另一个用户。)
-
我听说,一般来说,manager.Line1Number 不能保证提供一个号码(如果电话号码不在 SIM 卡上)。我可以要求用户提供他/她的电话号码 - 但随后需要相信用户在她/他的条目中是准确/诚实的。我需要一种识别手机的备份方法。
标签: c# android xamarin serial-number imei