Android 如何提示用户更新google play服务?
我可以很容易地检测到我的设备的google play services应用程序需要更新,并显示getErrorDialogFragment()以提示用户使用以下内容进行更新:Android 如何提示用户更新google play服务?,android,google-play-services,Android,Google Play Services,我可以很容易地检测到我的设备的google play services应用程序需要更新,并显示getErrorDialogFragment()以提示用户使用以下内容进行更新: GoogleApiAvailability googleApi = GoogleApiAvailability.getInstance(); mServiceAvailabilityCode = googleApi.isGooglePlayServicesAvailable(this); if
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年和数千次的观察,你是第一个认为这是误导的人。走开。