Google Place Api提供状态{statusCode = ERROR,resolution = null}

时间:2016-07-06 10:35:20

标签: android google-places-api

下面是我在当前位置获取neaby位置的代码。代码有时会运行,有时也不会改变任何内容。为什么会这样。我检查过api密钥是否有效,状态代码“ERROR”表示操作失败,没有关于https://developers.google.com/android/reference/com/google/android/gms/common/api/CommonStatusCodes.html#constants的详细信息 谢谢 以下是活动:

public class PlacesAPIActivity extends AppCompatActivity implements
        OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks {
    private static final String LOG_TAG = "PPPPPPPPPPPPPPPPP";
    private static final int GOOGLE_API_CLIENT_ID =0;
    private GoogleApiClient mGoogleApiClient;
    private static final int PERMISSION_REQUEST_CODE = 100;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_places_api);
        Log.d("resuktfvvvfdfd", "onCreate: ");
        buildGoogleApiClient();}

    private synchronized void buildGoogleApiClient()
    {  Button currentButton = (Button) findViewById(R.id.currentButton);
        mGoogleApiClient = new GoogleApiClient.Builder(PlacesAPIActivity.this)
                .addApi(Places.PLACE_DETECTION_API)
                .addApi(Places.GEO_DATA_API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this)
                .build();
        mGoogleApiClient.connect();
        Log.d("connected", String.valueOf(mGoogleApiClient.isConnected()));
        currentButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mGoogleApiClient.isConnected()) {
                    Log.d("connected1", String.valueOf(mGoogleApiClient.isConnected()));
                    if (ContextCompat.checkSelfPermission(PlacesAPIActivity.this,
                            Manifest.permission.ACCESS_FINE_LOCATION)
                            != PackageManager.PERMISSION_GRANTED) {
                        ActivityCompat.requestPermissions(PlacesAPIActivity.this,
                                new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                                PERMISSION_REQUEST_CODE);
                    } else {
                        callPlaceDetectionApi();
                    }

                }
            }
        });
    }



    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.e(LOG_TAG, "Google Places API connection failed with error code: "
                + connectionResult.getErrorCode());

        Toast.makeText(this,
                "Google Places API connection failed with error code:" +
                        connectionResult.getErrorCode(),
                Toast.LENGTH_LONG).show();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSION_REQUEST_CODE:
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    callPlaceDetectionApi();
                }
                break;
        }
    }

    private void callPlaceDetectionApi() throws SecurityException {

        Log.d("mvkvkmvkmvkm", "callPlaceDetectionApi: ");
        PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
                .getCurrentPlace(mGoogleApiClient, null);
        Log.d("result", result.toString());
        result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
            @Override
            public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
                System.out.println("inside callback...");
                Status status = likelyPlaces.getStatus();
                System.out.println("Status.tostring"+status.toString());
                System.out.println(status.isSuccess());
                System.out.println(status.getStatusCode());
                System.out.println(status.getStatusMessage());
                System.out.println(status.getStatus());
                for (PlaceLikelihood placeLikelihood : likelyPlaces) {
                    Log.i(LOG_TAG, String.format("Place '%s' with " +
                                    "likelihood: %g",
                            placeLikelihood.getPlace().getName(),
                            placeLikelihood.getLikelihood()));
                }
                likelyPlaces.release();
            }
        });
    }




    @Override
    public void onStop() {
        super.onStop();


        mGoogleApiClient.disconnect();
    }

    @Override
    public void onConnected(@Nullable Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }
}

Android MAnifest文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.******">
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".PlacesAPIActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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

        <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="A***************************o"/>
    </application>
</manifest>

日志屏幕

07-06 15:56:32.499 10925-10925/com.example.utkarsh.nearby D/connected1: true
07-06 15:56:32.500 10925-10925/com.example.utkarsh.nearby D/mvkvkmvkmvkm: callPlaceDetectionApi: 
07-06 15:56:32.554 10925-10925/com.example.utkarsh.nearby D/result: com.google.android.gms.location.places.internal.zzj$1@5dd8757
07-06 15:56:42.610 10925-10925/com.example.utkarsh.nearby I/System.out: inside callback...
07-06 15:56:42.610 10925-10925/com.example.utkarsh.nearby I/System.out: Status.tostringStatus{statusCode=ERROR, resolution=null}
07-06 15:56:42.610 10925-10925/com.example.utkarsh.nearby I/System.out: false
07-06 15:56:42.610 10925-10925/com.example.utkarsh.nearby I/System.out: 13
07-06 15:56:42.611 10925-10925/com.example.utkarsh.nearby I/System.out: ERROR
07-06 15:56:42.611 10925-10925/com.example.utkarsh.nearby I/System.out: Status{statusCode=ERROR, resolution=null}

2 个答案:

答案 0 :(得分:0)

有了很多这个错误代码后我解决了它在我的模拟器中发送我的GPS位置。 在Android Studio AVD - Android模拟器中,在我的程序运行的情况下,我点击了“更多”&gt; “位置”&gt;设置我的纬度和经度,然后单击“发送”。 立即成功执行了getCurrentLocation()的下一个请求。 您可以在执行应用程序之前将您的位置发送到模拟器。它也会起作用。

答案 1 :(得分:0)

就我而言,如果不按照此示例中的说明初始化Google地图,则Google商卓信息版无法正常运行https://developers.google.com/places/android-api/current-places-tutorial

/**
 * Builds the map when the Google Play services client is successfully connected.
 */
@Override
public void onConnected(Bundle connectionHint) {
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}