Làm cách nào để kiểm tra phiên bản dịch vụ của Google Play?


95

Trong ứng dụng của mình, tôi cần kiểm tra phiên bản dịch vụ của Google Play (được cài đặt trong thiết bị của người dùng). Nó có khả thi không? Và nếu có, làm thế nào tôi có thể làm điều đó? Tôi đã tìm kiếm Google nhưng tôi không thể tìm thấy bất cứ điều gì!

Câu trả lời:


94

Tôi đã tìm thấy giải pháp đơn giản:

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

Nhưng versionCodekhông được dùng nữa trong API 28, vì vậy bạn có thể sử dụng PackageInfoCompat:

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

6
Làm thế nào để biết mã phiên bản của dịch vụ chơi phiên bản 10.2
Manmohan Soni

Kể từ mã phiên bản bị phản đối với API28 bạn nên sử dụng PackageInfoCompat.getLongVersionCode
G00fY

51

Nếu bạn nhìn vào liên kết được cung cấp bởi Stan0, bạn sẽ thấy điều này :

public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE

Phiên bản gói dịch vụ Google Play tối thiểu (được khai báo trong AndroidManifest.xml android: versionCode) để tương thích với phiên bản ứng dụng khách này. Giá trị không đổi: 3225000 (0x003135a8)

Vì vậy, khi bạn đặt điều đó trong tệp kê khai của mình và sau đó gọi isGooglePlayServicesAvailable(context):

public static int isGooglePlayServicesAvailable (Context context)

Xác minh rằng các dịch vụ của Google Play đã được cài đặt và kích hoạt trên thiết bị này và phiên bản được cài đặt trên thiết bị này không cũ hơn phiên bản mà ứng dụng khách này yêu cầu.

Lợi nhuận

  • mã trạng thái cho biết có lỗi hay không. Có thể là một trong những sau trong ConnectionResult: SUCCESS, SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED, SERVICE_DISABLED, SERVICE_INVALID.

Nó sẽ đảm bảo rằng thiết bị đang sử dụng phiên bản mà ứng dụng của bạn yêu cầu, nếu không, bạn có thể thực hiện hành động theo tài liệu

Biên tập

GooglePlayServicesUtil.isGooglePlayServicesAvailable()không được dùng nữa và bây giờ GoogleApiAvailability.isGooglePlayServicesAvailable()sẽ được sử dụng thay thế.


2
. GoogleApiAvailability bây giờ là một singleton vì vậy bạn nên sử dụng: GoogleApiAvailability.getInstance () isGooglePlayServicesAvailable (hoạt động)
Nativ

@Nativ là có cách nào để kiểm tra xem liệu các phiên bản dịch vụ google play chạy trên thiết bị Android lớn hơn 10,2 hay không
Manmohan Soni

@ManmohanSoni Tôi chắc chắn là có. Tôi hiện đang chuyển sang phát triển iOS nên không thể giúp được gì nhiều cho bạn.
Nativ

15

đây là giải pháp của tôi:

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

và bạn có hai tùy chọn, hoặc viết mã của bạn trực tiếp trong khối khác như đã nhận xét hoặc sử dụng giá trị boolean trả về cho phương thức này để viết mã tùy chỉnh.

Tôi hy vọng mã này sẽ giúp ai đó.


6

Từ các bản cập nhật mới hơn, tôi đã kết thúc với mã này, tôi đã thực hiện một phương pháp hữu ích để quản lý tất cả những thứ liên quan đến nó ..

Tất cả các chi tiết liên quan đến tính khả dụng của Dịch vụ và các chi tiết liên quan có sẵn tại đây .

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

Tôi sử dụng nó như thế này,

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

Và đối với phiên bản GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;sẽ cung cấp cho bạn.

Và một trong những câu trả lời hữu ích nhất mà tôi tìm thấy trong quá trình nghiên cứu của mình là ở đây.


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

4

QUAN TRỌNG : GoogleApiAvailable.GOOGLE_PLAY_SERVICES_VERSION_CODE trả về phiên bản tối thiểu mà ứng dụng của BẠN yêu cầu, không phải phiên bản dịch vụ chơi được cài đặt trên thiết bị của người dùng.


1

Tôi gặp phải vấn đề tương tự sáng nay. Và đã hoàn thành nó nhờ lời khuyên từ stan0. Cảm ơn stan0.

Chỉ cần một thay đổi dựa trên mã mẫu từ 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).
        }
    }
}

Bên cạnh đó, bạn cần thêm một thuộc tính vào tệp kê khai.xml của mình như:

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

Và giá trị của "3225130" được lấy từ google-play-services_lib mà dự án của bạn đang sử dụng. Ngoài ra, giá trị đó nằm ở cùng một vị trí của tệp kê khai.xml trong google-play-services_lib.

Hy vọng nó sẽ được giúp đỡ.


1

Nếu bạn tra cứu Dịch vụ của Google Play trong Trình quản lý ứng dụng, nó sẽ hiển thị phiên bản đã cài đặt.


Tôi chưa thử các cách tiếp cận có lập trình khác được liệt kê trong các câu trả lời khác nhưng tìm kiếm trong trình quản lý ứng dụng đã hiệu quả với tôi, cảm ơn!
Kent.Green

1

Cập nhật (2019.07.03) Phiên bản 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

sử dụng chức năng sau để kiểm tra xem các dịch vụ của google play có thể được sử dụng hay không

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

sẽ nhận được kết quả tương tự như:

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

Nhưng cái thứ hai cần phải được đặt trong một thử nghiệm.


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

Đây không phải là một giải pháp.
Stanley Kou
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.