Google API会在启动后将意图PlaceAutoComplete置于崩溃状态

时间:2017-11-21 13:44:36

标签: android google-places-api

在stackoverflow上搜索了很多解决方案后,没有任何帖子可以帮助我。 我改变了指纹,我在清单中写道:

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

我将此代码添加到我的片段中:

@Override
public void showEditAddress() {
    try {
        Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                .build(getActivity());
        startActivityForResult(intent, Constants.PLACE_AUTOCOMPLETE_REQUEST_CODE);
    } catch (GooglePlayServicesRepairableException | GooglePlayServicesNotAvailableException e) {
        // TODO: Handle the error.
        Log.e(TAG, "Show error: " + e.toString());
    }

}

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == Constants.PLACE_AUTOCOMPLETE_REQUEST_CODE) {
            if (resultCode == Activity.RESULT_OK) {
                Place place = PlaceAutocomplete.getPlace(getContext(), data);
                Log.i(TAG, "Place: " + place.getName());
            } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) {
                Status status = PlaceAutocomplete.getStatus(getContext(), data);
                // TODO: Handle the error.
                Log.e(TAG, "Error Places: " + status.toString());

            } else if (resultCode == Activity.RESULT_CANCELED) {
                // The user canceled the operation.
            }
        }
    }

但是在显示谷歌迷恋的活动之后,我正在努力工作几天并没有任何作用:(

这是我从控制台得到的:

teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: ViewPostImeInputStage processPointer 0
teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: ViewPostImeInputStage processPointer 1
teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: MSG_WINDOW_FOCUS_CHANGED 0
teame.co.il.team_e V/FA: Recording user engagement, ms: 7599
teame.co.il.team_e V/FA: Connecting to remote service
teame.co.il.team_e V/FA: Activity paused, time: 431544392
teame.co.il.team_e D/FA: Logging event (FE): user_engagement(_e), Bundle[{firebase_event_origin(_o)=auto, engagement_time_msec(_et)=7599, firebase_screen_class(_sc)=MyProfileActivity, firebase_screen_id(_si)=4880950556395788363}]
teame.co.il.team_e V/FA: Connection attempt already in progress
teame.co.il.team_e D/FA: Connected to remote service
teame.co.il.team_e V/FA: Processing queued up service tasks: 2
teame.co.il.team_e D/InputTransport: Input channel destroyed: fd=109
teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: MSG_RESIZED: frame=Rect(0, 0 - 1080, 2220) ci=Rect(0, 63 - 0, 834) vi=Rect(0, 63 - 0, 834) or=1
teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: Relayout returned: oldFrame=[0,0][1080,2220] newFrame=[0,0][1080,2220] result=0x1 surface={isValid=true 508726705152} surfaceGenerationChanged=false
teame.co.il.team_e D/ScrollView:  onsize change changed 
teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: MSG_WINDOW_FOCUS_CHANGED 1
teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: mHardwareRenderer.initializeIfNeeded()#2 mSurface={isValid=true 508726705152}
teame.co.il.team_e V/InputMethodManager: Starting input: tba=android.view.inputmethod.EditorInfo@d2f12df nm : teame.co.il.team_e ic=null
teame.co.il.team_e I/InputMethodManager: [IMM] startInputInner - mService.startInputOrWindowGainedFocus
teame.co.il.team_e D/InputTransport: Input channel constructed: fd=109
teame.co.il.team_e E/MyProfileFragment: Error Places: Status{statusCode=ERROR, resolution=null}   //The Error from the log
teame.co.il.team_e V/FA: Activity resumed, time: 431544700
teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: MSG_RESIZED: frame=Rect(0, 0 - 1080, 2220) ci=Rect(0, 63 - 0, 126) vi=Rect(0, 63 - 0, 126) or=1
teame.co.il.team_e D/ViewRootImpl@d7aa753[MyProfileActivity]: Relayout returned: oldFrame=[0,0][1080,2220] newFrame=[0,0][1080,2220] result=0x1 surface={isValid=true 508726705152} surfaceGenerationChanged=false
teame.co.il.team_e D/ScrollView:  onsize change changed 
teame.co.il.team_e V/FA: Inactivity, disconnecting from the service

我的谷歌api控制台的重建图片:

enter image description here

1 个答案:

答案 0 :(得分:0)

在您的控制台中,我们可以看到MyProfileActivity活动正在不断调用Relayout。 这些电话在电话上非常沉重。 当应用程序达到手机内存限制时,操作系统会自动崩溃应用程序。 这就是您的应用程序不断崩溃的原因。 另请注意,行为可能取决于电话。虽然错误的代码会堵塞线程,但如果您使用的是具有更高规格的手机,那么应用可能会滞后并被冻结或无响应,而在规格较低的手机上,应用程序会崩溃。

要解决此问题,请检查MyProfileActivity以查找因任何原因而不断调用的任何侦听器。 可能的原因是您拥有请求在Google地图侦听器中调用的位置权限的代码。 提示:检查onResume()监听器。如果您有权限检查器不断要求许可,并且您必须单击“不再询问”并拒绝该权限,它将不断拨打操作系统的电话以请求许可。

在电话上,转到Settings -> Apps。从列表中选择您的应用程序。向下滚动到App Settings部分,然后点击Permissions。启用应用程序的所有权限。然后,尝试运行您的应用。如果您的应用程序没有崩溃,那么您将发现问题的原因是从操作系统请求权限的持续隐藏调用。

永久性修复是将调用权限请求或从调用者调用的任何其他内容(例如onResume)移动到不经常调用或仅调用一次的某个地方,例如{ {1}}。优雅的解决方案是记住用户的偏好,而不是每次加载地图时都要求他们,所以如果他们想要启用位置权限,他们必须通过手机的“设置”应用,或者甚至从“手机”中的“设置”菜单启用位置权限。应用