จะตรวจสอบเวอร์ชันบริการ Google Play ได้อย่างไร


95

ในแอปพลิเคชันของฉันฉันต้องตรวจสอบเวอร์ชันบริการ Google Play (ซึ่งติดตั้งในอุปกรณ์ของผู้ใช้) เป็นไปได้ไหม ? และถ้าใช่ฉันจะทำได้อย่างไร? ฉันค้นหาใน Google แต่ไม่พบอะไรเลย!

คำตอบ:


96

ฉันพบวิธีง่ายๆ:

int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;

แต่versionCodeเลิกใช้แล้วใน API 28 ดังนั้นคุณสามารถใช้PackageInfoCompat:

long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));

7
จะทราบรหัสเวอร์ชันของบริการเล่นเวอร์ชัน 10.2 ได้อย่างไร
Manmohan Soni

เนื่องจาก versionCode เลิกใช้กับ API28 คุณควรใช้PackageInfoCompat.getLongVersionCode
G00fY

52

หากคุณดูในลิงค์ที่ให้มาโดย Stan0 คุณจะเห็นสิ่งนี้ :

public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE

เวอร์ชันแพ็คเกจบริการ Google Play ขั้นต่ำ (ประกาศใน AndroidManifest.xml android: versionCode) เพื่อให้เข้ากันได้กับไคลเอนต์เวอร์ชันนี้ ค่าคงที่: 3225000 (0x003135a8)

ดังนั้นเมื่อคุณตั้งค่านั้นในรายการของคุณแล้วโทรisGooglePlayServicesAvailable(context):

public static int isGooglePlayServicesAvailable (Context context)

ตรวจสอบว่ามีการติดตั้งและเปิดใช้งานบริการ Google Play บนอุปกรณ์นี้และเวอร์ชันที่ติดตั้งบนอุปกรณ์นี้ไม่เก่ากว่าเวอร์ชันที่ไคลเอ็นต์ต้องการ

ผลตอบแทน

  • รหัสสถานะระบุว่ามีข้อผิดพลาดหรือไม่ สามารถเป็นหนึ่งต่อไปนี้ใน ConnectionResult: SUCCESS, SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, ,SERVICE_DISABLEDSERVICE_INVALID

เพื่อให้แน่ใจว่าอุปกรณ์กำลังใช้เวอร์ชันที่แอปของคุณต้องการหากไม่เป็นเช่นนั้นคุณสามารถดำเนินการตามเอกสารได้

แก้ไข

GooglePlayServicesUtil.isGooglePlayServicesAvailable()เลิกใช้งานแล้วและตอนนี้GoogleApiAvailability.isGooglePlayServicesAvailable()ควรใช้แทน


2
GoogleApiAvailability ตอนนี้เป็นซิงเกิลตันดังนั้นคุณควรใช้: GoogleApiAvailability.getInstance () isGooglePlayServicesAvailable (กิจกรรม)
Nativ

@Nativ มีวิธีใดบ้างในการตรวจสอบว่าเวอร์ชันบริการ Google Play ที่ทำงานบนอุปกรณ์ Android นั้นมากกว่า 10.2 หรือไม่
Manmohan Soni

@ManmohanSoni ฉันแน่ใจว่ามี ตอนนี้ฉันเปลี่ยนไปใช้การพัฒนา iOS ดังนั้นฉันจึงไม่สามารถช่วยเหลือคุณได้มากนัก
Nativ

15

นี่คือทางออกของฉัน:

private boolean checkGooglePlayServices() {
        final int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (status != ConnectionResult.SUCCESS) {
            Log.e(TAG, GooglePlayServicesUtil.getErrorString(status));

            // ask user to update google play services.
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, 1);
            dialog.show();
            return false;
        } else {
            Log.i(TAG, GooglePlayServicesUtil.getErrorString(status));
            // google play services is updated. 
            //your code goes here...
            return true;
        }
    }

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

ฉันหวังว่ารหัสนี้จะช่วยใครบางคนได้


6

จากการอัปเดตที่ใหม่กว่าฉันได้ลงเอยด้วยรหัสนี้ฉันได้สร้างวิธีที่สะดวกในการจัดการทุกสิ่งที่เกี่ยวข้องกับมัน ..

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

 private void checkPlayService(int PLAY_SERVICE_STATUS)
    {
        switch (PLAY_SERVICE_STATUS)
        {
            case ConnectionResult.API_UNAVAILABLE:
                //API is not available
                break;
            case ConnectionResult.NETWORK_ERROR:
                //Network error while connection 
                break;
            case ConnectionResult.RESTRICTED_PROFILE:
                //Profile is restricted by google so can not be used for play services
                break;
            case ConnectionResult.SERVICE_MISSING:
                //service is missing
                break;
            case ConnectionResult.SIGN_IN_REQUIRED:
                //service available but user not signed in
                break;
            case ConnectionResult.SUCCESS:
                break;
        }
    }

ฉันใช้มันแบบนี้

GoogleApiAvailability avail;
 int PLAY_SERVICE_STATUS = avail.isGooglePlayServicesAvailable(this);
 checkPlayService(PLAY_SERVICE_STATUS);

และสำหรับรุ่นGoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;จะให้คุณ

และหนึ่งในคำตอบที่มีประโยชน์ที่สุดที่ฉันพบระหว่างการวิจัยอยู่ที่นี่


6
int status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
if(status != ConnectionResult.SUCCESS) {
     if(status == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED){
        Toast.makeText(this,"please update your google play service",Toast.LENGTH_SHORT).show();
     }
     else {
        Toast.makeText(this, "please download the google play service", Toast.LENGTH_SHORT).show();
     }
}

5

สิ่งสำคัญ : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE ส่งคืนเวอร์ชันขั้นต่ำที่แอปของคุณต้องการไม่ใช่เวอร์ชันบริการการเล่นที่ติดตั้งบนอุปกรณ์ของผู้ใช้


1

เมื่อเช้านี้ฉันเจอปัญหาเดียวกัน และทำได้โดยคำแนะนำจาก stan0. ขอบคุณ stan0.

เพียงหนึ่งการเปลี่ยนแปลงที่จำเป็นตามรหัสตัวอย่างจากhttps://developers.google.com/maps/documentation/android/map

private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the
    // map.
    if (mMap == null) {
        FragmentManager mgr = getFragmentManager();
        MapFragment mapFragment = (MapFragment)mgr.findFragmentById(R.id.map);
        mMap = mapFragment.getMap();
        // Check if we were successful in obtaining the map.
        if (mMap != null) {
            // The Map is verified. It is now safe to manipulate the map.
            setUpMap();
        }else{
            // check if google play service in the device is not available or out-dated.
            GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);

            // nothing anymore, cuz android will take care of the rest (to remind user to update google play service).
        }
    }
}

นอกจากนี้คุณต้องเพิ่มแอตทริบิวต์ให้กับ manifest.xml ของคุณเป็น:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name"
android:versionCode="3225130"
android:versionName="your.version" >

และค่าของ "3225130" จะนำมาจาก google-play-services_lib ที่โปรเจ็กต์ของคุณใช้อยู่ นอกจากนี้ค่าดังกล่าวยังอยู่ในตำแหน่งเดียวกันของ manifest.xml ใน google-play-services_lib

หวังว่ามันจะช่วยได้


1

หากคุณค้นหาบริการ Google Play ในตัวจัดการแอปพลิเคชันจะแสดงเวอร์ชันที่ติดตั้ง


ฉันไม่ได้ลองใช้วิธีการแบบเป็นโปรแกรมอื่น ๆ ที่ระบุไว้ในคำตอบอื่น ๆ แต่การค้นหาในตัวจัดการแอปพลิเคชันได้ผลสำหรับฉันขอบคุณ!
Kent.Green

1

อัปเดต (2019.07.03) เวอร์ชัน Kotlin:

class GooglePlayServicesUtil {

    companion object {

        private const val GOOGLE_PLAY_SERVICES_AVAILABLE_REQUEST = 9000

        fun isGooglePlayServicesWithError(activity: Activity, showDialog: Boolean): Boolean {
            val status = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity)
            return if (status != ConnectionResult.SUCCESS) {
                if (showDialog) {
                    GoogleApiAvailability.getInstance().getErrorDialog(activity, status, GOOGLE_PLAY_SERVICES_AVAILABLE_REQUEST).show()
                }
                true
            } else {
                false
            }
        }

    }

}

0

ใช้ฟังก์ชันต่อไปนี้เพื่อตรวจสอบว่าสามารถใช้บริการ Google Play ได้หรือไม่

 private boolean checkGooglePlayServicesAvailable() {
    final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
        showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
        return false;
    }
    return true;
}

0
int apkVersion = GoogleApiAvailability.getInstance().getApkVersion(getContext());

จะได้ผลลัพธ์เช่นเดียวกับ:

int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;

แต่อันที่สองจะต้องใส่ไว้ในลองจับ


-4
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
    int currentVersion = getAppVersion(context);
    if (registeredVersion != currentVersion) {
        Log.i(TAG, "App version changed.");
        return "";
    }

นี่ไม่ใช่วิธีแก้ปัญหา
Stanley Kou
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.