Usando bibliotecas nativas do Android
Neste exemplo o projeto principal do Xamarin Forms tem o nome "XamarinTest".
Na solution, crie um projeto do tipo "Android Bindings Library (Xamarin)" (em português: "Biblioteca de Associações"). Neste exemplo, o projeto recebeu o nome "SystemUtilities".
Adicione o arquivo da biblioteca do Android (arquivo .aar
) à pasta Jars
do projeto de Bindings. Neste exemplo, a biblioteca tem o nome SystemUtilities.aar
.
Clique com o botão direito no arquivo SystemUtilities.aar
, clique em "Properties".
Na propriedade Build Action
, selecione a opção LibraryProjectZip
.
No projeto "XamarinTest.Android" (ou seu equivalente NOME_DO_PROJETO.Android), crie um arquivo .cs
com a classe "SystemUtilitiesAdapter_Android". Esta classe será um wrapper envolvendo as chamadas às classes da biblioteca .aar
do Android. Esta classe deve:
- Incluir o atributo
[assembly: Dependency(typeof(SystemUtilitiesAdapter_Android))]
- Herdar da classe
Java.Lang.Object
- Implementar a interface
ISystemUtilitiesAdapter
A classe, então, deve ficar assim:
| [assembly: Dependency(typeof(SystemUtilitiesAdapter_Android))]
namespace XamarinTest.Droid
{
public class SystemUtilitiesAdapter_Android : Java.Lang.Object, ISystemUtilitiesAdapter
{
/* Métodos aqui */
}
|
A interface ISystemUtilitiesAdapter
deve ser definida no projeto principal, por exemplo:
Esta interface define os métodos que serão expostos pelo wrapper adaptador.
A biblioteca SystemUtilities.aar
possui outros métodos além dos mostrados aqui, mas este adaptador de exemplo só expõe os 5 métodos mostrados na figura acima.
A implementação completa da classe ficaria assim:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | using System;
using Com.Victorvision.Androidsystemutilities;
using Xamarin.Forms;
using XamarinTest.Droid;
using XamarinTest.Views;
/* Este atributo registra esta classe como uma dependência que pode ser usada
na aplicação principal */
[assembly: Dependency(typeof(SystemUtilitiesAdapter_Android))]
namespace XamarinTest.Droid
{
public class SystemUtilitiesAdapter_Android : Java.Lang.Object, ISystemUtilitiesAdapter
{
public void HideBars()
{
SystemUtilities.HideBars();
}
public void ShowBars()
{
SystemUtilities.ShowBars();
}
public void SoundBuzzer(int duration)
{
SystemUtilities.SoundBuzzer(duration);
}
public void TurnBuzzerOn()
{
SystemUtilities.TurnBuzzerOn();
}
public void TurnBuzzerOff()
{
SystemUtilities.TurnBuzzerOff();
}
}
}
|
Esta classe, agora, pode ser utilizada no projeto principal, resolvendo a dependência nos views
que a utilização, por exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 | using System;
using System.ComponentModel;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
namespace XamarinTest.Views
{
public partial class AboutPage : ContentPage
{
/* Referência a uma instância do SystemUtilitiesAdapter */
private readonly ISystemUtilitiesAdapter _systemUtilitiesAdapter;
public AboutPage()
{
InitializeComponent();
/* Resolvendo a dependência e inicializando uma instância do SystemUtilitiesAdapter */
_systemUtilitiesAdapter = DependencyService.Get<ISystemUtilitiesAdapter>();
}
/* Event handlers dos botões na UI que usam a biblioteca */
private void Button5_OnClicked(object sender, EventArgs e)
{
_systemUtilitiesAdapter.ShowBars();
}
private void Button6_OnClicked(object sender, EventArgs e)
{
_systemUtilitiesAdapter.HideBars();
}
private void Button7_OnClicked(object sender, EventArgs e)
{
_systemUtilitiesAdapter.SoundBuzzer(100);
}
private void Button8_OnClicked(object sender, EventArgs e)
{
_systemUtilitiesAdapter.TurnBuzzerOn();
}
private void Button9_OnClicked(object sender, EventArgs e)
{
_systemUtilitiesAdapter.TurnBuzzerOff();
}
}
}
|
| <!-- Um botão na UI, arquivo AboutPage.xaml -->
<Button Margin="0,10,0,0"
Text="Sound Buzzer"
Clicked="Button7_OnClicked"
BackgroundColor="{StaticResource Primary}"
TextColor="White" />
|
Desta maneira, qualquer biblioteca do Android .aar
pode ser utilizada nativamente no Xamarin Forms. Basta seguir estes passos e substituir os nomes adequadamente.