【问题标题】:Google Map API Demo won't run unless you update Google Play services除非您更新 Google Play 服务,否则 Google Map API Demo 将无法运行
【发布时间】:2017-02-03 13:53:39
【问题描述】:

我在 android studio 中运行模拟器时遇到问题。模拟器提示我“除非您更新 Google Play 服务,否则 Google Map API Demo 将无法运行”

我看到这个错误信息:

--------- beginning of crash 02-03 13:29:47.762 2870-2870/com.example.xxx_000.googlemapapidemo E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                      Process: com.example.xxx_000.googlemapapidemo, PID: 2870
                                                                                      android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=market://details?id=com.google.android.gms&pcampaignid=gcore_9683000--- flg=0x80000 pkg=com.android.vending }
                                                                                          at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1798)
                                                                                          at android.app.Instrumentation.execStartActivity(Instrumentation.java:1512)
                                                                                          at android.app.Activity.startActivityForResult(Activity.java:3917)
                                                                                          at android.support.v4.app.BaseFragmentActivityJB.startActivityForResult(BaseFragmentActivityJB.java:48)
                                                                                          at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:75)
                                                                                          at android.app.Activity.startActivityForResult(Activity.java:3877)
                                                                                          at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:856)
                                                                                          at android.app.Activity.startActivity(Activity.java:4200)
                                                                                          at android.app.Activity.startActivity(Activity.java:4168)
                                                                                          at com.google.android.gms.dynamic.zza$5.onClick(Unknown Source)
                                                                                          at android.view.View.performClick(View.java:5198)
                                                                                          at android.view.View$PerformClick.run(View.java:21147)
                                                                                          at android.os.Handler.handleCallback(Handler.java:739)
                                                                                          at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                          at android.os.Looper.loop(Looper.java:148)
                                                                                          at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                          at java.lang.reflect.Method.invoke(Native Method)
                                                                                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 02-03 13:29:49.877 2870-2870/com.example.xxx_000.googlemapapidemo I/Process: Sending signal. PID: 2870 SIG: 9 02-03 13:35:13.441 5142-5142/com.example.xxx_000.googlemapapidemo W/System: ClassLoader referenced unknown path: /data/app/com.example.xxx_000.googlemapapidemo-1/lib/x86 02-03 13:35:13.504 5142-5142/com.example.xxx_000.googlemapapidemo I/FirebaseInitProvider: FirebaseApp initialization unsuccessful 02-03 13:35:13.713 5142-5142/com.example.xxx_000.googlemapapidemo W/GooglePlayServicesUtil: Google Play services out of date.  Requires 9683000 but found 9452470 02-03 13:35:13.726 5142-5142/com.example.xxx_000.googlemapapidemo ... 5142-5261/com.example.xxx_000.googlemapapidemo D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true

我的 build.gradle 文件是这样的:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "com.example.xxx_000.googlemapapidemo"
        minSdkVersion 17
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dexOptions {
        javaMaxHeapSize "2g"
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.google.android.gms:play-services:9.6.1'
}

有人可以帮我吗?谢谢!

【问题讨论】:

  • 在真机上试一下就可以了。您的模拟器没有安装播放服务
  • 哦,好吧..我会尝试使用真实设备。非常感谢!
  • 它可以在安装了播放服务和相同或更高版本的 9.6,1 的设备上运行
  • 哦,好吧,我会试试的。谢谢!

标签: android android-studio google-play-services


【解决方案1】:

更新您的模拟器并创建一个 API 级别为 (with Google APIs) 或使用真实设备的模拟器。

【讨论】:

  • 是的。无论如何,它们很可能是最新的,但在创建新的之前值得检查。
  • 我检查了我的 sdk 管理器,一切都更新了。所以我点击播放并点击“创建新模拟器”来创建一个新的模拟器,其 API 级别显示为(使用 Google API)?我没有看到。
  • 哦,我想我知道怎么做。点击 Android 虚拟设备管理器,我会看到一个。谢谢!
【解决方案2】:

虽然接受的答案适用于模拟器,但这在真实设备上可能是一个真正的问题,并且此解决方案不适用于真实设备。这可能发生在具有过时版本的 Google Play 服务的旧设备上。

为了克服这个问题,Google Play 服务库提供了一组 API 来检查 Google Play 服务的可用性,主要是 GoogleApiAvailability 类提供了一些方法来处理可用性问题,例如过时的版本。

现在,为了检测设备是否有可用的 Google Play 服务,我通常做的是创建一个辅助方法来运行检查

private boolean checkPlayServices(){
    GoogleApiAvailability gaa = GoogleApiAvailability.getInstance();
    int result = gaa.isGooglePlayServicesAvailable(getApplicationContext());

    if(result != ConnectionResult.SUCCESS){
        if(gaa.isUserResolvableError(result)){
            gaa.getErrorDialog(this,result, REQUEST_PLAY_SERVICES_RESOLUTION).show();
        }

        return false;
    }

    return true;
}

此帮助方法通过检查从isGooglePlayServicesAvailable 返回的错误代码来检查 Google Play 服务是否可用。然后它调用isUserResolvableError 来确定用户是否可以解决错误(例如,通过更新 Google Play 服务)。如果它是可解决的,则会显示一个对话框供用户确认他希望系统解决该错误。然后在 Activity 的 onCreate 方法上调用它,我运行检查如下

//I normally assume Google Play services is available
private boolean playServicesAvailable = true;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map_selector);

    //check for rare case where Google Play Services is not available
    playServicesAvailable = checkPlayServices();

    if(!playServicesAvailable){
        //hide UI elements and turn off features that rely on Google Play Services
    }
}

希望对大家有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-23
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2017-12-08
    相关资源
    最近更新 更多