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之前先解决此问题.)
这对我有用
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)
| 归档时间: |
|
| 查看次数: |
5034 次 |
| 最近记录: |