我可以轻松检测到我的设备的Google Play服务应用需要更新,并提供getErrorDialogFragment()以提示用户使用以下内容进行更新:
GoogleApiAvailability googleApi = GoogleApiAvailability.getInstance();
mServiceAvailabilityCode = googleApi.isGooglePlayServicesAvailable(this);
if (mServiceAvailabilityCode == ConnectionResult.SUCCESS) {
...
else {
if (googleApi.isUserResolvableError(mServiceAvailabilityCode)) {
switch (mServiceAvailabilityCode) {
....
case SERVICE_VERSION_UPDATE_REQUIRED:
googleApi.showErrorDialogFragment(SplashActivity.this, mServiceAvailabilityCode, PLAY_SERVICES_RESOLUTION_REQUEST);
break;
....
}
但是,如果Google Play服务已停用且已过期,则会向用户显示一个带有“更新”按钮的对话框,一旦用户按下该按钮,该应用会立即返回onActivityResult,然后我在OnActivityResult中捕获响应和请求代码,如下所示:
@Override
protected void onActivityResult(int requestCode, int mServiceAvailabilityCode, Intent data) {
super.onActivityResult(requestCode, mServiceAvailabilityCode, data);
switch (requestCode) {
case PLAY_SERVICES_RESOLUTION_REQUEST:
finish();
// do i need to launch app manager-> app info for google play services ?
因此,用户按下对话框上的“更新”按钮并未启动Android的Playstore并加载“Playstor服务”应用程序以供用户更新,这是我原本应该做的。按“更新”直接回到onActivityResult。这是我很困惑的地方。 Android不应该为我推出这款产品吗?或者我必须自己在OnActivityResult中做到这一点?
答案 0 :(得分:9)
当您遇到2个Google Play服务(GPS)问题时,问题是由特定情况引起的。由于GPS也已禁用Google Play商店(GPT),因此无法在设备上运行。
如果您的Google Play服务已过期,请使用错误代码if
(错误代码2)调用showErrorDialogFragment,该工作正常。
但如果您的GPS已被禁用且已过期,那么ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED
api的工作方式就会出现问题。如果您调用googleApiAvailability
,它将返回找到的第一个错误,但它不一定是你想先解决的错误。问题是知道您需要先解决另一个错误。 isGooglePlayServicesAvailable()
在这方面没有帮助。
在我的情况下,播放服务已被禁用,并且已过期。因此,方法是首先调用showErrorDialogFragment,然后您将获得isGooglePlayServicesAvailable()
的响应错误代码。
Android将尝试通过发送pendingIntent来启动Google Play商店(GPT)以更新GPS来解决此问题,但这将失败,因为GPT依赖于ENABLED版本的GPS。因为您正在调用showErrorDialogFragment,所以它会在无法启动GPT后调用onActivityResult。
下一步是编辑onActivityResult。我需要再次测试SERVICE_VERSION_UPDATE_REQUIRED
。如果仍然得到相同的错误代码(SERVICE_VERSION_UPDATE_REQUIRED),那么您需要在isGooglePlayServicesAvailable()
中再次调用showErrorDialogFragment ,但这次传递了不同的错误代码onActivityResult
(错误代码3)。这将使用户首先启动应用程序管理员以启用Google Play服务。然后,当返回应用程序时,您需要测试ConnectionResult.SERVICE_DISABLED
,然后它应该检测到谷歌服务仍然过时。如果您成功更新了应用,则isGooglePlayServicesAvailable
应该允许您确定onActivityResult
是否成功,您可以继续。请注意,您可能需要添加一个标记,以便您知道再次测试Google Play服务兼容性,而不是继续执行启动过程。
(因此,googleApiAvailability应该做的事情是首先返回已禁用的错误(即isGooglePlayServicesAvailable
又名错误代码3),这样您就可以在尝试更新GPS之前先解决此问题。)
答案 1 :(得分:4)
这对我有用
GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
int result = googleAPI.isGooglePlayServicesAvailable(this);
if(result != ConnectionResult.SUCCESS) {
if(googleAPI.isUserResolvableError(result)) {
//prompt the dialog to update google play
googleAPI.getErrorDialog(this,result,PLAY_SERVICES_RESOLUTION_REQUEST).show();
}
}
else{
//google play up to date
}
答案 2 :(得分:0)
Google Play Services
可在Play Store
上下载和更新。您只需打开Play Store
。
Here是服务的链接。
您可以做的是使用ACTION_VIEW
意图启动活动,如下所示
String LINK_TO_GOOGLE_PLAY_SERVICES = "play.google.com/store/apps/details?id=com.google.android.gms&hl=en";
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://" + LINK_TO_GOOGLE_PLAY_SERVICES)));
} catch (android.content.ActivityNotFoundException anfe) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://" + LINK_TO_GOOGLE_PLAY_SERVICES)));
}
答案 3 :(得分:0)
不确定Google修复了哪个版本,但使用最新的11.6.0,您可以获得正确的statusCode以及导致设置启用Google Play服务的对话框。
<强> logcat的:强>
11-24 05:48:07.266 V/FA: Activity resumed, time: 2070779368
11-24 05:48:07.320 W/FA: Service connection failed: ConnectionResult{statusCode=SERVICE_DISABLED, resolution=null, message=null}
答案 4 :(得分:-1)
还有此代码:
https://gist.github.com/kristopherjohnson/7554793
哪些要求:
实现“ com.google.android.gms:play-services-auth:$ playServiceAuthVersion”