Android: resposta da atividade do mercado
-
27-09-2019 - |
Pergunta
Estou tentando criar um aplicativo que abre a página de mercado do Android do aplicativo selecionado e permite que o usuário faça o download. Eu usei abaixo a intenção de abrir o mercado.
Intent intent = new Intent (Intent.ACTION_VIEW);
intent.setData (Uri.parse ("market://details?id=" + PackageName ));
intent.setFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult (intent, 13);
Mas eu sempre recebo o código de resultado 0 no OnactivityResult.stacktrace diz:
I/ActivityManager( 79): Starting activity: Intent { act=android.intent.action.VIEW dat=market://details?id=com.google.android.apps.unveil flg=0x10000000 cmp=com.an
droid.vending/.AssetInfoActivity }
W/ActivityManager( 79): Activity is launching as a new task, so cancelling activity result.
O que eu quero é que o mercado me devolva alguma resposta que o usuário baixou o aplicativo ou apenas cancelou.
EDITAR: @Commonsware Estou tentando acessar o pacote adicionado aqui, mas não consigo imaginar o que deve ser fundamental para obter o nome do packagene de extras de action_package_added
public class ServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Do this when the system sends the intent
Bundle b = intent.getExtras();
String packagename = b.get(?); //cant figure what should be key to get packagename //from extras
}
}
Solução
O mercado Android não está configurado para apoiar startActivityForResult()
. Além disso, lembre -se de que o download e a instalação acontecem de forma assíncrona (ou seja, cliques de usuários instalam e o download ocorre em segundo plano, e eles terminam a instalação através do Notification
).
Outras dicas
@Commonsware excelente!
Sua solução se mostrou útil e também me levou a outra página muito útil http://devdaily.com/java/jwarehouse/android/core/java/com/android/internal/content/packagemonitor.java.shtml
Abaixo está um snippet de código da fonte de link acima para obter o nome do pacote do aplicativo atualmente instalado da intenção de transmissão:
String getPackageName(Intent intent) {
Uri uri = intent.getData();
String pkg = uri != null ? uri.getSchemeSpecificPart() : null;
return pkg;
}
Obrigado Commonsware.