ในแอปพลิเคชันของฉันฉันต้องตรวจสอบเวอร์ชันบริการ Google Play (ซึ่งติดตั้งในอุปกรณ์ของผู้ใช้) เป็นไปได้ไหม ? และถ้าใช่ฉันจะทำได้อย่างไร? ฉันค้นหาใน Google แต่ไม่พบอะไรเลย!
ในแอปพลิเคชันของฉันฉันต้องตรวจสอบเวอร์ชันบริการ Google Play (ซึ่งติดตั้งในอุปกรณ์ของผู้ใช้) เป็นไปได้ไหม ? และถ้าใช่ฉันจะทำได้อย่างไร? ฉันค้นหาใน Google แต่ไม่พบอะไรเลย!
คำตอบ:
ฉันพบวิธีง่ายๆ:
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 ));
หากคุณดูในลิงค์ที่ให้มาโดย 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_DISABLED
SERVICE_INVALID
เพื่อให้แน่ใจว่าอุปกรณ์กำลังใช้เวอร์ชันที่แอปของคุณต้องการหากไม่เป็นเช่นนั้นคุณสามารถดำเนินการตามเอกสารได้
GooglePlayServicesUtil.isGooglePlayServicesAvailable()
เลิกใช้งานแล้วและตอนนี้GoogleApiAvailability.isGooglePlayServicesAvailable()
ควรใช้แทน
นี่คือทางออกของฉัน:
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;
}
}
และคุณมีสองทางเลือก ได้แก่ เขียนโค้ดของคุณโดยตรงในบล็อกอื่นตามที่แสดงความคิดเห็นหรือใช้ค่าบูลีนที่ส่งคืนสำหรับวิธีนี้เพื่อเขียนโค้ดที่กำหนดเอง
ฉันหวังว่ารหัสนี้จะช่วยใครบางคนได้
จากการอัปเดตที่ใหม่กว่าฉันได้ลงเอยด้วยรหัสนี้ฉันได้สร้างวิธีที่สะดวกในการจัดการทุกสิ่งที่เกี่ยวข้องกับมัน ..
รายละเอียดทั้งหมดที่เกี่ยวข้องกับความพร้อมในการให้บริการและรายละเอียดที่เกี่ยวข้องที่มีอยู่ที่นี่
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;
จะให้คุณ
และหนึ่งในคำตอบที่มีประโยชน์ที่สุดที่ฉันพบระหว่างการวิจัยอยู่ที่นี่
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();
}
}
สิ่งสำคัญ : GoogleApiAvailability.GOOGLE_PLAY_SERVICES_VERSION_CODE ส่งคืนเวอร์ชันขั้นต่ำที่แอปของคุณต้องการไม่ใช่เวอร์ชันบริการการเล่นที่ติดตั้งบนอุปกรณ์ของผู้ใช้
เมื่อเช้านี้ฉันเจอปัญหาเดียวกัน และทำได้โดยคำแนะนำจาก 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
หวังว่ามันจะช่วยได้
หากคุณค้นหาบริการ Google Play ในตัวจัดการแอปพลิเคชันจะแสดงเวอร์ชันที่ติดตั้ง
อัปเดต (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
}
}
}
}
ใช้ฟังก์ชันต่อไปนี้เพื่อตรวจสอบว่าสามารถใช้บริการ Google Play ได้หรือไม่
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());
จะได้ผลลัพธ์เช่นเดียวกับ:
int v = getPackageManager().getPackageInfo(GoogleApiAvailability.GOOGLE_PLAY_SERVICES_PACKAGE, 0 ).versionCode;
แต่อันที่สองจะต้องใส่ไว้ในลองจับ
int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE);
int currentVersion = getAppVersion(context);
if (registeredVersion != currentVersion) {
Log.i(TAG, "App version changed.");
return "";
}