Uygulamamda, Google Play hizmetleri sürümünü (kullanıcının cihazında yüklü olan) kontrol etmem gerekiyor. Mümkün mü ? Ve evet ise, bunu nasıl yapabilirim? Google'da arama yaptım ama hiçbir şey bulamadım!
Uygulamamda, Google Play hizmetleri sürümünü (kullanıcının cihazında yüklü olan) kontrol etmem gerekiyor. Mümkün mü ? Ve evet ise, bunu nasıl yapabilirim? Google'da arama yaptım ama hiçbir şey bulamadım!
Yanıtlar:
Basit bir çözüm buldum:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Ancak versionCode
API 28'de kullanımdan kaldırılmıştır, dolayısıyla şunları kullanabilirsiniz PackageInfoCompat
:
long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));
Eğer Stan0 tarafından verilen bağlantıya bakarsanız göreceksiniz bu :
public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE
Bu istemci sürümüyle uyumlu olması için minimum Google Play hizmetleri paketi sürümü (AndroidManifest.xml android: versionCode'da beyan edilmiştir). Sabit Değer: 3225000 (0x003135a8)
Yani, bunu manifestinize koyduğunuzda ve sonra çağırdığınızda isGooglePlayServicesAvailable(context)
:
public static int isGooglePlayServicesAvailable (Context context)
Google Play hizmetlerinin bu cihaza yüklendiğini ve etkinleştirildiğini ve bu cihazda yüklü olan sürümün bu istemcinin gerektirdiğinden daha eski olmadığını doğrular.
İadeler
- bir hata olup olmadığını gösteren durum kodu. ConnectionResult aşağıdakilerden biri olabilir:
SUCCESS
,SERVICE_MISSING
,SERVICE_VERSION_UPDATE_REQUIRED
,SERVICE_DISABLED
,SERVICE_INVALID
.
Cihazın uygulamanızın gerektirdiği sürümü kullanmasını sağlar, değilse, belgelere göre işlem yapabilirsiniz.
GooglePlayServicesUtil.isGooglePlayServicesAvailable()
kullanımdan kaldırılmıştır ve GoogleApiAvailability.isGooglePlayServicesAvailable()
bunun yerine artık kullanılmalıdır.
İşte benim çözümüm:
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;
}
}
ve iki seçeneğiniz vardır, ya kodunuzu doğrudan else bloğuna yorumlandığı gibi yazın ya da özel kod yazmak için bu yöntem için döndürülen boole değerini kullanın.
Umarım bu kod birine yardımcı olur.
Daha yeni güncellemelerden, bu kodla sonuçlandığımdan, onunla ilgili her şeyi yönetmek için kullanışlı bir yöntem yaptım ..
Hizmetin kullanılabilirliğiyle ilgili tüm ayrıntılar ve ilgili ayrıntılar burada mevcuttur .
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;
}
}
Ben böyle kullanıyorum
GoogleApiAvailability avail;
int PLAY_SERVICE_STATUS = avail.isGooglePlayServicesAvailable(this);
checkPlayService(PLAY_SERVICE_STATUS);
Ve sürüm GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;
için size verecek.
Araştırmam sırasında bulduğum en faydalı cevaplardan biri de burası.
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();
}
}
Bu sabah aynı problemle karşılaştım. Ve stan0'ın tavsiyesi ile hallettim. Teşekkürler stan0.
Https://developers.google.com/maps/documentation/android/map adresindeki örnek koda göre yalnızca bir değişiklik gereklidir .
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).
}
}
}
Ayrıca, manifest.xml dosyanıza şu şekilde bir öznitelik eklemeniz gerekir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name"
android:versionCode="3225130"
android:versionName="your.version" >
Ve "3225130" değeri, projenizin kullandığı google-play-services_lib'den alınır. Ayrıca, bu değer google-play-services_lib'de manifest.xml ile aynı konumda bulunuyor.
Umarım yardımcı olur.
Uygulama yöneticisinde Google Play Hizmetlerini ararsanız, yüklü sürümü gösterecektir.
Güncellenmiş (2019.07.03) Kotlin sürümü:
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
}
}
}
}
google oyun hizmetlerinin kullanılıp kullanılamayacağını kontrol etmek için aşağıdaki işlevi kullanın
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());
şununla aynı sonucu alacak:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Ancak ikincisinin bir deneme yakalama içine konması gerekiyor.
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.i(TAG, "App version changed.");
return "";
}