0

У меня есть вопрос о API PlaceDetection в Android. Я хочу, чтобы все места были рядом. На моем реальном устройстве этот код работает отлично, но не в эмуляторе, хотя я шаг за шагом выполнял руководство по Google. Ссылка на руководство: https://codelabs.developers.google.com/codelabs/location-places-android/index.html?index=..%2F..%2Findex#0Google Places API Places.PlaceDetectionApi.getCurrentPlace всегда возвращает 0 результатов в эмулятор

Код:

public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener{ 

private static final String LOG_TAG = "MainActivity"; 
private static final int GOOGLE_API_CLIENT_ID = 0; 
private GoogleApiClient mGoogleApiClient; 
private static final int PERMISSION_REQUEST_CODE = 100; 
ListView lstPlaces; 

@Override 
protected void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button currentButton = (Button) findViewById(R.id.currentButton); 
    lstPlaces = (ListView) findViewById(R.id.listPlaces); 
    mGoogleApiClient = new GoogleApiClient.Builder(MainActivity.this) 
      .addApi(Places.PLACE_DETECTION_API) 
      .enableAutoManage(this, GOOGLE_API_CLIENT_ID, this) 
      .build(); 
    currentButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mGoogleApiClient.isConnected()) { 
       int hasPermission = checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION); 
       if (hasPermission != PackageManager.PERMISSION_GRANTED) { 
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE); 
       } else { 
        callPlaceDetectionApi(); 
       } 
      } 
     } 
    }); 
} 

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

@Override 
public void onConnectionFailed(@NonNull 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(); 

} 

private void callPlaceDetectionApi() throws SecurityException { 
    PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi.getCurrentPlace(mGoogleApiClient, null); 
    result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() { 
     @Override 
     public void onResult(PlaceLikelihoodBuffer likelyPlaces) { 
      Toast.makeText(MainActivity.this, "hioi", Toast.LENGTH_SHORT).show(); 
      ArrayAdapter myAdapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1); 
      for (PlaceLikelihood placeLikelihood : likelyPlaces) { 
       Toast.makeText(MainActivity.this, "Hoiha", Toast.LENGTH_SHORT).show(); 
       if(placeLikelihood.getLikelihood()>0){ 
        myAdapter.add(placeLikelihood.getPlace().getName().toString()); 
       } 
       Log.i(LOG_TAG, String.format("Place '%s' with " + "likelihood: %g", placeLikelihood.getPlace().getName(), placeLikelihood.getLikelihood())); 
      } 
      lstPlaces.setAdapter(myAdapter); 
      likelyPlaces.release(); 
     } 
    }); 
} 

}

Я знаю, что есть некоторые проблемы с расположением и студии Emulator, но почему работает код Google, а не моя?

Screenshot on working device

Screenshot on Emulator

+0

Я знаю, что вы сказали, что следовали этому руководству, но чтобы подтвердить (потому что ваши скриншоты не показывали это): Вы вводили широту и долготу в расширенном диалоговом окне эмулятора эмулятора? Отображает ли приложение Google Maps в эмуляторе это местоположение при нажатии кнопки его местоположения? – spiv

ответ

0

На эмуляторе окна, В нижней части этой панели, вы увидите каретку «...» контроль. Выберите его. Это откроет диалоговое окно расширенных элементов управления, и верхний элемент на нем будет местом. Справа от этого введите нужное местоположение (для exp: используйте Latitude 49.2772 и Longitude -123.108), после чего попробуйте перезагрузить приложение, и оно будет работать, для этого может потребоваться несколько секунд.

Смежные вопросы