Bagaimana cara membuka Google Play Store langsung dari aplikasi Android saya?

569

Saya telah membuka Google Play store menggunakan kode berikut

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);.

Tapi itu menunjukkan kepada saya Tampilan Tindakan Lengkap untuk memilih opsi (browser / play store). Saya perlu membuka aplikasi di Play Store secara langsung.

Rajesh Kumar
sumber
Apakah ini menjawab pertanyaan Anda? "Nilai Aplikasi Ini" -tautan di aplikasi Google Play store di ponsel
Yoav Feuerstein

Jawaban:

1437

Anda dapat melakukan ini menggunakan market://awalan .

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)));
}

Kami menggunakan try/catchblok di sini karena sebuah Exceptionakan dilemparkan jika Play Store tidak diinstal pada perangkat target.

CATATAN : aplikasi apa pun dapat mendaftar karena mampu menangani market://details?id=<appId>Uri, jika Anda ingin secara khusus menargetkan Google Play periksa jawaban Berťák

Eric
sumber
53
jika Anda ingin mengarahkan ulang ke semua aplikasi Pengembang, gunakan market://search?q=pub:"+devNamedanhttp://play.google.com/store/search?q=pub:"+devName
Stefano Munarini
4
Solusi ini tidak berfungsi, jika beberapa aplikasi menggunakan filter maksud dengan skema "market: //" didefinisikan. Lihat jawaban saya bagaimana membuka Google Play DAN HANYA aplikasi Google Play (atau webbrowser jika GP tidak ada). :-)
Berťák
18
Untuk proyek yang menggunakan sistem pembangunan Gradle, appPackageNamesebenarnya BuildConfig.APPLICATION_ID. Tidak ada Context/ Activitydependensi, mengurangi risiko kebocoran memori.
Christian García
3
Anda masih membutuhkan konteks untuk meluncurkan niat. Context.startActivity ()
wblaschko
2
Solusi ini mengasumsikan ada niat untuk membuka browser web. Ini tidak selalu benar (seperti di Android TV) jadi berhati-hatilah. Anda mungkin ingin menggunakan intent.resolveActivity (getPackageManager ()) untuk menentukan apa yang harus dilakukan.
Coda
161

Banyak jawaban di sini menyarankan untuk digunakan Uri.parse("market://details?id=" + appPackageName)) untuk membuka Google Play, tetapi saya pikir itu sebenarnya tidak cukup :

Beberapa aplikasi pihak ketiga dapat menggunakan filter maksud sendiri dengan "market://"skema yang ditentukan , sehingga mereka dapat memproses Uri yang disediakan alih-alih Google Play (Saya mengalami situasi ini dengan aplikasi egSnapPea). Pertanyaannya adalah "Bagaimana cara membuka Google Play Store?", Jadi saya berasumsi, bahwa Anda tidak ingin membuka aplikasi lain. Harap perhatikan juga, bahwa misalnya peringkat aplikasi hanya relevan di aplikasi GP Store, dll. ...

Untuk membuka Google Play DAN HANYA Google Play saya menggunakan metode ini:

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);
    }
}

Intinya adalah ketika lebih banyak aplikasi di samping Google Play dapat membuka maksud kami, dialog pemilih aplikasi dilewati dan aplikasi GP dimulai secara langsung.

PEMBARUAN: Terkadang sepertinya hanya membuka aplikasi GP, tanpa membuka profil aplikasi. Seperti yang disarankan TrevorWiley dalam komentarnya, Intent.FLAG_ACTIVITY_CLEAR_TOPdapat memperbaiki masalahnya. (Saya belum mengujinya sendiri ...)

Lihat jawaban ini untuk memahami apa yang Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDterjadi.

Berťák
sumber
4
Meskipun ini bagus, tampaknya juga tidak dapat diandalkan dengan Google Play build saat ini, jika Anda memasuki halaman aplikasi lain di Google Play kemudian memicu kode ini, itu hanya akan membuka Google Play tetapi tidak membuka aplikasi Anda.
Zoltish
2
@ Zoltish, saya telah menambahkan Intent.FLAG_ACTIVITY_CLEAR_TOP ke flag dan sepertinya memperbaiki masalah
TrevorWiley
Saya telah menggunakan Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED tetapi tidak berfungsi. tidak ada Instance baru yang terbuka di Play store
Praveen Kumar Verma
3
Apa yang terjadi jika Anda menggunakan rateIntent.setPackage("com.android.vending")untuk memastikan aplikasi PlayStore akan menangani maksud ini, Alih-alih semua kode ini?
dum4ll3
3
@ dum4ll3 Saya kira Anda bisa tetapi kode ini juga secara implisit memeriksa apakah aplikasi Google Play diinstal. Jika Anda tidak memeriksanya, Anda perlu menangkap ActivityNotFound
Daniele Segato
81

Buka tautan resmi Pengembang Android sebagai tutorial langkah demi langkah, lihat dan dapatkan kode untuk paket aplikasi Anda dari play store jika ada atau aplikasi play store tidak ada, kemudian buka aplikasi dari browser web.

Tautan resmi Pengembang Android

https://developer.android.com/distribute/tools/promote/linking.html

Menautkan ke Halaman Aplikasi

Dari situs web: https://play.google.com/store/apps/details?id=<package_name>

Dari aplikasi Android: market://details?id=<package_name>

Menautkan ke Daftar Produk

Dari situs web: https://play.google.com/store/search?q=pub:<publisher_name>

Dari aplikasi Android: market://search?q=pub:<publisher_name>

Menautkan ke Hasil Pencarian

Dari situs web: https://play.google.com/store/search?q=<search_query>&c=apps

Dari aplikasi Android: market://search?q=<seach_query>&c=apps

Najib Ahmed Puthawala
sumber
Menggunakan pasar: // awalan tidak disarankan lagi (periksa tautan yang Anda poskan)
Greg Ennis
@GregEnnis di mana Anda melihat pasar itu: // awalan tidak disarankan lagi?
loki
@loki Saya pikir intinya adalah bahwa itu tidak terdaftar sebagai saran lagi. Jika Anda mencari kata itu di halaman marketAnda tidak akan menemukan solusi. Saya pikir cara baru adalah untuk melepaskan developer.android.com/distribute/marketing-tools/… niat niat yang lebih umum . Versi terbaru dari aplikasi Play Store mungkin memiliki filter maksud untuk URI inihttps://play.google.com/store/apps/details?id=com.example.android
tir38
25

coba ini

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);
Youddh
sumber
1
Untuk cara membuka google play secara independen (tidak tertanam dalam tampilan baru di aplikasi yang sama) silakan periksa jawaban saya.
code4jhon
21

Semua jawaban di atas membuka Google Play dalam tampilan baru aplikasi yang sama, jika Anda benar-benar ingin membuka Google Play (atau aplikasi lain) secara mandiri:

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);

Bagian yang penting adalah yang benar-benar membuka google play atau aplikasi lain secara mandiri.

Sebagian besar dari apa yang saya lihat menggunakan pendekatan dari jawaban lain dan bukan itu yang saya butuhkan semoga ini membantu seseorang.

Salam.

code4jhon
sumber
Apa this.cordova? Di mana deklarasi variabel? Di mana callbackdideklarasikan dan ditentukan?
Eric
ini adalah bagian dari plugin Cordova, saya tidak berpikir itu benar-benar relevan ... Anda hanya perlu contoh PackageManager dan memulai suatu kegiatan secara teratur tetapi ini adalah plugin cordova dari github.com/lampaa yang saya timpa di sini github.com/code4jhon/org.apache.cordova.startapp
code4jhon
4
Maksud saya adalah bahwa, kode ini bukan sesuatu yang bisa orang portingkan ke aplikasi mereka sendiri untuk digunakan. Memotong lemak dan meninggalkan metode inti saja akan bermanfaat bagi pembaca di masa depan.
Eric
Ya, saya mengerti ... untuk saat ini saya menggunakan aplikasi hybrid. Tidak dapat benar-benar menguji kode asli sepenuhnya. Tapi saya pikir idenya ada di sana. Jika saya memiliki kesempatan, saya akan menambahkan baris asli yang tepat.
code4jhon
semoga ini akan membuatnya @eric
code4jhon
14

Anda dapat memeriksa apakah Google Play Store diinstal dan, jika ini masalahnya, Anda dapat menggunakan protokol "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);
Paolo Rovelli
sumber
1
Untuk cara membuka google play secara independen (tidak tertanam dalam tampilan baru di aplikasi yang sama) silakan periksa jawaban saya.
code4jhon
12

Sementara jawaban Eric sudah benar dan kode Berťák juga berfungsi. Saya pikir ini menggabungkan keduanya dengan lebih elegan.

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)));
}

Dengan menggunakan setPackage, Anda memaksa perangkat untuk menggunakan Play Store. Jika tidak ada Play Store yang diinstal, yang Exceptionakan ditangkap.

M3-n50
sumber
Penggunaan dokumen resmi https://play.google.com/store/apps/details?id=bukan market:Bagaimana bisa? developer.android.com/distribute/marketing-tools/... Masih merupakan jawaban yang komprehensif dan singkat.
serv-inc
Saya tidak yakin, tapi saya pikir ini adalah jalan pintas yang diterjemahkan Android ke " play.google.com/store/apps ". Anda mungkin dapat menggunakan "market: //" di pengecualian juga.
M3-n50
11

gunakan pasar: //

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + my_packagename));
Johannes Staehlin
sumber
7

Anda dapat melakukan:

final Uri marketUri = Uri.parse("market://details?id=" + packageName);
startActivity(new Intent(Intent.ACTION_VIEW, marketUri));

dapatkan Referensi di sini :

Anda juga dapat mencoba pendekatan yang dijelaskan dalam jawaban yang diterima dari pertanyaan ini: Tidak dapat menentukan apakah Google play store diinstal atau tidak pada perangkat Android

almalkawi
sumber
Saya sudah mencoba dengan kode ini, ini juga menunjukkan opsi untuk memilih browser / play store, karena perangkat saya telah menginstal kedua aplikasi (google play store / browser).
Rajesh Kumar
Untuk cara membuka google play secara independen (tidak tertanam dalam tampilan baru di aplikasi yang sama) silakan periksa jawaban saya.
code4jhon
7

Sangat terlambat di pesta Dokumen resmi ada di sini. Dan kode yang dijelaskan adalah

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);

Saat Anda mengkonfigurasi niat ini, melewati "com.android.vending"ke dalam Intent.setPackage()sehingga pengguna melihat detail aplikasi Anda di Google Play Store aplikasi bukan pemilih yang . untuk 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)

Jika Anda telah menerbitkan aplikasi instan menggunakan Google Play Instan, Anda dapat meluncurkan aplikasi sebagai berikut:

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);

Untuk 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)
Husnain Qasim
sumber
Saya pikir, ini salah, setidaknya Uri.parse("https://play.google.com/store/apps/details?id=,. Pada beberapa perangkat ini membuka browser web, bukan Play Market.
CoolMind
Semua kode diambil dari dokumen resmi. Tautan juga dilampirkan dalam kode jawaban yang dijelaskan di sini untuk referensi cepat.
Husnain Qasim
@ CoolMind alasan untuk itu mungkin karena perangkat tersebut memiliki versi aplikasi Play Store yang lebih lama yang tidak memiliki filter maksud yang cocok dengan URI itu.
tir38
@ tir38, mungkin begitu. Mungkin mereka tidak memiliki Layanan Google Play atau tidak diotorisasi di dalamnya, saya tidak ingat.
CoolMind
6

Sebagai ganti penggunaan dokumen resmi , ini menggabungkan jawaban Eric dan M3-n50 dengan penggunaan kembali kode (jangan ulangi sendiri):https://market://

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);
}

Mencoba untuk membuka dengan aplikasi GPlay jika ada dan kembali ke default.

serv-inc
sumber
5

Solusi siap pakai:

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)));
        }
    }

}

Berdasarkan jawaban Eric.

Alexandr
sumber
1
Apakah itu berhasil untuk Anda? Ini membuka halaman Google Play utama, bukan halaman aplikasi saya.
Violet Giraffe
4

Kotlin:

Perpanjangan:

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")
        )
    )
}}

Metode:

    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")
                )
            )
        }
    }
Danielvgftv
sumber
3

Jika Anda ingin membuka Google Play store dari aplikasi Anda kemudian gunakan perintah ini secara langsung:, market://details?gotohome=com.yourAppNameitu akan membuka halaman Google Play store aplikasi Anda.

Tampilkan semua aplikasi oleh penerbit tertentu

Cari aplikasi yang menggunakan Kueri pada judul atau deskripsi

Referensi: https://tricklio.com/market-details-gotohome-1/

Tahmid
sumber
3

Kotlin

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")))
    }
}
Khemraj
sumber
2
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)));
        }
    }
Sharath kumar
sumber
2

Fungsi kotlin saya berfungsi untuk tujuan ini

fun Context.canPerformIntent(intent: Intent): Boolean {
        val mgr = this.packageManager
        val list = mgr.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)
        return list.size > 0
    }

Dan dalam aktivitas Anda

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))
Arpan Sarkar
sumber
2

Berikut adalah kode terakhir dari jawaban di atas yang pertama kali mencoba untuk membuka aplikasi menggunakan aplikasi Google play store dan khususnya play store, jika gagal, itu akan memulai tampilan tindakan menggunakan versi web: Kredit ke @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);
        }
    }
MoGa
sumber
2

Tautan ini akan membuka aplikasi secara otomatis di pasar: // jika Anda menggunakan Android dan browser jika Anda menggunakan PC.

https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Nikolay Shindarov
sumber
Apa maksudmu? Apakah Anda mencoba solusi saya? Ini berhasil untuk saya.
Nikolay Shindarov
Sebenarnya dalam tugas saya, ada tampilan web dan di tampilan web saya harus memuat URL apa pun. tetapi dalam hal itu jika ada url playstore yang terbuka itu menunjukkan tombol playstore terbuka. jadi saya perlu membuka aplikasi dengan mengklik tombol itu. itu akan dinamis untuk aplikasi apa pun, jadi bagaimana saya bisa mengelola?
hpAndro
Coba saja tautannyahttps://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1
Nikolay Shindarov
1

Saya telah menggabungkan jawaban Berťák dan Stefano Munarini untuk membuat solusi hybrid yang menangani skenario Beri Nilai Aplikasi ini dan Tampilkan Lebih Banyak Aplikasi .

        /**
         * 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);
            }
        }

Pemakaian

  • Untuk Membuka Profil Penerbit
   @OnClick(R.id.ll_more_apps)
        public void showMoreApps() {
            openPlayStore(true, "Hitesh Sahu");
        }
  • Untuk Membuka Halaman Aplikasi di PlayStore
@OnClick(R.id.ll_rate_this_app)
public void openAppInPlayStore() {
    openPlayStore(false, "");
}
Hitesh Sahu
sumber
Saya sarankan membagi kode ini menjadi metode yang lebih kecil. Sulit untuk menemukan kode penting dalam spageti ini :) Plus Anda sedang memeriksa "com.android.vending" bagaimana dengan com.google.market
Aetherna
1

Teman-teman, jangan lupa bahwa Anda benar-benar bisa mendapatkan sesuatu yang lebih dari itu. Maksudku pelacakan UTM misalnya. 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));
}
Alex
sumber
1

Sebuah kotlin verison dengan fallback dan sintaksis saat ini

 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)
    }
}
kuzdu
sumber