Android 如何提示用户更新google play服务?

Android 如何提示用户更新google play服务?,android,google-play-services,Android,Google Play Services,我可以很容易地检测到我的设备的google play services应用程序需要更新,并显示getErrorDialogFragment()以提示用户使用以下内容进行更新: GoogleApiAvailability googleApi = GoogleApiAvailability.getInstance(); mServiceAvailabilityCode = googleApi.isGooglePlayServicesAvailable(this); if

我可以很容易地检测到我的设备的google play services应用程序需要更新,并显示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并加载“PlayStorServices”应用程序供用户更新,这是我所期望的。按“更新”直接返回onActivityResult。这就是我困惑的地方。安卓不应该为我发布这个吗?还是我必须自己在OnActivityResult中完成

googleplay服务
可在
Play商店
下载和更新。您只需打开
播放商店

是服务的链接

您可以使用
ACTION\u视图
intent启动活动,如下所示

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)));
}

当您的Google Play Services(GPS)出现2个问题时,该问题是由特定情况引起的。由于GPS也被禁用,Google Play Store(GPT)将不会在设备上运行

如果您的Google Play服务已过期,请使用错误代码
ConnectionResult.SERVICE\u VERSION\u UPDATE\u REQUIRED
,(错误代码2)调用showErrorDialogFragment,这样可以正常工作

但是,如果您的GPS被禁用且已过期,则说明
GoogleAppAvailability
api的工作方式存在问题。如果调用
isGooglePlayServicesAvailable()
,它将返回找到的第一个错误,但不一定是您要首先解决的错误。问题是知道您还有另一个需要首先解决的错误
isGooglePlayServicesAvailable()
在这方面没有帮助

在我的例子中,播放服务被禁用,并且已经过时。因此,方法是首先调用DialogFragment,您将得到
服务版本更新所需的响应错误代码

Android将试图通过发送一个PendingEvent来启动Google Play Store(GPT)来更新GPS来解决这个问题,但这将失败,因为GPT依赖于启用的GPS版本。因为您正在调用showErrorDialogFragment,它将在启动GPT失败后调用onActivityResult

下一步是编码onActivityResult。我需要再次测试
isGooglePlayServicesAvailable()
。如果仍然得到相同的错误代码(需要服务版本更新),则需要在
onActivityResult
中再次调用showErrorDialogFragment,但这次传递给它一个不同的错误代码,
ConnectionResult.SERVICE\u DISABLED
(错误代码3)。这将首先将用户带到应用程序管理器以启用google play服务。然后,当返回应用程序时,您需要测试
isGooglePlayServicesAvailable
,然后它应该检测到google服务仍然过时。如果成功更新应用程序,
onActivityResult
应允许您确定
isGooglePlayServicesAvailable
成功,您可以继续。请注意,您可能需要添加一个标志,以便知道要再次测试google play服务的兼容性,而不是继续执行启动过程

(因此,GoogleAppAvailability真正应该做的是首先返回禁用的错误(即
ConnectionResult.SERVICE\u disabled
aka error code 3),这样您就可以在尝试更新GPS之前先解决该问题。)

这对我很有效

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
}

不确定谷歌在哪个版本中修复了它,但使用最新的11.6.0,您可以获得正确的状态码和对话框,该对话框将导致启用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}
对话框:
还有以下代码:

其中要求:


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

如何转到google play商店更新google play服务不是问题。那么问题是什么?如果打开App Manager是个问题,那么最终也会导致Play Store。这并不能回答问题。这个问题的前提是,谷歌播放错误的传统解决方案(既过时又被禁用)不能用您的答案解决。我在发布问题后提供了一个答案,并对一个场景进行了大量测试,其中google play既过时又被禁用。请参阅我的答案-1问题在于9.6+和GPS如何解决它。请通读我的解决方案以获得理解。@MSD我已成功实施了此方法。诀窍是使用onActivityResult测试在确定Google PlayServices是否同时启用和更新时是否存在多个错误。请通读我的问题和答案,看看问题是GPS处理多个版本和状态问题的方式。你提供的答案不能解决这个问题。在这种情况下,你能改变你问题的标题吗@如果stackoverflow假设每个人都只回答标题内容的问题,AngrityGuyi会这样做,但我们不会,这就是为什么你应该像其他人一样阅读细节。@AngrityGuyi如果标题误导了搜索或打开此链接的人,可能会对答案感到困惑是的,这是我的错。哈。经过2年和数千次的观察,你是第一个认为这是误导的人。走开。