web-dev-qa-db-ja.com

Google Playサービスのエラーを更新しない限り、このアプリは実行されません

今はちょっと迷子です。 Googleマップを使用してAndroidアプリケーションを実装しています。

それを機能させるために、私はかなり効率的ないくつかのチュートリアルに従いました。しかし、私はこれに固執しています:

enter image description here

この問題を解決するために、いくつかのトリックを見つけました here または here この問題を解決するには、エミュレータ用に特別な設定を行う必要があることを伝えます。

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>

いくつかの修正やここで見逃したものを見つけたいと思っています。事前に感謝します。

26
Florent Gz

Android SDK Managerで、「Android 4.4.2(API 19)」の下に「Google API(x86システムイメージ)」をインストールする必要があります。Eclipseを終了して再起動します。

次に、AVDマネージャーで新しいAndroid仮想デバイスを作成し、ターゲットとして[Google API x86(Google Inc.)-APIレベル19]を選択します。[ホストGPUを使用]マップが高速化されます。

それだけです。この新しいエミュレータにはPlay Servicesがプリインストールされており、x86イメージであるため、より高速に実行されます。

18
BladeCoder

Android studio、私を助けた唯一のことは、gradleファイルのGoogle Play Servicesバージョンを最後のバージョンからこれに減らすことでした:

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

(もちろん、これは、実行を継続できるようにするための一時的な「バイパス」です)

15
dvrm

私はこのエラーを取得するのに問題があり、「更新」ボタンを押すと何もしませんでした、それはループで止まりました、働いたのは次のことです(Android Studio):

  • [ツール]> Android> SDK Managerに移動します
  • [パッケージの詳細を表示]オプションをオンにします
  • Android必要なバージョン(今のところ7.1.1))で、Google Play Intel x86 AtomシステムImagegoogle play intel atom system image
  • [適用]/[OK]をクリックして、イメージをインストールします
  • 次に、[ツール]> Android> AVD Manager
  • 仮想デバイスを作成
  • Google Playロゴのあるデバイスのいずれかを選択します: devices with a Google Play logo
  • 新しいエミュレータでアプリを実行します。エラーが発生したときに「更新」を押して、デバイスのPlayストアでGoogle Play開発者サービスを更新し、安心してアプリをテストできます。
9
james246

提供された回答はエミュレーターで機能しますが、これは実際のデバイスでは実際の問題である可能性があり、これらのソリューションは実際のデバイスでは機能しません。これは、古いバージョンのGoogle Play Servicesがある古いデバイスで発生する可能性があります。

この問題を克服するために、Google Play ServicesライブラリにはGoogle Play Servicesの可用性を確認するためのAPIのセットがあります。主に 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 Servicesが利用可能かどうかを確認します。次に、isUserResolvableErrorを呼び出して、ユーザーがエラーを解決できるかどうかを判断します(たとえば、Google Play開発者サービスを更新することにより)。解決可能な場合、ユーザーにシステムがエラーを解決することを確認するダイアログが表示されます。次に、アクティビティの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
    }
}

それがそこにいくつかを助けることを願っています

2
Leo

Google Playをサポートしていないエミュレータを設定する手間を省くために、常にplayiconenter image description here

画像に示すように:Playstore行の下にあるplayアイコン.

enter image description here

Google Play互換エミュレーターをインストールした後、エミュレーターでアプリを再度実行します...通知が表示されたら、「アプリが起動しない場合......」通知をクリックして、画面の指示に従います:「署名Gmailアカウントを使用する場合...メールとパスワードなど」、Googleライセンスに同意するとすぐに、Google Playの更新画面が表示されます: enter image description here

google Playを更新して、アプリをもう一度起動してください。また、アプリレベルのgradleおよびgradleにGoogleの依存関係があることを確認します。

アプリレベルグラドルbuild.gradle(Module:app)

dependencies {

}

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

プロジェクトレベルGradle "build、gradle(Project:AppName)"

依存関係{

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

AndroidエミュレーターAndroid Studioを使用しているときにのみ、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を使用することをお勧めします

1
josua josh

Android Studio 3で、Tools -> SDK ManagerおよびGoogle Play開発者サービスをインストールします enter image description here

1
onmyway133

同じエラーが発生しました。 Android Studioとそれに関連するAndroid SDKツールを更新することで修正しました。

1
george mano

Android 7.0でビルドしようとすると、この同じエラーが発生しました。6.0でリビルドしましたが、問題はありませんでした。1APIレベルに戻すことも役立ちます。

0
Mr_Dave

この問題を次の方法で解決しました。

1-「Google Play Services」がSDKツールにインストールされていることを確認します。この画像のように:

enter image description here

2-AndroidManifest.xmlファイルに次の行が含まれていることを確認します。

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

3-dependenciesofbuild.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

0
AnasSafi