J'ai ouvert le Google Play Store en utilisant le code suivant
Intent i = new Intent(Android.content.Intent.ACTION_VIEW);
i.setData(Uri.parse("https://play.google.com/store/apps/details?id=my packagename "));
startActivity(i);.
Mais il me montre une vue d'action complète pour sélectionner l'option (navigateur/Play Store). Je dois ouvrir l'application directement dans le Play Store.
Vous pouvez le faire en utilisant le préfixe market://
.
final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (Android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
Nous utilisons un bloc try/catch
ici car une Exception
sera émise si le Play Store n'est pas installé sur le périphérique cible.
NOTE: toute application peut s'inscrire comme étant capable de gérer l'URI market://details?id=<appId>
, si vous souhaitez cibler spécifiquement Google Play, vérifiez la réponse Berťák
Beaucoup de réponses suggèrent d'utiliserUri.parse("market://details?id=" + appPackageName))
pour ouvrir Google Play, mais je pense que cela est insuffisant en fait:
Certaines applications tierces peuvent utiliser leurs propres filtres d'intention avec le code "market://"
défini. Elles peuvent donc traiter l'Uri fourni au lieu de Google Play (j'ai connu cette situation avec l'application exemple, SnapPea). La question est "Comment ouvrir le Google Play Store?", Je suppose donc que vous ne voulez ouvrir aucune autre application. Veuillez également noter que, par exemple, La note de l'application n'est pertinente que dans l'application GP Store, etc.
Pour ouvrir Google Play ET UNIQUEMENT Google Play, j'utilise cette méthode:
public static void openAppRating(Context context) {
// you can also use BuildConfig.APPLICATION_ID
String appId = context.getPackageName();
Intent rateIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id=" + appId));
boolean marketFound = false;
// find all applications able to handle our rateIntent
final List<ResolveInfo> otherApps = context.getPackageManager()
.queryIntentActivities(rateIntent, 0);
for (ResolveInfo otherApp: otherApps) {
// look for Google Play application
if (otherApp.activityInfo.applicationInfo.packageName
.equals("com.Android.vending")) {
ActivityInfo otherAppActivity = otherApp.activityInfo;
ComponentName componentName = new ComponentName(
otherAppActivity.applicationInfo.packageName,
otherAppActivity.name
);
// make sure it does NOT open in the stack of your activity
rateIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// task reparenting if needed
rateIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// if the Google Play was already open in a search result
// this make sure it still go to the app page you requested
rateIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// this make sure only the Google Play app is allowed to
// intercept the intent
rateIntent.setComponent(componentName);
context.startActivity(rateIntent);
marketFound = true;
break;
}
}
// if GP not present on device, open web browser
if (!marketFound) {
Intent webIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id="+appId));
context.startActivity(webIntent);
}
}
Le fait est que lorsqu'un plus grand nombre d'applications que Google Play peuvent ouvrir notre objectif, la boîte de dialogue de sélection de l'application est ignorée et l'application GP est lancée directement.
UPDATE: Il semble parfois que l'application GP n'est ouverte que sans ouvrir le profil de l'application. Comme l'a suggéré TrevorWiley dans son commentaire, Intent.FLAG_ACTIVITY_CLEAR_TOP
pourrait résoudre le problème. (Je ne l'ai pas encore testé moi-même ...)
Voir cette réponse pour comprendre ce que fait Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
.
Allez sur le lien officiel Android Developer en tant que tutoriel, étape par étape, voyez et obtenez le code de votre paquet d'application de Play Store s'il existe ou si les applications Play Store n'existent pas, puis ouvrez l'application à partir du navigateur Web.
Lien officiel développeur Android
http://developer.Android.com/distribute/tools/promote/linking.html
Liaison à une page d'application
Depuis un site Web: http://play.google.com/store/apps/details?id=<package_name>
Depuis une application Android: market://details?id=<package_name>
Lien vers une liste de produits
Depuis un site Web: http://play.google.com/store/search?q=pub:<publisher_name>
Depuis une application Android: market://search?q=pub:<publisher_name>
Lien vers un résultat de recherche
Depuis un site Web: http://play.google.com/store/search?q=<search_query>&c=apps
Depuis une application Android: market://search?q=<seach_query>&c=apps
essaye ça
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.Android"));
startActivity(intent);
Toutes les réponses ci-dessus ouvrent Google Play dans une nouvelle vue de la même application, si vous voulez réellement ouvrir Google Play (ou toute autre application) de manière indépendante:
Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.Android.vending");
// package name and activity
ComponentName comp = new ComponentName("com.Android.vending",
"com.google.Android.finsky.activities.LaunchUrlHandlerActivity");
launchIntent.setComponent(comp);
// sample to open facebook app
launchIntent.setData(Uri.parse("market://details?id=com.facebook.katana"));
startActivity(launchIntent);
L'important est que Google Play ou toute autre application ouvre en fait indépendamment.
La plupart de ce que j'ai vu utilise l'approche des autres réponses et ce n'est pas ce dont j'avais besoin, espérons-le, cela aide quelqu'un.
Cordialement.
Vous pouvez vérifier si Google Play Store app est installé et, le cas échéant, utiliser le protocole "market: //" .
final String my_package_name = "........." // <- HERE YOUR PACKAGE NAME!!
String url = "";
try {
//Check whether Google Play Store is installed or not:
this.getPackageManager().getPackageInfo("com.Android.vending", 0);
url = "market://details?id=" + my_package_name;
} catch ( final Exception e ) {
url = "https://play.google.com/store/apps/details?id=" + my_package_name;
}
//Open the app page in Google Play Store:
final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(intent);
use market: //
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + my_packagename));
Alors que la réponse d'Eric est correcte et que le code de Berťák fonctionne également. Je pense que cela combine les deux plus élégamment.
try {
Intent appStoreIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName));
appStoreIntent.setPackage("com.Android.vending");
startActivity(appStoreIntent);
} catch (Android.content.ActivityNotFoundException exception) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
En utilisant setPackage
, vous obligez l'appareil à utiliser le Play Store. Si aucun Play Store n'est installé, la Exception
sera interceptée.
Tu peux faire:
final Uri marketUri = Uri.parse("market://details?id=" + packageName);
startActivity(new Intent(Intent.ACTION_VIEW, marketUri));
obtenir la référence ici :
Vous pouvez également essayer l'approche décrite dans la réponse acceptée à cette question: Impossible de déterminer si Google Play Store est installé ou non sur un appareil Android
Solution prête à l'emploi:
public class GoogleServicesUtils {
public static void openAppInGooglePlay(Context context) {
final String appPackageName = context.getPackageName();
try {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (Android.content.ActivityNotFoundException e) { // if there is no Google Play on device
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
}
}
Basé sur la réponse d'Eric.
Très tard dans le parti Docs officiels sont ici. Et le code décrit est
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(
"https://play.google.com/store/apps/details?id=com.example.Android"));
intent.setPackage("com.Android.vending");
startActivity(intent);
Lorsque vous configurez cette intention, transmettez "com.Android.vending"
à Intent.setPackage()
afin que les utilisateurs voient les détails de votre application dans application Google Play Store au lieu d'un sélecteur . Pour KOTLIN.
val intent = Intent(Intent.ACTION_VIEW).apply {
data = Uri.parse(
"https://play.google.com/store/apps/details?id=com.example.Android")
setPackage("com.Android.vending")
}
startActivity(intent)
Si vous avez publié une application instantanée à l'aide de Google Play Instant, vous pouvez lancer l'application comme suit:
Intent intent = new Intent(Intent.ACTION_VIEW);
Uri.Builder uriBuilder = Uri.parse("https://play.google.com/store/apps/details")
.buildUpon()
.appendQueryParameter("id", "com.example.Android")
.appendQueryParameter("launch", "true");
// Optional parameters, such as referrer, are passed onto the launched
// instant app. You can retrieve these parameters using
// Activity.getIntent().getData().
uriBuilder.appendQueryParameter("referrer", "exampleCampaignId");
intent.setData(uriBuilder.build());
intent.setPackage("com.Android.vending");
startActivity(intent);
Pour KOTLIN
val uriBuilder = Uri.parse("https://play.google.com/store/apps/details")
.buildUpon()
.appendQueryParameter("id", "com.example.Android")
.appendQueryParameter("launch", "true")
// Optional parameters, such as referrer, are passed onto the launched
// instant app. You can retrieve these parameters using Activity.intent.data.
uriBuilder.appendQueryParameter("referrer", "exampleCampaignId")
val intent = Intent(Intent.ACTION_VIEW).apply {
data = uriBuilder.build()
setPackage("com.Android.vending")
}
startActivity(intent)
Comme la documentation officielle utilise https://
au lieu de market://
, cela combine la réponse d'Eric et de M3-n50 avec la réutilisation du code (ne vous répétez pas):
Intent intent = new Intent(Intent.ACTION_VIEW)
.setData(Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
try {
startActivity(new Intent(intent)
.setPackage("com.Android.vending"));
} catch (Android.content.ActivityNotFoundException exception) {
startActivity(intent);
}
Il essaie de s'ouvrir avec l'application GPlay s'il existe et revient aux valeurs par défaut.
Si vous souhaitez ouvrir Google Play Store à partir de votre application, utilisez cette commande directement: market://details?gotohome=com.yourAppName
, les pages Google Play de votre application s'ouvriront.
Afficher toutes les applications d'un éditeur spécifique
Rechercher des applications utilisant la requête sur son titre ou sa description
public void launchPlayStore(Context context, String packageName) {
Intent intent = null;
try {
intent = new Intent(Intent.ACTION_VIEW);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setData(Uri.parse("market://details?id=" + packageName));
context.startActivity(intent);
} catch (Android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
}
}
Kotlin:
Extension:
fun Activity.openAppInGooglePlay(){
val appId = BuildConfig.APPLICATION_ID
try {
this.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appId")))
} catch (anfe: ActivityNotFoundException) {
this.startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id=$appId")
)
)
}}
Méthode:
fun openAppInGooglePlay(activity:Activity){
val appId = BuildConfig.APPLICATION_ID
try {
activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appId")))
} catch (anfe: ActivityNotFoundException) {
activity.startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id=$appId")
)
)
}
}
Voici le code final des réponses ci-dessus qui tente d’abord d’ouvrir l’application à l’aide de l’application Google Play Store et plus précisément de Play Store. En cas d’échec, la vue d’action sera lancée à l’aide de la version Web: Crédits à @Eric, @ Jonathan Caballero
public void goToPlayStore() {
String playStoreMarketUrl = "market://details?id=";
String playStoreWebUrl = "https://play.google.com/store/apps/details?id=";
String packageName = getActivity().getPackageName();
try {
Intent intent = getActivity()
.getPackageManager()
.getLaunchIntentForPackage("com.Android.vending");
if (intent != null) {
ComponentName androidComponent = new ComponentName("com.Android.vending",
"com.google.Android.finsky.activities.LaunchUrlHandlerActivity");
intent.setComponent(androidComponent);
intent.setData(Uri.parse(playStoreMarketUrl + packageName));
} else {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse(playStoreMarketUrl + packageName));
}
startActivity(intent);
} catch (ActivityNotFoundException e) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(playStoreWebUrl + packageName));
startActivity(intent);
}
}
Ma fonction d'extension kotlin à cet effet
fun Context.canPerformIntent(intent: Intent): Boolean {
val mgr = this.packageManager
val list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
return list.size > 0
}
Et dans ton activité
val uri = if (canPerformIntent(Intent(Intent.ACTION_VIEW, Uri.parse("market://")))) {
Uri.parse("market://details?id=" + appPackageName)
} else {
Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)
}
startActivity(Intent(Intent.ACTION_VIEW, uri))
J'ai combiné les réponses Berťák et Stefano Munarini pour créer une solution hybride prenant en charge Noter cette application et Afficher plus d'applications scenario.
/**
* This method checks if GooglePlay is installed or not on the device and accordingly handle
* Intents to view for rate App or Publisher's Profile
*
* @param showPublisherProfile pass true if you want to open Publisher Page else pass false to open APp page
* @param publisherID pass Dev ID if you have passed PublisherProfile true
*/
public void openPlayStore(boolean showPublisherProfile, String publisherID) {
//Error Handling
if (publisherID == null || !publisherID.isEmpty()) {
publisherID = "";
//Log and continue
Log.w("openPlayStore Method", "publisherID is invalid");
}
Intent openPlayStoreIntent;
boolean isGooglePlayInstalled = false;
if (showPublisherProfile) {
//Open Publishers Profile on PlayStore
openPlayStoreIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("market://search?q=pub:" + publisherID));
} else {
//Open this App on PlayStore
openPlayStoreIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("market://details?id=" + getPackageName()));
}
// find all applications who can handle openPlayStoreIntent
final List<ResolveInfo> otherApps = getPackageManager()
.queryIntentActivities(openPlayStoreIntent, 0);
for (ResolveInfo otherApp : otherApps) {
// look for Google Play application
if (otherApp.activityInfo.applicationInfo.packageName.equals("com.Android.vending")) {
ActivityInfo otherAppActivity = otherApp.activityInfo;
ComponentName componentName = new ComponentName(
otherAppActivity.applicationInfo.packageName,
otherAppActivity.name
);
// make sure it does NOT open in the stack of your activity
openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// task reparenting if needed
openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// if the Google Play was already open in a search result
// this make sure it still go to the app page you requested
openPlayStoreIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// this make sure only the Google Play app is allowed to
// intercept the intent
openPlayStoreIntent.setComponent(componentName);
startActivity(openPlayStoreIntent);
isGooglePlayInstalled = true;
break;
}
}
// if Google Play is not Installed on the device, open web browser
if (!isGooglePlayInstalled) {
Intent webIntent;
if (showPublisherProfile) {
//Open Publishers Profile on web browser
webIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/search?q=pub:" + getPackageName()));
} else {
//Open this App on web browser
webIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName()));
}
startActivity(webIntent);
}
}
Utilisation
@OnClick(R.id.ll_more_apps) public void showMoreApps() { openPlayStore(true, "Hitesh Sahu"); }
@OnClick(R.id.ll_rate_this_app) public void openAppInPlayStore() { openPlayStore(false, ""); }
Ce lien ouvrira automatiquement l'application sur Market: // si vous utilisez Android et dans le navigateur si vous utilisez un PC.
https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Une version de kotlin avec une syntaxe de repli et actuelle
fun openAppInPlayStore() {
val uri = Uri.parse("market://details?id=" + context.packageName)
val goToMarketIntent = Intent(Intent.ACTION_VIEW, uri)
var flags = Intent.FLAG_ACTIVITY_NO_HISTORY or Intent.FLAG_ACTIVITY_MULTIPLE_TASK or Intent.FLAG_ACTIVITY_NEW_TASK
flags = if (Build.VERSION.SDK_INT >= 21) {
flags or Intent.FLAG_ACTIVITY_NEW_DOCUMENT
} else {
flags or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
goToMarketIntent.addFlags(flags)
try {
startActivity(context, goToMarketIntent, null)
} catch (e: ActivityNotFoundException) {
val intent = Intent(Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id=" + context.packageName))
startActivity(context, intent, null)
}
}
fun openAppInPlayStore(appPackageName: String) {
try {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appPackageName")))
} catch (exception: Android.content.ActivityNotFoundException) {
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName")))
}
}
Peuples, n'oubliez pas que vous pourriez en tirer quelque chose de plus. Je veux dire suivi UTM par exemple. https://developers.google.com/analytics/devguides/collection/Android/v4/campaigns
public static final String MODULE_ICON_PACK_FREE = "com.example.iconpack_free";
public static final String APP_STORE_URI =
"market://details?id=%s&referrer=utm_source=%s&utm_medium=app&utm_campaign=plugin";
public static final String APP_STORE_GENERIC_URI =
"https://play.google.com/store/apps/details?id=%s&referrer=utm_source=%s&utm_medium=app&utm_campaign=plugin";
try {
startActivity(new Intent(
Intent.ACTION_VIEW,
Uri.parse(String.format(Locale.US,
APP_STORE_URI,
MODULE_ICON_PACK_FREE,
getPackageName()))).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
} catch (Android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(
Intent.ACTION_VIEW,
Uri.parse(String.format(Locale.US,
APP_STORE_GENERIC_URI,
MODULE_ICON_PACK_FREE,
getPackageName()))).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
}