Dalam aplikasi saya, saya perlu memeriksa versi layanan Google Play (yang diinstal di perangkat pengguna). Apa itu mungkin ? Dan jika ya, bagaimana saya bisa melakukannya? Saya mencari di Google tetapi tidak menemukan apa-apa!
Dalam aplikasi saya, saya perlu memeriksa versi layanan Google Play (yang diinstal di perangkat pengguna). Apa itu mungkin ? Dan jika ya, bagaimana saya bisa melakukannya? Saya mencari di Google tetapi tidak menemukan apa-apa!
Jawaban:
Saya menemukan solusi sederhana:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Tapi versionCode
sudah tidak digunakan lagi di API 28, jadi Anda bisa menggunakan PackageInfoCompat
:
long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));
Jika Anda melihat di tautan yang disediakan oleh Stan0 Anda akan melihat ini :
public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE
Versi paket layanan Google Play minimum (dideklarasikan di AndroidManifest.xml android: versionCode) agar kompatibel dengan versi klien ini. Nilai Konstanta: 3225000 (0x003135a8)
Jadi, ketika Anda mengaturnya di manifes Anda dan kemudian memanggil isGooglePlayServicesAvailable(context)
:
public static int isGooglePlayServicesAvailable (Context context)
Memverifikasi bahwa layanan Google Play diinstal dan diaktifkan di perangkat ini, dan bahwa versi yang diinstal di perangkat ini tidak lebih lama dari yang diperlukan oleh klien ini.
Kembali
- kode status yang menunjukkan apakah ada kesalahan. Dapat menjadi salah satu berikut ConnectionResult:
SUCCESS
,SERVICE_MISSING
,SERVICE_VERSION_UPDATE_REQUIRED
,SERVICE_DISABLED
,SERVICE_INVALID
.
Ini akan memastikan bahwa perangkat menggunakan versi yang dibutuhkan aplikasi Anda, jika tidak, Anda dapat mengambil tindakan sesuai dengan dokumentasi
GooglePlayServicesUtil.isGooglePlayServicesAvailable()
tidak digunakan lagi dan sekarang GoogleApiAvailability.isGooglePlayServicesAvailable()
harus digunakan sebagai gantinya.
inilah solusi saya:
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;
}
}
dan Anda memiliki dua opsi, tulis kode Anda langsung di blok else as commented, atau gunakan nilai boolean yang dikembalikan untuk metode ini untuk menulis kode kustom.
Saya harap kode ini membantu seseorang.
Dari pembaruan yang lebih baru saya telah berakhir dengan kode ini, saya telah membuat metode praktis untuk mengelola semua hal yang berkaitan dengannya ..
Semua detail terkait ketersediaan Layanan dan detail terkait tersedia di sini .
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;
}
}
Saya menggunakannya seperti ini,
GoogleApiAvailability avail;
int PLAY_SERVICE_STATUS = avail.isGooglePlayServicesAvailable(this);
checkPlayService(PLAY_SERVICE_STATUS);
Dan untuk versi GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;
akan memberi Anda.
Dan salah satu jawaban paling berguna yang saya temukan selama penelitian saya ada di sini.
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();
}
}
PENTING : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE mengembalikan versi minimum yang dibutuhkan oleh aplikasi ANDA, bukan versi layanan bermain yang diinstal pada perangkat pengguna.
Saya mengalami masalah yang sama pagi ini. Dan menyelesaikannya atas saran dari stan0. Terima kasih stan0.
Hanya satu perubahan yang diperlukan berdasarkan kode contoh dari 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).
}
}
}
Selain itu, Anda perlu menambahkan atribut ke manifest.xml Anda sebagai:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name"
android:versionCode="3225130"
android:versionName="your.version" >
Dan nilai "3225130" diambil dari google-play-services_lib yang digunakan proyek Anda. Selain itu, nilai tersebut berada di lokasi yang sama dari manifest.xml di google-play-services_lib.
Semoga bisa membantu.
Jika Anda mencari Layanan Google Play di Manajer aplikasi, itu akan menunjukkan versi yang diinstal.
Versi Kotlin yang diperbarui (2019.07.03):
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
}
}
}
}
gunakan fungsi berikut untuk memeriksa apakah layanan google play dapat digunakan atau tidak
private boolean checkGooglePlayServicesAvailable() {
final int connectionStatusCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
return false;
}
return true;
}
int apkVersion = GoogleApiAvailability.getInstance().getApkVersion(getContext());
akan mendapatkan hasil yang sama seperti:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Tapi yang kedua harus dimasukkan ke dalam uji coba.
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.i(TAG, "App version changed.");
return "";
}