Làm cách nào để mở Cửa hàng Google Play trực tiếp từ ứng dụng Android của tôi?


569

Tôi đã mở cửa hàng Google Play bằng mã sau

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

Nhưng nó hiển thị cho tôi Chế độ xem hành động hoàn chỉnh để chọn tùy chọn (trình duyệt / cửa hàng phát). Tôi cần mở ứng dụng trong Play Store trực tiếp.


Câu trả lời:


1436

Bạn có thể làm điều này bằng cách sử dụng market://tiền tố .

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

Chúng tôi sử dụng một try/catchkhối ở đây vì Exceptionsẽ bị ném nếu Play Store không được cài đặt trên thiết bị đích.

LƯU Ý : bất kỳ ứng dụng nào cũng có thể đăng ký là có khả năng xử lý market://details?id=<appId>Uri, nếu bạn muốn nhắm mục tiêu cụ thể vào Google Play, hãy kiểm tra câu trả lời của Berťák


53
nếu bạn muốn chuyển hướng đến tất cả các ứng dụng của Nhà phát triển sử dụng market://search?q=pub:"+devNamehttp://play.google.com/store/search?q=pub:"+devName
Stefano Munarini

4
Giải pháp này không hoạt động, nếu một số ứng dụng sử dụng bộ lọc ý định với lược đồ "market: //" được xác định. Xem câu trả lời của tôi về cách mở Google Play VÀ CHỈ ứng dụng Google Play (hoặc webbrowser nếu GP không có mặt). :-)
Berťák

18
Đối với các dự án sử dụng hệ thống xây dựng Gradle, appPackageNametrên thực tế BuildConfig.APPLICATION_ID. Không Context/ Activityphụ thuộc, giảm nguy cơ rò rỉ bộ nhớ.
Christian García

3
Bạn vẫn cần bối cảnh để khởi động ý định. Context.startActivity ()
wblaschko 7/12/2015

2
Giải pháp này giả định có ý định mở trình duyệt web. Điều này không phải lúc nào cũng đúng (như trên Android TV) vì vậy hãy thận trọng. Bạn có thể muốn sử dụng aim.resolveActivity (getPackageManager ()) để xác định những việc cần làm.
Coda

161

Nhiều câu trả lời ở đây đề nghị sử dụng Uri.parse("market://details?id=" + appPackageName)) để mở Google Play, nhưng thực tế tôi nghĩ nó không đủ :

Một số ứng dụng của bên thứ ba có thể sử dụng các bộ lọc ý định của riêng mình với "market://"sơ đồ được xác định , do đó chúng có thể xử lý Uri được cung cấp thay vì Google Play (Tôi đã gặp tình huống này với ứng dụng egSnapPea). Câu hỏi là "Làm thế nào để mở Cửa hàng Google Play?", Vì vậy tôi cho rằng, bạn không muốn mở bất kỳ ứng dụng nào khác. Cũng xin lưu ý rằng, ví dụ: xếp hạng ứng dụng chỉ có liên quan trong ứng dụng GP Store, v.v ...

Để mở Google Play VÀ CHỈ Google Play, tôi sử dụng phương pháp này:

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

Vấn đề là khi nhiều ứng dụng bên cạnh Google Play có thể mở ra ý định của chúng tôi, hộp thoại chọn ứng dụng sẽ bị bỏ qua và ứng dụng GP được khởi động trực tiếp.

CẬP NHẬT: Đôi khi dường như nó chỉ mở ứng dụng GP mà không mở hồ sơ của ứng dụng. Như TrevorWiley đề xuất trong bình luận của mình, Intent.FLAG_ACTIVITY_CLEAR_TOPcó thể khắc phục vấn đề. (Tôi chưa tự kiểm tra nó ...)

Xem câu trả lời này để hiểu những gì Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDkhông.


4
Mặc dù điều này tốt nhưng dường như không đáng tin cậy với bản dựng Google Play hiện tại, nếu bạn nhập một trang ứng dụng khác trên Google Play thì kích hoạt mã này, nó sẽ chỉ mở Google Play nhưng không vào ứng dụng của bạn.
zoltish

2
@zoltish, tôi đã thêm Intent.FLAG_ACTIVITY_CLEAR_TOP vào các cờ và điều đó dường như khắc phục vấn đề
TrevorWiley

Tôi đã sử dụng Intent.FLAG_ACTIVITY_CLEAR_TOP | Ý định.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED nhưng không hoạt động. không có bất kỳ trường hợp mới nào mở cửa hàng Play
Praveen Kumar Verma

3
Điều gì xảy ra nếu bạn sử dụng rateIntent.setPackage("com.android.vending")để chắc chắn ứng dụng PlayStore sẽ xử lý ý định này, Thay vì tất cả mã này?
dum4ll3

3
@ dum4ll3 Tôi đoán bạn có thể nhưng mã này cũng ngầm kiểm tra xem ứng dụng Google Play đã được cài đặt chưa. Nếu bạn không kiểm tra nó, bạn cần bắt cho ActivityNotFound
Daniele Segato

81

Truy cập liên kết chính thức của Nhà phát triển Android dưới dạng hướng dẫn từng bước để xem và nhận mã cho gói ứng dụng của bạn từ cửa hàng play nếu tồn tại hoặc ứng dụng cửa hàng chơi không tồn tại sau đó mở ứng dụng từ trình duyệt web.

Liên kết chính thức của Nhà phát triển Android

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

Liên kết đến một trang ứng dụng

Từ một trang web: https://play.google.com/store/apps/details?id=<package_name>

Từ một ứng dụng Android: market://details?id=<package_name>

Liên kết với Danh sách sản phẩm

Từ một trang web: https://play.google.com/store/search?q=pub:<publisher_name>

Từ một ứng dụng Android: market://search?q=pub:<publisher_name>

Liên kết đến kết quả tìm kiếm

Từ một trang web: https://play.google.com/store/search?q=<search_query>&c=apps

Từ một ứng dụng Android: market://search?q=<seach_query>&c=apps


Sử dụng thị trường: // tiền tố không được khuyến nghị nữa (kiểm tra liên kết bạn đã đăng)
Greg Enni

@GregEnnis nơi bạn thấy thị trường đó: // tiền tố không được khuyến nghị nữa?
Loki

@loki Tôi nghĩ vấn đề là nó không được liệt kê như một gợi ý nữa. Nếu bạn tìm kiếm trang đó cho từ marketbạn sẽ không tìm thấy bất kỳ giải pháp. Tôi nghĩ rằng cách mới là loại bỏ một nhà phát triển có ý định chung chung hơn.android.com / distribution / market-tools / . Các phiên bản gần đây hơn của ứng dụng Play Store có thể có bộ lọc ý định cho URI nàyhttps://play.google.com/store/apps/details?id=com.example.android
tir38

25

thử cái này

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.example.android"));
startActivity(intent);

1
Để biết cách mở google play độc lập (không được nhúng trong chế độ xem mới trong cùng một ứng dụng), vui lòng kiểm tra câu trả lời của tôi.
code4jhon

21

Tất cả các câu trả lời trên đều mở Google Play trong chế độ xem mới của cùng một ứng dụng, nếu bạn thực sự muốn mở Google Play (hoặc bất kỳ ứng dụng nào khác) một cách độc lập:

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

Phần quan trọng là thực sự mở google play hoặc bất kỳ ứng dụng nào khác một cách độc lập.

Hầu hết những gì tôi đã thấy sử dụng cách tiếp cận của các câu trả lời khác và đó không phải là điều tôi cần hy vọng điều này sẽ giúp được ai đó.

Trân trọng.


this.cordovagì Khai báo biến ở đâu? Trường hợp được callbackkhai báo và định nghĩa?
Eric

Đây là một phần của plugin Cordova, tôi không nghĩ rằng nó thực sự có liên quan ... bạn chỉ cần một phiên bản của Trình quản lý gói và bắt đầu một hoạt động theo cách thông thường nhưng đây là plugin cordova của github.com/lampaa mà tôi ghi đè ở đây github.com/code4jhon/org.apache.cordova.startapp
code4jhon

4
Quan điểm của tôi đơn giản là, mã này không thực sự là thứ mà mọi người có thể chuyển sang ứng dụng của riêng họ để sử dụng. Cắt giảm chất béo và chỉ để lại phương pháp cốt lõi sẽ hữu ích cho độc giả tương lai.
Eric

Vâng, tôi hiểu ... hiện tại tôi đang sử dụng các ứng dụng lai. Không thể thực sự kiểm tra mã gốc hoàn toàn. Nhưng tôi nghĩ ý tưởng là có. Nếu tôi có cơ hội tôi sẽ thêm các dòng gốc chính xác.
code4jhon

hy vọng điều này sẽ làm cho nó
@eric

14

Bạn có thể kiểm tra xem ứng dụng Cửa hàng Google Play đã được cài đặt chưa và nếu đúng như vậy, bạn có thể sử dụng giao thức "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);

1
Để biết cách mở google play độc lập (không được nhúng trong chế độ xem mới trong cùng một ứng dụng), vui lòng kiểm tra câu trả lời của tôi.
code4jhon

12

Trong khi câu trả lời của Eric là chính xác và mã của Berťák cũng hoạt động. Tôi nghĩ rằng điều này kết hợp cả hai thanh lịch hơn.

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

Bằng cách sử dụng setPackage, bạn buộc thiết bị sử dụng Cửa hàng Play. Nếu không có Play Store được cài đặt, Exceptionnó sẽ bị bắt.


Các tài liệu chính thức sử dụng https://play.google.com/store/apps/details?id=thay vì market:Làm thế nào? developer.android.com/distribution/marketing-tools/ Từ Vẫn là một câu trả lời toàn diện và ngắn gọn.
phục vụ

Tôi không chắc, nhưng tôi nghĩ đó là một phím tắt mà Android dịch thành " play.google.com/store/apps ". Bạn cũng có thể sử dụng "market: //".
M3-n50

11

thị trường sử dụng: //

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

7

Bạn có thể làm:

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

tham khảo tại đây :

Bạn cũng có thể thử cách tiếp cận được mô tả trong câu trả lời được chấp nhận của câu hỏi này: Không thể xác định xem Google play store có được cài đặt hay không trên thiết bị Android


Tôi đã thử với mã này, đây cũng là tùy chọn để chọn trình duyệt / cửa hàng play, vì thiết bị của tôi đã cài đặt cả hai ứng dụng (google play store / browser).
Rajesh Kumar

Để biết cách mở google play độc lập (không được nhúng trong chế độ xem mới trong cùng một ứng dụng), vui lòng kiểm tra câu trả lời của tôi.
code4jhon

7

Rất muộn trong bữa tiệc Các tài liệu chính thức ở đây. Và mã được mô tả là

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

Như bạn cấu hình mục đích này, vượt qua "com.android.vending"thành Intent.setPackage()để người dùng xem chi tiết của ứng dụng của bạn trong ứng dụng Play Store của Google thay vì một công cụ chọn . cho KOTLINE

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)

Nếu bạn đã xuất bản một ứng dụng tức thì bằng Google Play Instant, bạn có thể khởi chạy ứng dụng như sau:

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

Dành cho KOTLINE

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)

Tôi nghĩ rằng, điều này là sai, ít nhất , Uri.parse("https://play.google.com/store/apps/details?id=. Trên một số thiết bị, nó mở trình duyệt web thay vì Play Market.
CoolMind

Tất cả các mã được lấy từ các tài liệu chính thức. Liên kết cũng được đính kèm trong mã câu trả lời được mô tả ở đây để tham khảo nhanh.
Husnain Qasim

@CoolTìm lý do cho điều đó có lẽ là vì các thiết bị đó có phiên bản cũ hơn của ứng dụng Play Store không có bộ lọc ý định phù hợp với URI đó.
tir38

@ tir38, có lẽ vậy. Có thể họ không có Dịch vụ Google Play hoặc không được ủy quyền trong đó, tôi không nhớ.
CoolMind

6

các tài liệu chính thức sử dụng https://thay vì market://, điều này kết hợp câu trả lời của Eric và M3-n50 với việc sử dụng lại mã (không lặp lại chính mình):

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

Nó cố gắng mở bằng ứng dụng GPlay nếu nó tồn tại và trở về mặc định.


5

Giải pháp sẵn sàng sử dụng:

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

}

Dựa trên câu trả lời của Eric.


1
Nó làm việc cho bạn? Nó mở trang Google Play chính, không phải trang ứng dụng của tôi.
Hươu cao cổ Violet

4

Kotlin:

Sự mở rộng:

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

Phương pháp:

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

3

Nếu bạn muốn mở cửa hàng Google Play từ ứng dụng của mình thì hãy sử dụng lệnh này: market://details?gotohome=com.yourAppNamenó sẽ mở các trang cửa hàng Google Play của ứng dụng.

Hiển thị tất cả các ứng dụng của một nhà xuất bản cụ thể

Tìm kiếm các ứng dụng sử dụng Truy vấn trên tiêu đề hoặc mô tả của nó

Tham khảo: https://tricklio.com/market-details-gotohome-1/


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

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

2

Chức năng nhập kotlin của tôi cho mục đích này

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

Và trong hoạt động của bạn

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

2

Đây là mã cuối cùng từ các câu trả lời ở trên, lần đầu tiên thử mở ứng dụng bằng ứng dụng cửa hàng Google play và cụ thể là cửa hàng chơi, nếu thất bại, nó sẽ bắt đầu chế độ xem hành động bằng phiên bản web: Tín dụng cho @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);
        }
    }

2

Liên kết này sẽ tự động mở ứng dụng trên thị trường: // nếu bạn ở trên Android và trong trình duyệt nếu bạn ở trên PC.

https://play.app.goo.gl/?link=https://play.google.com/store/apps/details?id=com.app.id&ddl=1&pcampaignid=web_ddl_1

Ý anh là gì? Bạn đã thử giải pháp của tôi? Nó làm việc cho tôi.
Nikolay Shindarov

Thực tế trong nhiệm vụ của tôi, có một webview và trong webview tôi phải tải bất kỳ URL nào. nhưng trong đó nếu có bất kỳ url playstore nào thì nó sẽ hiển thị nút playstore đang mở. Vì vậy, tôi cần phải mở ứng dụng khi nhấp vào nút đó. Nó sẽ là động cho bất kỳ ứng dụng nào, vậy làm cách nào để quản lý?
hpAndro 18/03/19

Chỉ cần thử liên kếthttps://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

Tôi đã kết hợp cả câu trả lời của BerťákStefano Munarini để tạo ra một giải pháp lai xử lý cả kịch bản Xếp hạng ứng dụng nàyHiển thị thêm ứng dụng .

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

Sử dụng

  • Để mở hồ sơ nhà xuất bản
   @OnClick(R.id.ll_more_apps)
        public void showMoreApps() {
            openPlayStore(true, "Hitesh Sahu");
        }
  • Để mở trang ứng dụng trên PlayStore
@OnClick(R.id.ll_rate_this_app)
public void openAppInPlayStore() {
    openPlayStore(false, "");
}

Id đề nghị chia mã này thành các phương thức nhỏ hơn. Thật khó để tìm mã quan trọng trong spaghetti này :) Ngoài ra, bạn đang kiểm tra "com.android.veinating", còn gì về com.google.market
Aetherna

1

Mọi người, đừng quên rằng bạn thực sự có thể nhận được nhiều thứ hơn từ nó. Ý tôi là theo dõi UTM chẳng hạn. 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));
}

1

Một bản án kotlin với dự phòng và cú pháp hiện tại

 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)
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.