In meiner Anwendung muss ich die Version der Google Play-Dienste überprüfen (die auf dem Gerät des Benutzers installiert ist). Ist es möglich ? Und wenn ja, wie kann ich das machen? Ich habe Google durchsucht, aber nichts gefunden!
In meiner Anwendung muss ich die Version der Google Play-Dienste überprüfen (die auf dem Gerät des Benutzers installiert ist). Ist es möglich ? Und wenn ja, wie kann ich das machen? Ich habe Google durchsucht, aber nichts gefunden!
Antworten:
Ich habe eine einfache Lösung gefunden:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Aber versionCode
in API 28 als veraltet, so dass Sie verwenden können PackageInfoCompat
:
long v = PackageInfoCompat.getLongVersionCode(getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ));
Wenn Sie in der Verbindung von Stan0 vorgesehen schauen sehen Sie dies :
public static final int GOOGLE_PLAY_SERVICES_VERSION_CODE
Mindestversion des Google Play-Dienstpakets (deklariert in AndroidManifest.xml android: versionCode), um mit dieser Client-Version kompatibel zu sein. Konstanter Wert: 3225000 (0x003135a8)
Wenn Sie dies in Ihrem Manifest festlegen und dann aufrufen isGooglePlayServicesAvailable(context)
:
public static int isGooglePlayServicesAvailable (Context context)
Überprüft, ob die Google Play-Dienste auf diesem Gerät installiert und aktiviert sind und ob die auf diesem Gerät installierte Version nicht älter als die von diesem Client benötigte ist.
Kehrt zurück
- Statuscode, der angibt, ob ein Fehler aufgetreten ist. Kann man von in Connection folgenden sein:
SUCCESS
,SERVICE_MISSING
,SERVICE_VERSION_UPDATE_REQUIRED
,SERVICE_DISABLED
,SERVICE_INVALID
.
Dadurch wird sichergestellt, dass das Gerät die Version verwendet, die Ihre App benötigt. Wenn nicht, können Sie gemäß der Dokumentation Maßnahmen ergreifen
GooglePlayServicesUtil.isGooglePlayServicesAvailable()
ist veraltet und GoogleApiAvailability.isGooglePlayServicesAvailable()
sollte jetzt stattdessen verwendet werden.
Hier ist meine Lösung:
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;
}
}
und Sie haben zwei Möglichkeiten: Schreiben Sie Ihren Code entweder direkt in den else-Block, wie kommentiert, oder verwenden Sie den zurückgegebenen booleschen Wert für diese Methode, um benutzerdefinierten Code zu schreiben.
Ich hoffe dieser Code hilft jemandem.
Von neueren Updates, die ich mit diesem Code erhalten habe, habe ich eine praktische Methode entwickelt, um alle damit verbundenen Dinge zu verwalten.
Alle Details zur Verfügbarkeit des Service und zugehörige Details finden Sie hier .
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;
}
}
Ich benutze es so,
GoogleApiAvailability avail;
int PLAY_SERVICE_STATUS = avail.isGooglePlayServicesAvailable(this);
checkPlayService(PLAY_SERVICE_STATUS);
Und für die Version GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE;
geben Sie.
Und eine der nützlichsten Antworten, die ich während meiner Recherche gefunden habe, ist hier.
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();
}
}
Ich bin heute Morgen auf dasselbe Problem gestoßen. Und habe es durch den Rat von stan0 erledigt. Danke stan0.
Basierend auf dem Beispielcode von https://developers.google.com/maps/documentation/android/map ist nur eine Änderung erforderlich .
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).
}
}
}
Außerdem müssen Sie Ihrer manifest.xml ein Attribut hinzufügen als:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name"
android:versionCode="3225130"
android:versionName="your.version" >
Der Wert von "3225130" wird aus der von Ihrem Projekt verwendeten google-play-services_lib übernommen. Außerdem befindet sich dieser Wert am selben Speicherort von manifest.xml in google-play-services_lib.
Hoffe, es wird hilfreich sein.
Wenn Sie im Anwendungsmanager nach Google Play Services suchen, wird die installierte Version angezeigt.
Aktualisiert (2019.07.03) Kotlin-Version:
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
}
}
}
}
Verwenden Sie die folgende Funktion, um zu überprüfen, ob Google Play-Dienste verwendet werden können oder nicht
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());
erhalten das gleiche Ergebnis wie:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
Aber der zweite muss in einen Try-Catch gesteckt werden.
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.i(TAG, "App version changed.");
return "";
}