#java #android #gps
Вопрос:
Недавно я начал разрабатывать приложение и последние несколько дней работал над частью GPS, чтобы получить адрес пользователя.
Проблема в том, что если я запускаю приложение в эмуляторе Android Studio и изменяю адрес на карте, он правильно отображается в тосте и в строковой переменной, которую я создал для хранения адреса, как показано на скриншоте ниже, но если я создаю APK и запускаю его на смартфоне, то Тост не отображается, а строковая переменная остается пустой.
Есть ли что-то в моем коде, что я забываю? Я вставлю код, чтобы кто-нибудь мог просмотреть его ниже.
public class FragmentT1_Agora extends Fragment { View view; LocationManager locationManager; String moradaAtual; // Current Address private Button btEnviar; public FragmentT1_Agora() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment view = inflater.inflate(R.layout.fragment_t1_agora, container, false); if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 100); } locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 3, mLocationListener); return view; } private final LocationListener mLocationListener = new LocationListener() { @Override public void onLocationChanged(Location location) { Toast.makeText(getContext(), "" location.getLatitude() "," location.getLongitude(), Toast.LENGTH_LONG).show(); try { Geocoder geocoder = new Geocoder(getContext(), Locale.getDefault()); Listlt;Addressgt; moradas = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1); moradaAtual = moradas.get(0).getAddressLine(0); Toast.makeText(getContext(), "Morada: " moradaAtual, Toast.LENGTH_LONG).show(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }; }
Я опустил код, который не связан с GPS.
Комментарии:
1. Есть ли в вашем манифесте ` ACCESS_FINE_LOCATION» /gt; `?
2. Включены ли службы определения местоположения по телефону?
3. @Strom Да, у моего манифеста есть такое разрешение
4. Привет, может помочь поделиться частью кода, которая по разрешению пользователя?
5. Давайте попробуем добавить эту часть, и когда разрешение было предоставлено, можете добавить
locationManager.requestLocationUpdates()
туда