除非您更新Google Play服务错误,否则此应用无法运行

时间:2014-05-03 21:25:29

标签: android google-maps android-emulator google-play google-play-services

我现在有点迷失了。 我正在使用Google地图实现Android应用程序。

为了使它工作,我遵循了一些非常有效的教程。但是我坚持这个“:

enter image description here

要解决此问题,我发现了一些技巧herehere,它们告诉您要解决此问题,您必须为模拟器采取特殊配置,这是我的:

enter image description here

并在模拟器上安装一些.apk。

enter image description here

应该完成魔法并且应该出现地图,这不是我的情况。

我检查了我的附加装置安装得好:

enter image description here

这是我的AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="mypack"
          android:versionCode="1"
          android:versionName="1.0">

    <uses-sdk android:minSdkVersion="16"/>

    <permission android:name="mypack.permission.MAPS_RECEIVE"
                android:protectionLevel="signature"/>
    <uses-permission android:name="mypack.permission.MAPS_receive"/>

    <!-- Permission pour utiliser la connexion internet -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- Permission permettant de vérifier l'état de la connexion -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- Permission pour stocker des données en cache de la map -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-feature
            android:glEsVersion="0x00020000"
            android:required="true" />

    <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
        <meta-data
                android:name="com.google.android.maps.v2.API_KEY"
                android:value="MYKEY" />

        <meta-data android:name="com.google.android.gms.version"
                   android:value="@integer/google_play_services_version" />

        <activity android:name="Home"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

这是我的MainActivity

import android.app.Activity;
import android.os.Bundle;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;

public class Home extends Activity {
    /**
     * Called when the activity is first created.
     */
    private GoogleMap map;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
    }
}

和相应的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
        >
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/map"
              android:name="com.google.android.gms.maps.MapFragment"
              android:layout_width="match_parent"
              android:layout_height="match_parent" />
</LinearLayout>

希望找到一些修复或我错过的内容,提前谢谢。

10 个答案:

答案 0 :(得分:18)

在Android SDK Manager中,您必须在“Android 4.4.2(API 19)”下安装“Google API(x86系统映像)”。退出Eclipse并重新启动它。

然后在AVD管理器中创建一个新的Android虚拟设备,并选择“Google API x86(Google Inc.) - API Level 19”作为目标。选中“使用主机GPU”以确保加速地图的绘制。

就是这样,这个新的模拟器将预装Play服务,并且运行速度更快,因为它是x86图像。

答案 1 :(得分:15)

使用android studio,唯一帮助我的是将gradle文件中的google play服务版本从上一个版本减少到:

compile 'com.google.android.gms:play-services:4.2.+'

(当然,这是一个临时的“旁路”,让你继续跑步)

答案 2 :(得分:8)

我遇到了这个错误的问题并且点击“更新”按钮没有做任何事情,它被卡在一个循环上,有效的是以下(在Android Studio中):

  • 转到工具&gt; Android&gt; SDK Manager
  • 选中“显示套餐详情”选项
  • 根据您想要的Android版本(目前为7.1),选中 Google Play Intel x86 Atom System Image google play intel atom system image
  • 点击应用/确定并安装映像
  • 现在转到工具&gt; Android&gt; AVD经理
  • 创建虚拟设备
  • 选择其中一个带有Google Play徽标的设备:devices with a Google Play logo
  • 在新模拟器中运行您的应用。现在,您可以在收到错误时点击“更新”,通过设备上的Play商店更新Google Play服务,并安静地测试您的应用。

答案 3 :(得分:2)

为了省去配置没有Google Play支持的模拟器的麻烦,请始终使用带有 playicon enter image description here

的模拟器

如图所示:Playstore行下的播放图标

enter image description here

安装谷歌播放兼容模拟器后...再次在模拟器中运行您的应用程序...当您收到通知时#34;应用程序将不会运行,除非......&#34;单击通知并按照屏幕提示进行操作:&#34;使用Gmail帐户登录...电子邮件和密码等&#34;,一旦您同意谷歌许可,您将获得谷歌播放更新屏幕:enter image description here < / p>

更新您的Google Play并再次启动您的应用。 另外,请确保您的应用级gradle和gradle中包含Google依赖项:

应用级别gradle     的 的build.gradle(模块:应用)

dependencies {

}

    apply plugin: 'com.google.gms.google-services'

项目级别Gradle 的&#34;建立,gradle这个(项​​目:AppName的)&#34;

依赖项{

    classpath 'com.google.gms:google-services:3.2.1'
}

答案 4 :(得分:2)

虽然提供的答案适用于模拟器,但这可能是真实设备上的真正问题,并且这些解决方案无法在真实设备上运行。这可能发生在具有过时版本的Google Play服务的旧设备上。

为解决此问题,Google Play服务库提供了一组API来检查Google Play服务的可用性,主要是GoogleApiAvailability类提供了一些方法来处理可用性问题,例如过时的版本。< / p>

现在,要检测设备是否提供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
    }
}

希望它有所帮助

答案 5 :(得分:1)

只有当我在Android Studio中使用Android模拟器时才会遇到此问题。 我通过将google-services插件添加到gradle:app

来解决了这个问题
apply plugin: 'com.google.gms.google-services'

然后依赖于 添加

compile 'com.google.android.gms:play-services:9.0.0'

之前我在使用

compile 'com.google.android.gms:play-services:9.4.0'

但它给出了错误,即版本不匹配,建议使用com.android.gms版本9.0.0

答案 6 :(得分:1)

我有同样的错误。通过更新Android Studio及其相关的Android SDK工具来修复它。

答案 7 :(得分:1)

在Android Studio 3中,转到Tools -> SDK Manager并安装Google Play服务enter image description here

答案 8 :(得分:0)

我在尝试在Android 7.0上构建时遇到了同样的错误。我在6.0下重建并没有任何问题。恢复1 API级别也可以为您提供帮助。

答案 9 :(得分:0)

我通过以下方法解决了这个问题:

1-确保在 SDK工具中安装了“ Google Play服务”,就像这张图片一样:

enter image description here

2-确保 AndroidManifest.xml 文件包含以下行:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

3-在 build.gradle 依赖项中添加以下行:

classpath 'com.google.android.gms:play-services-maps:17.0.0'

注意:您可能需要将play-services-maps的版本从17更改为最新版本,但是17是2019年8月的最新版本...

作为此图像:

enter image description here

别忘了重建项目(如果使用flutter,请在终端 flutter clean 中执行此命令)

然后您将看到地图正在模拟器上运行

enter image description here