web-dev-qa-db-ja.com

Google PlacePickerは起動後すぐに閉じます

私はAndroidアプリケーションを開発しており、アプリケーション内のいくつかの機能についてGoogleプレイスを検討していました。Googleは最近、私が使用しているPlacePicker機能をリリースしました。 「T」のスタートガイド。3時間前の時点で機能が驚くほど機能していましたが、テストに行くと、起動してすぐに終了し、スタックトレースにエラーがスローされません。 :

これはフラグメント内にあります。

// The Location Selection from Google Place Picker
where.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        try {
            launchPlace();
        } catch (GooglePlayServicesNotAvailableException |  GooglePlayServicesRepairableException e) {
            e.printStackTrace();
        }
    }
});

これはonCreateViewのフラグメント内にあります。

メソッドlaunchPlace()は次のように定義されています。

// Start Google Place Picker Code **************************************************************
public void launchPlace() throws GooglePlayServicesNotAvailableException,
        GooglePlayServicesRepairableException {
    PLACE_PICKER_REQUEST = 1;
    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();

    Context context = getActivity().getApplicationContext();
    startActivityForResult(builder.build(context), PLACE_PICKER_REQUEST);
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {

    String badLocation = "That location is not valid for this app, please select a valid location";

    if (requestCode == PLACE_PICKER_REQUEST) {
        if (resultCode == Activity.RESULT_OK) {
            place = PlacePicker.getPlace(data, getActivity().getApplicationContext());
            if (place.getPlaceTypes().contains(34)) {
                if (place.getPlaceTypes().contains(9) || place.getPlaceTypes().contains(15) ||
                        place.getPlaceTypes().contains(38) ||
                        place.getPlaceTypes().contains(67) ||
                        place.getPlaceTypes().contains(79)) {
                    where.setText(place.getName());
                    loc = true;
                } else {
                    Toast.makeText(getActivity().getApplicationContext(),
                            badLocation, Toast.LENGTH_LONG).show();
                    try {
                        launchPlace();
                    } catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

このコードは以前(3時間前)に機能し、現在は機能しません。 LogCatの発言は次のとおりです:(Android Studio)

04-21 15:48:02.320    5045-5045/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 15:48:02.680    5045-5124/com.siliconmindtech.trofi D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa1a55600 (InsetDrawable) with handle 0xa185dff0
04-21 15:48:05.000    5045-5121/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 15:48:05.060    5045-5045/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: Android.os.BinderProxy@215c768a time:9757022

これを支援する素晴らしい方法を誰かが知っている場合、Google PlacePickerはまったく新しいことを知っていますが、私は初心者ですAndroid開発者であり、誰かが私よりもよく理解しているように感じますさらに詳しい情報が必要な場合はお知らせください。GitHubを使用して、元の状態に戻りましたが、変更はなく、閉じます(アプリではなくピッカー) 。開発者コンソールでAndroidのGoogle Places APIとGoogle Places APIを有効にしましたが、ヘルプもありません。[位置情報の更新]画面に到達して停止します。

編集:これは、起動(Samsung Galaxy S5)からPlacePicker(そのアクションの前に1つのナビゲーション)を開始し、閉じてアプリに戻るまでのLogCat全体です。これはあなたの言っていることですか?

04-21 16:56:26.740  27318-27318/com.siliconmindtech.trofi D/ResourcesManager﹕ creating new AssetManager and set to /data/app/com.siliconmindtech.trofi-1/base.apk
04-21 16:56:26.910  27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.910  27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 16:56:26.910  27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isShipBuild true
04-21 16:56:26.910  27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Thread-13137-1066627414: SmartBonding Enabling is false, SHIP_BUILD is true, log to file is false, DBG is false
04-21 16:56:26.910  27318-27340/com.siliconmindtech.trofi I/System.out﹕ (HTTPLog)-Static: isSBSettingEnabled false
04-21 16:56:26.910  27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.940  27318-27318/com.siliconmindtech.trofi D/Activity﹕ performCreate Call secproduct feature valuefalse
04-21 16:56:26.940  27318-27318/com.siliconmindtech.trofi D/Activity﹕ performCreate Call debug elastic valuetrue
04-21 16:56:26.950  27318-27318/com.siliconmindtech.trofi D/AbsListView﹕ Get MotionRecognitionManager
04-21 16:56:26.970  27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ Render dirty regions requested: true
04-21 16:56:27.030  27318-27350/com.siliconmindtech.trofi I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build:  ()
    OpenGL ES Shader Compiler Version: E031.25.01.03
    Build Date: 10/28/14 Tue
    Local Branch: LA.BF.1.1_RB1_20141028_021_patches2
    Remote Branch:
    Local Patches:
    Reconstruct Branch:
04-21 16:56:27.030  27318-27350/com.siliconmindtech.trofi I/OpenGLRenderer﹕ Initialized EGL, version 1.4
04-21 16:56:27.050  27318-27350/com.siliconmindtech.trofi I/OpenGLRenderer﹕ HWUI protection enabled for context ,  &this =0xa23090d8 ,&mEglDisplay = 1 , &mEglConfig = 8
04-21 16:56:27.050  27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ Enabling debug mode 0
04-21 16:56:27.050  27318-27340/com.siliconmindtech.trofi I/System.out﹕ KnoxVpnUidStorageknoxVpnSupported API value returned is false
04-21 16:56:27.240  27318-27350/com.siliconmindtech.trofi V/RenderScript﹕ Application requested CPU execution
04-21 16:56:27.260  27318-27350/com.siliconmindtech.trofi V/RenderScript﹕ 0xa2377a00 Launching thread(s), CPUs 4
04-21 16:56:27.310  27318-27318/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: Android.os.BinderProxy@344b9848 time:13859270
04-21 16:56:29.700  27318-27318/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 16:56:31.850  27318-27318/com.siliconmindtech.trofi D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
04-21 16:56:31.970  27318-27318/com.siliconmindtech.trofi I/Places﹕ Got here!
04-21 16:56:32.300  27318-27350/com.siliconmindtech.trofi D/OpenGLRenderer﹕ endAllStagingAnimators on 0xa196d600 (InsetDrawable) with handle 0xaf7fc350
04-21 16:56:32.740  27318-27318/com.siliconmindtech.trofi I/Timeline﹕ Timeline: Activity_idle id: Android.os.BinderProxy@344b9848 time:13864703

上記のLogCatは冗長です。

解決策:私のような初心者にはならないでください。GoogleAPIキーをAndroid_manifest.xmlに追加するのを忘れていました...申し訳ありません。

32
Cole Laidlaw

Google Developer ConsoleでAndroid向けGoogle Places APIを有効にするだけです。

AndroidManifestでAPIキーを指定することを忘れないでください:

<meta-data
  Android:name="com.google.Android.geo.API_KEY"
  Android:value="ADD_YOUR_API_KEY_HERE" />
49
fraggjkee

Googleは2015年4月20日にAPIに変更を加えたときに、PlacePickerが本質的に使用するPlaces APIを変更したと思います。私のために働いた解決策は次のとおりです:

  1. Google Developer Consoleにアクセスします( https://console.developers.google.com/project
  2. プロジェクトを作成している場合は、プロジェクトに移動します。ここに行かない場合: https://developers.google.com/console/help/
  3. コンソールの左側にある[APIと認証]、[認証情報]の順に移動します。私はガイダンスのために写真を投稿するのに十分な担当者を持っていません...
  4. 新しいキーを作成します。これは、[資格情報]ウィンドウの[パブリックAPIアクセス]に表示されます。キーを受け取るには、SHA1フィンガープリントが必要です。私が使用した指示はここにあります: SHA-1指紋証明書を取得する方法Android Studio for debug mode?
  5. SHA1フィンガープリントを入力する場所は次の形式である必要があります:(Your Key、20の16進値は「:」で区切られています); com.yourpackage.yourapp
  6. 生成されたAPIキーをコピーします。他の開発者が機能するには、上記と同じ形式で各開発者の指紋を追加する必要があります。
  7. AndroidManifest.xmlにキーを追加します
<application ...

<meta-data
            Android:name="com.google.Android.geo.API_KEY"
            Android:value="@string/google_api_key" />

... </application>
<string name="google_api_key">yourkeyhere</string>
  1. プロジェクトをクリーンおよびリビルドします。今作業する必要があります。手順を省略したとは思わない...もしあればコメントしてください。
6
Cole Laidlaw

同じ問題があります。 Googleマップキーを追加します

<meta-data
        Android:name="com.google.Android.maps.v2.API_KEY"
        Android:value="@string/google_maps_key"/>` in manifest file. 

プレイスピッカーがすぐに閉じます。次に、私も追加します

<meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="@string/google_api_key" />

プレイスピッカーは表示されますが、地図を開くと、アプリが強制終了され、次のようにログに記録されます。

RuntimeException: The API key can only be specified once. It is recommended that you use the meta-data tag with the name: com.google.Android.maps.v2.API_KEY in the <application> element of AndroidManifest.xml
        at com.google.maps.api.Android.lib6.d.fb.a(Unknown Source)
        at com.google.maps.api.Android.lib6.a.g.a(Unknown Source)
        at com.google.Android.gms.maps.internal.CreatorImpl.b(Unknown Source)
        at com.google.Android.gms.maps.internal.CreatorImpl.b(Unknown Source)
        at com.google.Android.gms.maps.internal.i.onTransact(SourceFile:62)
        at Android.os.Binder.transact(Binder.Java:364)
        at com.google.Android.gms.maps.internal.zzc$zza$zza.zzj(Unknown Source)
        at com.google.Android.gms.maps.SupportMapFragment$zzb.zzqs(Unknown Source)
        at com.google.Android.gms.maps.SupportMapFragment$zzb.zza(Unknown Source)
        at com.google.Android.gms.dynamic.zza.zza(Unknown Source)
        at com.google.Android.gms.dynamic.zza.onCreate(Unknown Source)
        at com.google.Android.gms.maps.SupportMapFragment.onCreate(Unknown Source)
        at Android.support.v4.app.Fragment.performCreate(Fragment.Java:1763)
        at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:915)
        at Android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.Java:1136)
        at Android.support.v4.app.BackStackRecord.run(BackStackRecord.Java:739)
        at Android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.Java:1499)
        at Android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.Java:456)
        at Android.os.Handler.handleCallback(Handler.Java:733)
        at Android.os.Handler.dispatchMessage(Handler.Java:95)
        at Android.os.Looper.loop(Looper.Java:136)
        at Android.app.ActivityThread.main(ActivityThread.Java:5103)
        at Java.lang.reflect.Method.invokeNative(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:515)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:790)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:606)
        at dalvik.system.NativeStart.main(Native Method)

削除しようとする

<meta-data
        Android:name="com.google.Android.maps.v2.API_KEY"
        Android:value="@string/google_maps_key"/>` 

しかし、保つ

<meta-data
            Android:name="com.google.Android.geo.API_KEY"
            Android:value="@string/google_api_key" />

そして今、それはうまく機能しており、その理由はわかりません。

5
thethanh

mainfeastのメタデータタグを置き換えます。

    <meta-data
        Android:name="com.google.Android.maps.v2.API_KEY"
        Android:value="YOUR Android KEY" />

   <meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="YOUR Android KEY" />

幸運を

4
ahmed ewess

Places APIを使用しても同じ問題が発生しました。最後に、特にAndroid用のさまざまなGoogle Places APIがあることを理解しました。そのため、私が使用していたAPIキーは、Android以外のバージョン用でした。

次のリンクを使用してキーを生成します。 https://developers.google.com/places/Android-api/signup

1
bsautermeister

私の場合は、Google COnsoleに移動してからAndroid Google PlacesのAPIを有効にし、Manifest.xmlに移動してこのコードを

<meta-data
            Android:name="com.google.Android.geo.API_KEY"
            Android:value="@string/google_maps_key" />
        <meta-data
            Android:name="com.google.Android.gms.version"
            Android:value="@integer/google_play_services_version" />

そして、Google APIキーを置くことを忘れないでください

0
Yudi karma