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

ang*_*guy 10 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;
                    ....
                }
Run Code Online (Sandbox Code Playgroud)

但是,如果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 ?
Run Code Online (Sandbox Code Playgroud)

因此,用户按下对话框上的"更新"按钮并未启动Android的Playstore并加载"Playstor服务"应用程序以供用户更新,这是我原本应该做的.按"更新"直接回到onActivityResult.这是我很困惑的地方.Android不应该为我推出这款产品吗?或者我必须自己在OnActivityResult中做到这一点?

ang*_*guy 12

当您遇到2个Google Play服务(GPS)问题时,问题是由特定情况引起的.由于GPS也禁用了Google Play商店(GPT),因此无法在设备上运行.

如果您的Google Play服务已过期,请使用错误代码ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED(错误代码2)调用showErrorDialogFragment ,该工作正常.

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

在我的情况下,播放服务已被禁用,并且已过期.所以,方法是先调用showErrorDialogFragment,然后你会得到一个响应错误代码SERVICE_VERSION_UPDATE_REQUIRED.

Android将尝试通过发送pendingIntent来启动Google Play商店(GPT)以更新GPS来解决此问题,但这将失败,因为GPT依赖于ENABLED版本的GPS.因为你正在调用showErrorDialogFragment,所以在它无法启动GPT后会调用onActivityResult.

下一步是编写onActivityResult.我需要isGooglePlayServicesAvailable() 再次测试.如果仍然出现相同的错误代码(SERVICE_VERSION_UPDATE_REQUIRED),那么你就需要调用showErrorDialogFragment 再次onActivityResult,但这次它传递一个不同的错误代码,ConnectionResult.SERVICE_DISABLED(错误代码3).这将使用户首先启动应用程序管理员以启用Google Play服务.然后当您返回应用程序时,您需要进行测试,isGooglePlayServicesAvailable然后它应该检测到谷歌服务仍然过时.如果您成功更新了应用程序,则onActivityResult应该允许您确定是否成功isGooglePlayServicesAvailable并且您可以继续.请注意,您可能需要添加一个标记,以便您知道再次测试Google Play服务兼容性,而不是继续执行启动过程.

(所以,googleApiAvailability应该做的是首先返回已禁用的错误(即ConnectionResult.SERVICE_DISABLED又名错误代码3),因此您可以在尝试更新GPS之前先解决此问题.)


Dar*_*ana 7

这对我有用

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
}
Run Code Online (Sandbox Code Playgroud)