你如何提示用户更新谷歌播放服务?

时间:2017-04-27 04:09:26

标签: android google-play-services

我可以轻松检测到我的设备的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中做到这一点?

5 个答案:

答案 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}

<强>对话: enter image description here

答案 4 :(得分:-1)

还有此代码:

https://gist.github.com/kristopherjohnson/7554793

哪些要求:

实现“ com.google.android.gms:play-services-auth:$ playServiceAuthVersion”