Google PlacePicker在发布后立即关闭

Col*_*law 32 android android-fragments google-places

我正在开发一个Android应用程序,并正在研究Google Places以获取应用程序中的某些功能.谷歌最近发布了我正在使用的PlacePicker功能.我遵循了Google指南和"T"的快速入门指南.这个功能在三小时前工作得很好,现在当我去测试它时,它启动然后立即关闭,堆栈跟踪中没有错误.以下是我使用代码的方式:

这是一个片段.

// 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();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

这是在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();
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码以前(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
Run Code Online (Sandbox Code Playgroud)

如果有人知道一种方法可以帮助解决这个问题,那就太棒了,我知道Google PlacePicker很新,但我是一名新手Android开发人员,觉得有人比我有更好的理解.任何和所有帮助都会受到赞赏.如果需要更多信息,请告诉我.我们使用GitHub所以我一直恢复到它曾经工作的时候,但没有任何改变,它仍然关闭(选择器,而不是应用程序).我在开发者控制台中启用了Google Places API和Google Places API for Android,但也没有任何帮助.它进入"更新您的位置"屏幕然后停止.

编辑:这是整个LogCat,从发布(在三星Galaxy S5上)到PlacePicker开始(该操作之前的一个导航)然后关闭并返回到应用程序.这是你的意思吗?

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
Run Code Online (Sandbox Code Playgroud)

上面的LogCat是详细的.

解决方案:不要像我这样的新手,我忘了将我的Google API密钥添加到我的android_manifest.xml中......我道歉.

fra*_*kee 49

只需在您的Google Developer Console中启用适用于Android的Google Places API即可.

不要忘记在以下位置指定API密钥AndroidManifest:

<meta-data
  android:name="com.google.android.geo.API_KEY"
  android:value="ADD_YOUR_API_KEY_HERE" />
Run Code Online (Sandbox Code Playgroud)

  • 这是不正确的.或者至少,它不是整个解决方案. (2认同)

Col*_*law 6

我相信,当Google于2015年4月20日更改其API时,他们修改了PlacePicker固有使用的地方API.对我有用的解决方案如下:

  1. 转到您的Google Developer Console(https://console.developers.google.com/project)
  2. 如果您已经创建项目,请导航到您的项目.如果没有,请访问:https://developers.google.com/console/help/
  3. 导航到"API&auth",然后导航到控制台左侧的"Credentials".我没有足够的代表发布图片作为指导......
  4. 创建一个新密钥,它将显示在"凭据"窗口中的"公共API"访问下.您将需要SHA1指纹来接收密钥.我使用的方向如下:如何在Android Studio中获取SHA-1指纹证书以获得调试模式?
  5. 您输入SHA1指纹的位置应采用以下格式:(您的密钥,20个十六进制值,以":"分隔); 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>
Run Code Online (Sandbox Code Playgroud)
"@ string/google_api_key"/>是您刚刚生成的密钥.将它放在strings.xml文件中:

<string name="google_api_key">yourkeyhere</string>
Run Code Online (Sandbox Code Playgroud)
  1. 清理并重建您的项目.应该现在正在工作.我不认为我离开了任何步骤......如果我有,请发表评论.

  • 全新的项目运行良好,调试和发布版本.事实证明,这是Google Developer Console Project中一个非常奇怪的错误.我在"Google Apps"帐户中与用户分享了该特定项目.事情变得糟糕.一旦我删除了用户(并重新生成了密钥),一切正常.我会试着找个地方报告这样的错误.希望这有助于其他人. (2认同)

小智 5

我有同样的问题.我添加了Google地图密钥

<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>` in manifest file. 
Run Code Online (Sandbox Code Playgroud)

地方选择器立即关闭.然后,我也补充说

<meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/google_api_key" />
Run Code Online (Sandbox Code Playgroud)

地点选择器显示,但是当我打开地图时,我的应用程序被强制关闭,并记录如下.

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)
Run Code Online (Sandbox Code Playgroud)

我试着删除

<meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>` 
Run Code Online (Sandbox Code Playgroud)

它现在运作良好,我不知道为什么.