Mobilidade Sem Limites II: Acessando APIs do Android®

Imagem_001

Neste post anterior, mostramos a facilidade de se acessar diretamente a API dos sistemas operacionais móveis (Android ou iOS), para termos acesso a serviços que não estejam disponíveis na biblioteca padrão do Magic xpa.

neste vídeo, mostramos que a versão 2.5 do Magic xpa facilitou ainda mais este trabalho, com a nova função ClientNativeCodeExecute().

Agora, vamos combinar as duas coisas e mostrar mais um exemplo de como utilizar estes recursos para melhorar ainda mais nossas aplicações móveis.

Considerando que a estratégia Magic Mobile é baseada na arquitetura Magic RIA, é praticamente inevitável que estas apps possuam dentro de seu fluxo de execução, rotinas para sincronizar dados entre o cliente e o servidor.

Algumas sincronizações, como os metadados da aplicação, são automáticas.

Outras, como os dados produzidos pelo uso da app, são referentes a regras de negócio, e por isso, controladas por nós (desenvolvedores).

Pois bem: imaginando que tenhamos um processo na app para enviar ao servidor, dados capturados pelo usuário (exemplo: pedidos de venda), é conveniente sabermos se o dispositivo (tablet ou smartphone) possui ou não conectividade (internet) antes de acionarmos esta rotina.

Nós poderíamos tentar realizar o envio e através da função ServerLastAccessStatus() ou do evento Unavailable Server, saber se a operação foi bem sucedida ou não.

Mas não é tão eficiente quanto testar a conectividades antes de começar.

Até porque, se a conectividade existente for de baixa qualidade (conexão 2G, por exemplo), podemos querer abortar o processo de sincronização ou alertar o usuário e deixá-lo decidir  se quer prosseguir com a ação ou aguardar até conseguir uma conexão melhor.

Em cima dessa ideia, vejamos uma rotina Android que pode ser adicionada ao Magic xpa Client, para nos informar se existe conexão internet disponível, e qual o seu tipo.

Criamos um arquivo chamado

 

Network.java

 

E colocamos na pasta “RIAModules\Android\Source\src

Imagem_002

Nele, codificamos uma classe com um método estático que realize a verificação e nos informe os detalhes da conexão atualmente existente:

 

package com.magicsoftware.magicdev;
 import com.magicsoftware.core.CoreApplication;
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 import android.telephony.TelephonyManager;
 public class Network {
 // Retornos esperados:
 // 0- No network
 // 1- 2G
 // 2- 3G
 // 3- 4G
 // 4- CDMA
 // 5- WIFI
 public static String GetType() {
 String result = "0";
 Context context = CoreApplication.getInstance().getApplicationContext();
 ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
 if ((mWifi != null) && mWifi.isConnected()) {
 // Wifi conectado
 result = "5";
 } else {
 ConnectivityManager connManager1 = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
 NetworkInfo mMobile = connManager1.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
 if ((mMobile != null) && mMobile.isConnected()) {
 // Internet conectada
 result = "1"; // 2G
 switch(mMobile.getSubtype()) {
 // As opções abaixo podem ser bem mais detalhadas
 case TelephonyManager.NETWORK_TYPE_CDMA:
 result = "4"; // CDMA
 break;
 case TelephonyManager.NETWORK_TYPE_LTE:
 case TelephonyManager.NETWORK_TYPE_HSPAP:
 result = "3"; // 4G
 break;
 case TelephonyManager.NETWORK_TYPE_HSDPA:
 case TelephonyManager.NETWORK_TYPE_HSPA:
 case TelephonyManager.NETWORK_TYPE_HSUPA:
 result = "2"; // 3G
 break;
 default:
 break;
 }
 }
 }
 return result;
 }
 }
 // fim

 

Devemos agora realizar a compilação de novo client Magic xpa. Para detalhes de todo o procedimento de compilação, reveja nosso Tutorial Mobile.

Com este novo client, podemos então executar a função:

ClientNativeCodeExecute(‘Network.GetType’, ‘A’)

Para sabermos qual o tipo de conexão está disponível:

Imagem_003

 

Os retornos possíveis são:

 

0’- Sem conexão

1’- 2G

2’- 3G

3’- 4G

4’- CDMA

5’- WIFI

NOTA: A função ClientNativeCodeExecute() do Magic xpa está disponível tanto para iOS quanto para Android.

Manoel Frederico Silva – Gerente de Produto e Evangelista de Tecnologia – Magic Brasil
Manoel Frederico Silva – Gerente de Produto e Evangelista de Tecnologia – Magic Brasil

2 comentários

  1. Boa tarde! a função ClientNativeCodeExecute(), é obrigatório sempre enviar um argumento? Estava testando um retorno de string, apenas chamando a função no comando do java, só para trazer uma string fixa definida no java mesmo mas não funciona.

    1. Olá. Não, você pode usar o identificador ‘0’ para indicar um VOID, como por exemplo: ClientNativeCodeExecute(‘MyClass.MyMethReturnSTR’, ‘0’).
      Isso representa uma função que não recebe nenhum argumento, e retorna uma string.

Deixe um comentário para Manoel Frederico Silva Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *