Abra outro aplicativo por conta própria (intenção)
Sei como atualizar meus próprios programas e como abrir programas usando o Uri predefinido (para sms ou e-mail, por exemplo)
Preciso saber como posso criar um Intent para abrir o MyTracks ou qualquer outro aplicativo que eu não saiba quais intenções eles escutam.
Eu obtive essas informações do DDMS, mas não consegui transformar isso em um Intent que eu possa usar. Isso é obtido ao abrir o MyTracks manualmente.
— AndersWid
Em primeiro lugar, o conceito de "aplicativo" no Android é um pouco extenso.
Um aplicativo - tecnicamente um processo - pode ter várias atividades, serviços, provedores de conteúdo e / ou ouvintes de transmissão. Se pelo menos um deles estiver em execução, o aplicativo estará em funcionamento (o processo).
Então, o que você precisa identificar é como deseja "iniciar o aplicativo".
Ok ... aqui está o que você pode experimentar:
Crie uma intenção com action=MAINecategory=LAUNCHER
Obtenha o PackageManagercontexto atual usandocontext.getPackageManager
packageManager.queryIntentActivity(<intent>, 0)onde a intenção tem category=LAUNCHER, action=MAINou packageManager.resolveActivity(<intent>, 0)para obter a primeira atividade com o main / launcher
Obtenha o que ActivityInfovocê está interessado
No ActivityInfo, obtenha o packageNameename
Finalmente, criar outra intenção com com category=LAUNCHER, action=MAIN, componentName = new ComponentName(packageName, name)esetFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
Finalmente, context.startActivity(newIntent)
— Gaurav Vaish
E se eu quisesse abrir três aplicativos separados?
A resposta do wiki da comunidade abaixo é melhor, se você souber o nome do pacote stackoverflow.com/a/7596063/379115
— Martin Belcher - AtWrk 10/10
Como você pode transmitir dados entre o aplicativo de chamada e o aplicativo iniciado? Encontrei 'Intent.putExtra ()', mas não sei como recuperar os dados extras no aplicativo iniciado.
getPackageManager().getLaunchIntentForPackage()já faz tudo isso por você github.com/android/platform_frameworks_base/blob/master/core/…
— jrub 6/15
Eu tenho trabalhado assim,
— Anonsage
porque getLaunchIntentForPackage ("nome do pacote de aplicativos") pode causar exceção.
— XTR
Esta é uma ótima resposta, pegue a exceção e faça o que você precisa, notifique o usuário etc. #
— IT-Dan
Para não ser um defensor, mas não há razão para alocar um novo Intent na primeira linha, desde que você use o resultado da getLaunchIntentForPackagechamada.
getLaunchIntentForPackage()já adiciona a categoria, consulte a fonte: github.com/android/platform_frameworks_base/blob/master/core/…
conforme sugerido nos comentários, adicione uma linha antes startActivity(intent);
— zawhtut
mas exige saber o nome da atividade
Tentei isso e ocorreu um erro ao recomendar o uso do sinalizador FLAG_ACTIVITY_NEW_TASK. Adicionei esta linha antes do startActivity e funcionou: intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
— David-hoze
@ njzk2 é fácil encontrar o nome do pacote para algo no Google Play; está ali no URL. Por exemplo: play.google.com/store/apps/…
— Da-Jin
@iceybobby sim, é fácil encontrar o nome do pacote, mas como você encontra o nome da classe da atividade a ser iniciada?
@phreakhead Você está certo. Acho que usei a solução nesta resposta: stackoverflow.com/a/8944286/1224186 para que o nome da atividade não fosse necessário e, portanto, acho que isso torna minha resposta ao njzk2 inútil aqui.
Se você já possui o nome do pacote que deseja ativar, pode usar o seguinte código, que é um pouco mais genérico:
Descobri que funciona melhor nos casos em que a atividade principal não foi encontrada pelo método regular de iniciar a atividade PRINCIPAL.
— Muzikant
Melhor resposta para mim :-) útil para mim. Graças
— Jalpesh Khakhi
Isto é perfeito pra mim. Muito obrigado Muzikant:)
Este é o código da minha base de soluções na solução MasterGaurav:
Usando a solução inversus, ampliei o snippet com uma função, que será chamada quando o aplicativo desejado não estiver instalado no momento. Por isso, funciona como: Execute o aplicativo pelo nome do pacote. Se não for encontrado, abra o Android market - o Google play para este pacote .
E é usado assim:
— peter.bartos
Usa isto :
Tem alguma ideia? abra um test.apk em vez de instalado no armazenamento de dispositivos no aplicativo existente. dicas ao clicar em um botão para almoço test.apk apps que foram armazenados no projeto existente. obrigado antecipadamente.
— Selim Raza
Abra o aplicativo, se existir, ou abra o aplicativo Play Store para instalá-lo:
— Flinbor
deve ser if (i! = null)
— vallllll
Para iniciar outra atividade de aplicativo em meu aplicativo Activity. Está funcionando bem pra mim.
O código abaixo funcionará se o outro aplicativo já estiver instalado no seu telefone, caso contrário, não será possível redirecionar o formulário de um aplicativo para outro. Portanto, verifique se o aplicativo foi iniciado ou não
— KCN
Por favor, não escreva várias respostas quase idênticas à mesma pergunta. Use o link "editar" abaixo da resposta e altere o original.
— 23615 AdrianHHH
// Isso funciona no Android Lollipop 5.0.2
— Anil Kongovi
Como os aplicativos não têm permissão para alterar muitas configurações do telefone, você pode abrir uma atividade de configurações como qualquer outro aplicativo.
Observe a saída do LogCat depois de modificar a configuração manualmente:
Em seguida, use isso para exibir a página de configurações do seu aplicativo:
— Tary
Para o nível 3+ da API, nada mais que uma linha de código:
Retornar uma intenção de inicialização do CATEGORY_INFO (aplicativos sem atividade do iniciador, papéis de parede, por exemplo, costumam usar isso para fornecer algumas informações sobre o aplicativo) e, se não o encontrar, retorna o pacote CATEGORY_LAUNCH, se existir.
— Renascienza
Se você está tentando iniciar um SERVIÇO em vez de uma atividade, isso funcionou para mim:
Se você usar o método intent.setComponent (...) conforme mencionado em outras respostas, poderá receber um aviso "Intenções implícitas com startService não são seguras".
Como alternativa, você também pode abrir a intenção do seu aplicativo no outro aplicativo com:
onde uriestá o link direto para o outro aplicativo
— electrobabe
— Lurzapps
Iniciar um aplicativo de outro aplicativo no Android
— Ashutosh Srivastava
Se você deseja abrir outro aplicativo e ele não estiver instalado, envie-o para a Google App Store para fazer o download
Primeiro, crie o método openOtherApp, por exemplo
— Vladimir Salguero
Experimente este código, espero que isso ajude você. Se este pacote estiver disponível, ele abrirá o aplicativo ou abrirá a loja de downloads.