Функция Places API findCurrentPlace() ограничивает минимальное значение SDK моего приложения до 26.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Функция Places API findCurrentPlace() ограничивает минимальное значение SDK моего приложения до 26.

Сообщение Anonymous »

Я попытался добавить текущее местоположение пользователей на карту Google, которая у меня была, используя API Google Places, и пока это работало, я заметил, что на уровне API 26 выдавалась ошибка. После уточнения я обнаружил, что ошибка возникает, потому что код требует Ява 8.0. После некоторой отладки я обнаружил, что проблема была в строке: Task PlaceResponse = PlacesClient.findCurrentPlace(request);. Код никогда не попадает в журнал «После поиска текущего места».
Вот весь мой Java-компонент фрагментов:

Код: Выделить всё

package com.example.restaurantapp;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentContainer;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.tasks.Task;
import com.google.android.libraries.places.api.Places;
import com.google.android.libraries.places.api.model.Place;
import com.google.android.libraries.places.api.model.PlaceLikelihood;
import com.google.android.libraries.places.api.net.FindCurrentPlaceRequest;
import com.google.android.libraries.places.api.net.FindCurrentPlaceResponse;
import com.google.android.libraries.places.api.net.PlacesClient;

import java.util.Collections;
import java.util.List;

/**
* A simple {@link Fragment} subclass.
* Use the {@link GmapsFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class GmapsFragment extends Fragment
{
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g.  ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;

public GmapsFragment()
{
// Required empty public constructor
}

/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment GmapsFragment.
*/
// TODO: Rename and change types and number of parameters
public static GmapsFragment newInstance(String param1, String param2)
{
GmapsFragment fragment = new GmapsFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if (getArguments() != null)
{
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.fragment_gmaps, container, false);
SupportMapFragment supportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapContainer);
supportMapFragment.getMapAsync(new OnMapReadyCallback()
{
@Override
public void onMapReady(@NonNull GoogleMap googleMap)
{
LatLng def = new LatLng(0, 0);
LatLng bs = new LatLng(31.25150448, 34.79455390);
//googleMap.addMarker(new MarkerOptions().position(def).title("Sydney"));
googleMap.animateCamera(CameraUpdateFactory.newLatLng(def));
CameraPosition cam = new CameraPosition.Builder().target(bs).zoom(10).build();
googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(cam));
googleMap.getUiSettings().setCompassEnabled(true);
googleMap.getUiSettings().setZoomControlsEnabled(true);
if (ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_FINE_LOCATION)== PackageManager.PERMISSION_GRANTED) {
googleMap.setMyLocationEnabled(true);}
googleMap.getUiSettings().setMyLocationButtonEnabled(true);
googleMap.getUiSettings().setRotateGesturesEnabled(true);
}
});

String apiKey = BuildConfig.MAPS_API_KEY;
Places.initializeWithNewPlacesApiEnabled(requireActivity().getApplicationContext(), apiKey);
setCurrentLocation();

return view;
}

public void setCurrentLocation()
{
List
 placeFields = Collections.singletonList(Place.Field.DISPLAY_NAME);
Log.d("PlacesDebug", "Before FindCurrentPlaceRequest");
FindCurrentPlaceRequest request = FindCurrentPlaceRequest.newInstance(placeFields);
Log.d("PlacesDebug", "After FindCurrentPlaceRequest");
PlacesClient placesClient = Places.createClient(requireContext());
if (ContextCompat.checkSelfPermission(requireActivity().getApplicationContext(), ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
{
Log.d("PlacesDebug", "Before findCurrentPlace");
Task  placeResponse = placesClient.findCurrentPlace(request);
Log.d("PlacesDebug", "After findCurrentPlace");
placeResponse.addOnCompleteListener(task ->
{
if (task.isSuccessful())
{
FindCurrentPlaceResponse response = task.getResult();
for (PlaceLikelihood placeLikelihood : response.getPlaceLikelihoods())
{
Log.i("CurrentLocation", String.format("Place '%s' has likelihood: %f", placeLikelihood.getPlace().getName(),
placeLikelihood.getLikelihood()));
}
}
else
{
Exception exception = task.getException();
if (exception instanceof ApiException) {
ApiException apiException = (ApiException) exception;
Log.e("NotFound", "Place not found: " + apiException.getStatusCode());
}
}
});
}
else
{
// A local method to request required permissions;
// See https://developer.android.com/training/permissions/requesting
//regetLocationPermission();
}

}
}
Я бы предпочел хотя бы попытаться использовать minSDK 24, несмотря на то, что я понимаю, что мое приложение может быть несовместимо с ним, когда я его завершу. Я бы предпочел не срезать углы, в настоящее время у меня есть варианты: либо создать minSDK 26, либо выполнить резервное копирование. Любая помощь приветствуется.


Подробнее здесь: https://stackoverflow.com/questions/790 ... -sdk-to-26
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»