Obtendo o IMEI do dispositivo

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” .

1

 

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);

view raw
MainActivity.cs
hosted with ❤ by GitHub

 

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);
}

view raw
MainActivity.cs
hosted with ❤ by GitHub

 

Obtendo IMEI

Em seu projeto compartilhado, crie a interface IServiceImei como demonstrado a seguir.

2

namespace DemoImei
{
public interface IServiceImei
{
string GetImei();
}
}

view raw
IServiceImei.cs
hosted with ❤ by GitHub


 

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 .

3

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;
}
}
}
}

view raw
ServiceImei.cs
hosted with ❤ by GitHub

 

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>

view raw
MainPage.xaml
hosted with ❤ by GitHub

 

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();
}
}
}

view raw
MainPage.xaml.cs
hosted with ❤ by GitHub

 

 

Resultado

ezgif.com-gif-maker (1)

 

Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.

icongithub

3 comentários em “Obtendo o IMEI do dispositivo

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s