Ich hoffe, dass dies eine einfache Lösung sein wird und jemand mir helfen kann.Ortserlaubnis in Android Fragment
Ich habe eine App, die Benutzer Standort benötigt, um die lat und lng zu verwenden, um das Wetter ihres Standorts zu erhalten. Ich bin in der Lage, den Benutzerstandort zu erhalten, nachdem ich die Erlaubnis erlaubt habe, lasse das Fragment und gehe dann wieder hinein. Das Problem liegt, wenn ich auf dem Popup-Menü zulassen auswählen. Ich muss sofort den Standort bekommen. Hoffentlich ist mein Code selbsterklärend.
Ich habe mir die Freiheit genommen, den gesamten Code zu entfernen, der für mein Problem nicht relevant war. Außerdem habe ich versucht, Start() ohne Erfolg aufzurufen.
public class FragmentLocalWeather extends Fragment implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private static final int PERMISSION_ACCESS_COARSE_LOCATION = 0;
private GoogleApiClient googleApiClient;
public FragmentLocalWeather() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.local_weather_fragment, container, false);
googleApiClient = new GoogleApiClient.Builder(this.getActivity(), this, this).addApi(LocationServices.API).build();
if (ContextCompat.checkSelfPermission(this.getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this.getActivity(), new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
PERMISSION_ACCESS_COARSE_LOCATION);
}
setHasOptionsMenu(true);
return view;
}
@Override
public void onStart() {
super.onStart();
if (googleApiClient != null) {
googleApiClient.connect();
}
}
@Override
public void onStop() {
googleApiClient.disconnect();
super.onStop();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case PERMISSION_ACCESS_COARSE_LOCATION:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// ********** problem Area **********
// Need to user location here.
} else {
Toast.makeText(this.getActivity(), "Need your location!", Toast.LENGTH_SHORT).show();
}
break;
}
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_local_weather, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_settings: {
}
case R.id.action_refresh: {
onStart();
}
}
return true;
}
@Override
public void onConnected(@Nullable Bundle bundle) {
if (ContextCompat.checkSelfPermission(this.getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
double lat = lastLocation.getLatitude(), lon = lastLocation.getLongitude();
Log.d("dozer74", "===========================>>>>>>>>>>>>> " + lat + " : " + lon);
}
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
Können Sie nur 'googleApiClient.connect nennen()' in Ihrem '********** Problem Bereich **********'? –
"Ich muss sofort den Standort bekommen" - das wird nicht unbedingt möglich sein. – CommonsWare
Versuchte Aufruf von googleApiClient.connect() und es hat nicht funktioniert. Ist es möglich, das Fragment neu zu laden, das den onStart() aufrufen würde? – jdubicki