Olá, neste post irei demonstrar como a sua aplicação Xamarin.Forms pode obter o IMEI do dispositivo.
Observação
O exemplo a seguir demonstra como obter o IMEI apenas na plataforma Android, pois desde a versão 7 do iOS a Apple não permite o acesso a esse tipo de informação programaticamente, de acordo com a Apple você não pode obter o número IMEI, isso vai contra as guidelines. E caso você tenha algum código que consiga obter o mesmo, esteja ciente que o seu aplicativo possui grandes chances de ser rejeitado na App Store.
Dica
Se sua necessidade é apenas obter um identificador único para cada dispositivo, recomendo utilizar o número de série. No post Informações do Dispositivo – Xamarin.Forms eu demonstro como obter o número de série e algumas outras informações do dispositivo.
Sem mais delongas, vamos ao código…
Permissão
Para obter o IMEI é necessário que o usuário nos conceda permissão, para isso instale o plugin “Plugin.Permissions” .
Inicialize o plugin adicionando a linha de código a seguir dentro do método OnCreate na classe MainActivity.
Plugin.CurrentActivity.CrossCurrentActivity.Current.Init(this, savedInstanceState); | |
Ainda na classe MainActivity, sobrescreva o método OnRequestPermissionsResult como demonstrado a seguir.
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) | |
{ | |
base.OnRequestPermissionsResult(requestCode, permissions, grantResults); | |
PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults); | |
} |
Obtendo IMEI
Em seu projeto compartilhado, crie a interface IServiceImei como demonstrado a seguir.
namespace DemoImei | |
{ | |
public interface IServiceImei | |
{ | |
string GetImei(); | |
} | |
} |
Em seu projeto .Android, crie a classe ServiceImei que herda de IServiceImei, ela será responsável por obter o IMEI do dispositivo utilizando o TelephonyManager .
using Android.Telephony; | |
using DemoImei.Droid; | |
using Xamarin.Forms; | |
[assembly: Dependency(typeof(ServiceImei))] | |
namespace DemoImei.Droid | |
{ | |
public class ServiceImei : IServiceImei | |
{ | |
public string GetImei() | |
{ | |
try | |
{ | |
TelephonyManager manager = (TelephonyManager)Forms.Context.GetSystemService(Android.Content.Context.TelephonyService); | |
return manager.Imei; | |
} | |
catch | |
{ | |
return null; | |
} | |
} | |
} | |
} |
Xaml
Crie um Label para demonstrar o IMEI obtido e um Button que irá chamar o método que obtêm o IMEI e atribuir o resultado ao Label.
<?xml version="1.0" encoding="utf-8" ?> | |
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" | |
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" | |
xmlns:local="clr-namespace:DemoImei" | |
x:Class="DemoImei.MainPage"> | |
<StackLayout HorizontalOptions="Center" | |
VerticalOptions="CenterAndExpand"> | |
<Label x:Name="LblImei" /> | |
<Button Text="Get Imei" Clicked="Button_OnClicked"/> | |
</StackLayout> | |
</ContentPage> |
C#
No método OnClicked do botão, verifique se o usuário já concedeu a permissão, caso não tenha concedido, solicite permissão ao usuário utilizando o método RequestPermissionsAsync.
Em seguida utilize injeção de dependência para utilizar o método GetImei da classe ServiceImei criada anteriormente.
using System; | |
using Plugin.Permissions; | |
using Plugin.Permissions.Abstractions; | |
using Xamarin.Forms; | |
namespace DemoImei | |
{ | |
public partial class MainPage : ContentPage | |
{ | |
public MainPage() | |
{ | |
InitializeComponent(); | |
} | |
private async void Button_OnClicked(object sender, EventArgs e) | |
{ | |
//Verify Permission | |
var status = await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Phone); | |
if (status != PermissionStatus.Granted) | |
{ | |
var results = await CrossPermissions.Current.RequestPermissionsAsync(Permission.Phone); | |
//Best practice to always check that the key exists | |
if (results.ContainsKey(Permission.Phone)) | |
status = results[Permission.Phone]; | |
} | |
//Get Imei | |
LblImei.Text = "IMEI = " + DependencyService.Get<IServiceImei>().GetImei(); | |
} | |
} | |
} |
Resultado
Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.
Muito Bom! Excelente!
CurtirCurtir
thank you so much! works great!
CurtirCurtir
Excelente saludos desde Montería Córdoba Colombia
CurtirCurtido por 1 pessoa