fbpx

Checar se pacote está instalado no Android com Delphi XE7

Verificando se um apk já está instalado

Volta e meia precisamos interagir nossa aplicação com outras aplicações, mas como saber se esta aplicação que precisamos chamar está ou não instalada no Android.

Nesta postagem veremos como checar com uma aplicação Delphi XE7 se um determinado pacote encontra-se instalado no dispositivo Android.

Contextualizando com um exemplo prático

Digamos que precisamos verificar através de nossa aplicação Android desenvolvida com Delphi XE7 se o dispositivo possui instalado o pacote da Aplicação de Exemplo de minha apresentação na Embarcadero Conference BR 2014. Esta aplicação lembrando que esta aplicação encontra-se disponível para download na Google Play com o nome de Intents XE7.

Aplicação de Exemplo Intents XE7

Direto ao Delphi XE7

Iniciaremos o Delphi XE7 e criaremos uma nova aplicação Delphi  Multi-Device em branco, e como temos apenas fins didáticos vamos apenas inserir 1 Button e 1 Image. Configure as propriedades dos componentes como segue:

  • Image1
    • MultiResBitmap –> [Uma imagem de sua preferência]
    • WrapMode –> Stretch
  • Button1
    • Text –> ‘Verificar existência Intents XE7’

Após isso feito teremos nossa aplicação com a tela bem próxima à imagem abaixo:

Layout da Aplicação

Codificando

Teremos apenas o clique do botão sendo responsável por executar a verificação da existência do aplicativo desejado. Esta verificação se dará consultando o pacote, Package Name,  da aplicação Intents XE7 já encontra-se instalado no dispositivo. Lembrando que o pacote em questão é: br.landersongomes.Intent_xe7 .

Na cláusula uses da seção implementation adicionamos as seguinte units:

implementation

{$R *.fmx}
uses
  Androidapi.Jni.GraphicsContentViewText,
  Androidapi.Helpers,
  Androidapi.NativeActivity,
  Androidapi.JNIBridge,
  IdURI,
  Androidapi.Jni.Net;

Para o clique do botão teremos o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);
var
 Intent : JIntent;
 Info: JApplicationInfo;
begin
  try
    Info := SharedActivityContext.getPackageManager.getApplicationInfo(
            StringToJString('br.landersongomes.Intent_xe7'),0);
    if Info.packageName.equals(StringToJString('br.landersongomes.Intent_xe7')) then
      begin
        ShowMessage('Intents XE7 já instalado');
      end;
  except on E: Exception do
    begin
      Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW);
      Intent.setData(TJnet_Uri.JavaClass.parse(StringToJString(
        'https://play.google.com/store/apps/details?id=br.landersongomes.Intent_xe7')));
      Intent.setPackage(StringToJString('com.android.vending'));
      SharedActivity.startActivity(intent);
    end;
  end;

end;

 Entendendo o código

Bem, agora que já fizemos a parte difícil… vamos entender a que se propõe o código implementado. Ao clicar no botão a aplicação receberá as informações da aplicação cujo pacote tem o nome que estamos buscando, no nosso caso: br.landersongomes.Intent_xe7 . Se esta informação trazida for igual ao nome que informamos agora através de uma string: ‘br.landersongomes.Intent_xe7’, será exibida uma mensagem de que a aplicação já encontra-se instalada no dispositivo. Caso não encontre ocorrerá uma Exception, com isso vamos sugerir que nossa aplicação vá ao Google Play e mostre este pacote lá para que possamos efetuar seu download.

Rodando e conferindo o resultado

Execute a aplicação e confira o resultado, na prática fica mais fácil a compreensão!

Veja o funcionamento detalhado também no vídeo abaixo:

Até a próxima!!!

,

Comente