วิธีเปิด Google Play Store โดยตรงจากแอปพลิเคชัน Android ของฉัน


569

ฉันเปิดร้านค้า Google Play โดยใช้รหัสต่อไปนี้

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

แต่มันแสดงให้ฉันเห็นมุมมองการกระทำที่สมบูรณ์เพื่อเลือกตัวเลือก (เบราว์เซอร์ / ร้านเล่น) ฉันต้องเปิดแอปพลิเคชันใน Play Store โดยตรง


คำตอบ:


1436

คุณสามารถทำได้โดยใช้คำนำหน้า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)));
}

เราใช้try/catchบล็อกที่นี่เพราะExceptionจะถูกโยนทิ้งหากไม่ได้ติดตั้ง Play Store บนอุปกรณ์เป้าหมาย

หมายเหตุ : แอพใด ๆ ที่สามารถลงทะเบียนได้ซึ่งมีความสามารถในการจัดการmarket://details?id=<appId>Uri หากคุณต้องการกำหนดเป้าหมายเป็น Google Play โดยเฉพาะให้ตรวจสอบคำตอบที่Berťák


53
หากคุณต้องการเปลี่ยนเส้นทางไปที่แอพของผู้พัฒนาทั้งหมดใช้market://search?q=pub:"+devNameและhttp://play.google.com/store/search?q=pub:"+devName
Stefano Munarini

4
โซลูชันนี้ใช้ไม่ได้หากบางแอปพลิเคชันใช้ตัวกรองความตั้งใจพร้อมกำหนด "market: //" ดูคำตอบของฉันวิธีเปิด Google Play และแอปพลิเคชัน Google Play เท่านั้น (หรือเว็บเบราว์เซอร์ถ้า GP ไม่มีอยู่) :-)
Berťák

18
สำหรับโครงการที่ใช้สร้างระบบ Gradle, ในความเป็นจริงappPackageName BuildConfig.APPLICATION_IDไม่มีContext/ Activityขึ้นอยู่กับการลดความเสี่ยงของการรั่วไหลของหน่วยความจำ
Christian García

3
คุณยังต้องใช้บริบทเพื่อแสดงเจตนา Context.startActivity ()
wblaschko

2
วิธีแก้ปัญหานี้ถือว่ามีเจตนาที่จะเปิดเว็บเบราว์เซอร์ สิ่งนี้ไม่เป็นความจริงเสมอ (เช่นบน Android TV) ดังนั้นให้ระมัดระวัง คุณอาจต้องการใช้ intent.resolveActivity (getPackageManager ()) เพื่อกำหนดสิ่งที่ต้องทำ
Coda

161

คำตอบมากมายที่นี่แนะนำให้ใช้ Uri.parse("market://details?id=" + appPackageName)) เพื่อเปิด Google Play แต่ฉันคิดว่ามันไม่เพียงพอจริง:

แอปพลิเคชันบุคคลที่สามบางตัวสามารถใช้ตัวกรองเจตนาของตัวเอง"market://"ตามที่กำหนดไว้ดังนั้นจึงสามารถประมวลผล Uri ที่ให้มาแทน Google Play (ฉันเคยประสบกับสถานการณ์นี้ด้วยแอปพลิเคชั่น egSnapPea) คำถามคือ "จะเปิด Google Play Store ได้อย่างไร" ดังนั้นฉันคิดว่าคุณไม่ต้องการเปิดแอปพลิเคชันอื่น โปรดทราบด้วยว่าเช่นการจัดเรตของแอพเกี่ยวข้องเฉพาะในแอพ GP Store เท่านั้น ...

หากต้องการเปิด Google Play และ Google Play เท่านั้นฉันใช้วิธีนี้:

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

ประเด็นก็คือเมื่อแอปพลิเคชันอื่น ๆ นอกเหนือจาก Google Play สามารถเปิดเจตนาของเราได้กล่องโต้ตอบตัวเลือกแอปจะถูกข้ามและแอป GP เริ่มต้นโดยตรง

อัปเดต: บางครั้งดูเหมือนว่าจะเปิดแอป GP เท่านั้นโดยไม่ต้องเปิดโปรไฟล์ของแอป ตามที่ TrevorWiley แนะนำในความคิดเห็นของเขาIntent.FLAG_ACTIVITY_CLEAR_TOPสามารถแก้ไขปัญหาได้ (ฉันยังไม่ได้ทดสอบด้วยตัวเอง ... )

ดูคำตอบนี้เพื่อทำความเข้าใจว่าIntent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDEDทำอะไร


4
แม้ว่าจะเป็นสิ่งที่ดี แต่ก็ไม่น่าเชื่อถือสำหรับ Google Play รุ่นปัจจุบันหากคุณเข้าสู่หน้าแอพอื่นใน Google Play แล้วเรียกรหัสนี้มันจะเปิด Google Play แต่ไม่ไปที่แอปของคุณ
zoltish

2
@zoltish ฉันได้เพิ่ม Intent.FLAG_ACTIVITY_CLEAR_TOP ไปยังธงและดูเหมือนว่าจะแก้ไขปัญหาได้
TrevorWiley

ฉันใช้ Intent แล้ว FLAG_ACTIVITY_CLEAR_TOP | เจตนา. FLAG_ACTIVITY_RESET_TASK_IF_NEEDED แต่ไม่ทำงาน ไม่มีอินสแตนซ์ใหม่เปิด Play store
Praveen Kumar Verma

3
จะเกิดอะไรขึ้นถ้าคุณใช้rateIntent.setPackage("com.android.vending")เพื่อให้แน่ใจว่าแอป PlayStore จะจัดการกับเจตนานี้แทนที่จะเป็นรหัสทั้งหมด?
dum4ll3

3
@ dum4ll3 ฉันเดาว่าคุณสามารถทำได้ แต่รหัสนี้ยังตรวจสอบโดยนัยว่ามีการติดตั้งแอป Google Play หรือไม่ หากคุณไม่ได้ตรวจสอบคุณจะต้องไปหา ActivityNotFound
Daniele Segato

81

ไปที่ลิงก์อย่างเป็นทางการสำหรับนักพัฒนาซอฟต์แวร์ Android โดยดูทีละขั้นตอนและรับรหัสสำหรับแพคเกจแอปพลิเคชันของคุณจาก play store หากมีอยู่หรือไม่มีแอพที่เล่นจาก Play Store แล้วเปิดแอปพลิเคชันจากเว็บเบราว์เซอร์

ลิงค์อย่างเป็นทางการสำหรับนักพัฒนา Android

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

การลิงก์ไปยังหน้าแอปพลิเคชัน

จากเว็บไซต์: https://play.google.com/store/apps/details?id=<package_name>

จากแอพ Android: market://details?id=<package_name>

เชื่อมโยงไปยังรายการสินค้า

จากเว็บไซต์: https://play.google.com/store/search?q=pub:<publisher_name>

จากแอพ Android: market://search?q=pub:<publisher_name>

เชื่อมโยงไปยังผลการค้นหา

จากเว็บไซต์: https://play.google.com/store/search?q=<search_query>&c=apps

จากแอพ Android: market://search?q=<seach_query>&c=apps


การใช้ตลาด: // ไม่แนะนำให้ใช้คำนำหน้าอีกต่อไป (ตรวจสอบลิงก์ที่คุณโพสต์)
Greg Ennis

@GregEnnis ที่คุณเห็นว่าตลาด: // คำนำหน้าจะไม่แนะนำอีกต่อไป?
โลกิ

@loki ฉันคิดว่าประเด็นคือมันไม่ได้อยู่ในรายการเป็นข้อเสนอแนะอีกต่อไป หากคุณค้นหาคำนั้นmarketคุณจะไม่พบคำตอบใด ๆ ผมคิดว่าวิธีใหม่คือการปิดไฟเจตนาทั่วไปมากขึ้นdeveloper.android.com/distribute/marketing-tools/... แอป Play Store เวอร์ชันล่าสุดอาจมีตัวกรองเจตนาสำหรับ URI นี้https://play.google.com/store/apps/details?id=com.example.android
tir38

25

ลองนี้

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

1
สำหรับวิธีเปิด Google Play อย่างอิสระ (ไม่ฝังในมุมมองใหม่ในแอพเดียวกัน) โปรดตรวจสอบคำตอบของฉัน
code4jhon

21

คำตอบทั้งหมดข้างต้นเปิด Google Play ในมุมมองใหม่ของแอพเดียวกันหากคุณต้องการเปิด Google Play (หรือแอปอื่น ๆ ) อย่างอิสระ:

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

ส่วนที่สำคัญคือจริง ๆ แล้วเปิด Google Play หรือแอปอื่น ๆ อย่างอิสระ

ส่วนใหญ่ของสิ่งที่ฉันได้เห็นใช้วิธีการของคำตอบอื่น ๆ และมันไม่ใช่สิ่งที่ฉันต้องการหวังว่านี้จะช่วยให้ใครบางคน

ความนับถือ.


คือthis.cordovaอะไร การประกาศตัวแปรอยู่ที่ไหน? มีการcallbackประกาศและกำหนดที่ไหน?
Eric

นี่เป็นส่วนหนึ่งของปลั๊กอิน Cordova ฉันไม่คิดว่ามันจะเกี่ยวข้องกันจริง ๆ ... คุณแค่ต้องการ PackageManager และเริ่มกิจกรรมในแบบปกติ แต่นี่เป็นปลั๊กอิน Cordova ของgithub.com/lampaaซึ่งฉันเขียนทับ ที่นี่github.com/code4jhon/org.apache.cordova.startapp
code4jhon

4
ประเด็นของฉันก็คือรหัสนี้ไม่ใช่สิ่งที่ผู้คนสามารถนำไปใช้กับแอพของตนเองได้ การตัดแต่งไขมันและทิ้งไว้เพียงวิธีหลักจะเป็นประโยชน์ต่อผู้อ่านในอนาคต
Eric

ใช่ฉันเข้าใจ ... ตอนนี้ฉันอยู่ในแอพไฮบริด ไม่สามารถทดสอบรหัสเนทีฟได้อย่างสมบูรณ์ แต่ฉันคิดว่าความคิดอยู่ที่นั่น หากฉันมีโอกาสฉันจะเพิ่มบรรทัดดั้งเดิม
code4jhon

หวังว่านี่จะทำให้ @eric
code4jhon

14

คุณสามารถตรวจสอบว่ามีการติดตั้งแอปGoogle Play Store หรือไม่และหากเป็นกรณีนี้คุณสามารถใช้โปรโตคอล"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
สำหรับวิธีเปิด Google Play อย่างอิสระ (ไม่ฝังในมุมมองใหม่ในแอพเดียวกัน) โปรดตรวจสอบคำตอบของฉัน
code4jhon

12

ในขณะที่คำตอบของ Eric นั้นถูกต้องและรหัสของBerťákก็ใช้ได้เช่นกัน ฉันคิดว่าสิ่งนี้เป็นการรวมกันอย่างหรูหรายิ่งขึ้น

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

โดยการใช้setPackageงานคุณบังคับให้อุปกรณ์ใช้ Play Store หากไม่มีการติดตั้ง Play Store Exceptionจะถูกจับได้


เอกสารอย่างเป็นทางการใช้https://play.google.com/store/apps/details?id=แทนที่จะเป็นmarket:อย่างไร developer.android.com/distribute/marketing-tools/…ยังเป็นคำตอบที่ครอบคลุมและสั้น
serv-inc

ฉันไม่แน่ใจ แต่ฉันคิดว่ามันเป็นทางลัดที่ Android แปลเป็น " play.google.com/store/apps " คุณอาจใช้ "market: //" ในข้อยกเว้นได้เช่นกัน
M3-n50


7

คุณทำได้:

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

รับการอ้างอิงที่นี่ :

คุณสามารถลองวิธีที่อธิบายในคำตอบที่ได้รับการยอมรับของคำถามนี้: ไม่สามารถระบุได้ว่ามีการติดตั้ง Google Play Store หรือไม่บนอุปกรณ์ Android


ฉันลองด้วยรหัสนี้แล้วนี่ยังแสดงตัวเลือกในการเลือกเบราว์เซอร์ / เพลย์สโตร์เนื่องจากอุปกรณ์ของฉันติดตั้งแอพทั้งสอง (google play store / เบราว์เซอร์)
Rajesh Kumar

สำหรับวิธีเปิด Google Play อย่างอิสระ (ไม่ฝังในมุมมองใหม่ในแอพเดียวกัน) โปรดตรวจสอบคำตอบของฉัน
code4jhon

7

สายมากในเอกสารทางการของพรรคอยู่ที่นี่ และรหัสที่อธิบายคือ

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

ในขณะที่คุณกำหนดค่าความตั้งใจนี้ผ่าน"com.android.vending"เข้ามาIntent.setPackage()เพื่อให้ผู้ใช้ดูรายละเอียดของแอปในแอป Play สโตร์ Googleแทนการเลือก สำหรับ 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)

หากคุณเผยแพร่แอพพลิเคชั่นทันทีโดยใช้ Google Play ค้นหาทันใจคุณสามารถเปิดแอพดังต่อไปนี้:

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

สำหรับ 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)

Uri.parse("https://play.google.com/store/apps/details?id=ผมคิดว่านี่เป็นสิ่งที่ผิดอย่างน้อย ในบางอุปกรณ์จะเปิดเว็บเบราว์เซอร์แทน Play Market
CoolMind

รหัสทั้งหมดมาจากเอกสารอย่างเป็นทางการ การเชื่อมโยงมีการแนบในรหัสคำตอบอธิบายไว้ที่นี่สำหรับการอ้างอิงอย่างรวดเร็ว
Husnain Qasim

@Cool หาสาเหตุที่อาจเป็นเพราะอุปกรณ์เหล่านั้นมีแอป Play Store รุ่นเก่ากว่าซึ่งไม่มีตัวกรองเจตนาที่ตรงกับ URI นั้น
tir38

@ tir38 อาจเป็นเช่นนั้น บางทีพวกเขาอาจไม่มีบริการ Google Play หรือไม่ได้รับอนุญาตฉันจำไม่ได้
CoolMind

6

เนื่องจากเอกสารอย่างเป็นทางการใช้https://แทนการmarket://รวมคำตอบของ Eric และ M3-n50 เข้ากับการใช้รหัสซ้ำ (อย่าทำซ้ำตัวเอง):

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

มันพยายามเปิดด้วยแอป GPlay หากมีอยู่และกลับไปใช้ค่าเริ่มต้น


5

โซลูชันพร้อมใช้:

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

}

ตามคำตอบของ Eric


1
มันใช้งานได้สำหรับคุณหรือไม่ มันเปิดหน้าหลักของ Google Play ไม่ใช่ที่หน้าของแอพของฉัน
Violet Giraffe

4

Kotlin:

ส่วนขยาย:

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

วิธี:

    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

หากคุณต้องการเปิด Google Play store จากแอพของคุณให้ใช้คำสั่งนี้ directy: market://details?gotohome=com.yourAppNameมันจะเปิดหน้าร้านค้า Google Play ของแอป

แสดงแอพทั้งหมดโดยผู้เผยแพร่ที่เฉพาะเจาะจง

ค้นหาแอพที่ใช้ Query ในชื่อหรือคำอธิบาย

การอ้างอิง: 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

ฟังก์ชั่นการเติม kotlin ของฉันเพื่อจุดประสงค์นี้

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

และในกิจกรรมของคุณ

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

นี่คือรหัสสุดท้ายจากคำตอบข้างต้นที่ความพยายามครั้งแรกในการเปิดแอปโดยใช้แอป Google Play สโตร์และเพลย์สโตร์โดยเฉพาะถ้ามันล้มเหลวมันจะเริ่มต้นมุมมองการกระทำโดยใช้เวอร์ชันเว็บ: เครดิตเป็น @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

ลิงก์นี้จะเปิดแอปโดยอัตโนมัติในตลาด: // หากคุณใช้ Android และเบราว์เซอร์หากคุณใช้พีซี

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

ที่จริงแล้วในงานของฉันมี webview และ webview ฉันต้องโหลด URL ใด ๆ แต่ในกรณีที่มีการเปิด url playstore มันจะแสดงปุ่ม playstore ที่เปิดอยู่ ดังนั้นฉันต้องเปิดแอปเมื่อคลิกปุ่มนั้น มันจะเป็นแบบไดนามิกสำหรับแอปพลิเคชันใด ๆ ดังนั้นฉันจะจัดการได้อย่างไร
hpAndro

ลองลิงค์ 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

1

ผมได้รวมทั้งBerťákและ สเตฟาโน Munariniคำตอบในการสร้างโซลูชั่นที่ไฮบริดซึ่งจัดการทั้งอัตรา App นี้และแสดงเพิ่มเติม Appสถานการณ์

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

การใช้

  • หากต้องการเปิดโปรไฟล์ผู้เผยแพร่
   @OnClick(R.id.ll_more_apps)
        public void showMoreApps() {
            openPlayStore(true, "Hitesh Sahu");
        }
  • เพื่อเปิดหน้าแอพใน PlayStore
@OnClick(R.id.ll_rate_this_app)
public void openAppInPlayStore() {
    openPlayStore(false, "");
}

รหัสแนะนำให้แบ่งรหัสนี้ออกเป็นวิธีที่เล็กกว่า มันเป็นเรื่องยากที่จะหารหัสสำคัญในการปาเก็ตตี้นี้ :) Plus ที่คุณกำลังตรวจสอบสำหรับ "com.android.vending"สิ่งที่เกี่ยวกับcom.google.market
Aetherna

1

ประชาชนอย่าลืมว่าคุณสามารถได้รับอะไรมากกว่านี้ ฉันหมายถึงการติดตาม UTM เช่น 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

รูปแบบ kotlin ที่มีทางเลือกและไวยากรณ์ปัจจุบัน

 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)
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.