C# 我如何编写Android应用程序来获得某种独特的价值?

C# 我如何编写Android应用程序来获得某种独特的价值?,c#,android,xamarin,serial-number,imei,C#,Android,Xamarin,Serial Number,Imei,我需要在我的android应用程序中有一些代码,以获得某种独特的值(手机特有的值)。我将Xamarin/C#环境与Visual Studio结合使用。我知道并不是所有的android手机都可以通过程序访问手机号码 我目前的方法是使用Android.Telephony.TelephonyManager类 Android.Telephony.TelephonyManager管理器=null; manager=activity.GetSystemService(Android.Content.Cont

我需要在我的android应用程序中有一些代码,以获得某种独特的值(手机特有的值)。我将Xamarin/C#环境与Visual Studio结合使用。我知道并不是所有的android手机都可以通过程序访问手机号码

我目前的方法是使用Android.Telephony.TelephonyManager类

Android.Telephony.TelephonyManager管理器=null;
manager=activity.GetSystemService(Android.Content.Context.TelephonyService);
//[requirepermission(“android.permission.READ\u PHONE\u STATE”)]
imei_value=manager.imei;
meid_值=管理器。梅伊德;
运营商=manager.NetworkOperatorName;
country=manager.NetworkCountryIso;
sn=manager.SimSerialNumber;
初始化=真;
调试(“调试”,“初始化电话”);
Log.Debug(“Debug”,“carrier:+carrier”);
Log.Debug(“调试”,“国家:+国家”);
Log.Debug(“调试”,“串行:[“+sn+”]”);
Log.Debug(“Debug”,“MEID:[“+MEID_value+”]);
Log.Debug(“调试”,“IMEI:[“+IMEI_值+”]);
Log.Debug(“Debug”,“MEID(2):[”+manager.GetMeid(0)+“]);
Log.Debug(“Debug”,“IMEI(2):[”+manager.GetImei(0)+“]);
Log.Debug(“调试”,“电话:[“+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

我需要在我的android应用程序中有一些代码,以获得某种独特的值(手机特有的值)

一种方法是,可以使用TelephonyManager.DeviceId属性获取设备Id

 Android.Telephony.TelephonyManager manager = (Android.Telephony.TelephonyManager)this.ApplicationContext.GetSystemService(Context.TelephonyService);

            string deviceIde = manager.DeviceId;
另一方面,你可以得到android.OS.Build.SERIAL,它是独一无二的。但请注意,它只是在API级别9中添加的,并且可能不会出现在所有设备上。要在早期的平台上获得唯一的ID,您需要读取MAC地址或IMEI之类的内容

string id= Android.OS.Build.Serial;
通常,尝试读取所有可能的ID,并使用可用的ID。有关详细信息,请参阅本文


如果我的回复对您有帮助,请记住将我的回复标记为回答,谢谢。

您能解释一下为什么需要使用“手机独有”的ID吗?通常,只有在“需要[移动]运营商相关功能”的情况下,才适合使用硬件ID。(特别是关于IMEI,请参见RFC 7254第8节;请特别注意,IMEI和序列号不适用于识别用户,因为设备可以将所有权从一个用户更改为另一个用户。)我听说,一般来说,manager.Line1Number不能保证提供数字(如果手机号码不在SIM卡上)。我可以要求用户提供他/她的电话号码,但之后需要相信用户输入的电话号码是准确/诚实的。我需要一种识别phone.manager.DeviceId的备份方法。已经弃用了。但是Android.OS.Build.Serial代表了一种可能,这对我来说是新闻!我会尝试一下,然后发布结果。他说结果是:11-13 16:00:42.742 D/DEBUG(32219):初始化手机11-13 16:00:42.742 D/DEBUG(32219):运营商:Verizon 11-13 16:00:42.742 D/DEBUG(32219):国家:美国11-13 16:00:42.742 D/DEBUG(32219):序列:[未知]11-13 16:00:42.756 D/DEBUG(32219):序列[2]:[]11-13 16:00:42.756 D/DEBUG(32219):IMEI:[]11-13 16:00:42.761 D/DEBUG(32219):MEID(2):[]11-13 16:00:42.771 D/DEBUG(32219):IMEI(2):[]11-13 16:00:42.781 D/DEBUG(32219):phone:[xxx866xxx]生成的结果。Serial是字符串“未知”@Gary,虽然manager.DeviceId已被弃用,但我也可以从中获得价值。我不确定您的第二次回复。对于Android.OS.Build.Serial,它可能不会出现在所有设备上。