Dies ist meine MainActivity Ich möchte den letzten bekannten Speicherort meines Geräts abrufen, habe ich die Laufzeitberechtigungen hinzugefügt und die Rückrufe auch.onConnected() wird nicht aufgerufen, wenn ich versuche, den letzten bekannten Standort auch nach dem Hinzufügen von Callbacks wiederherzustellen
package silive.in.weather.Activities;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationListener;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.johnhiott.darkskyandroidlib.ForecastApi;
import com.johnhiott.darkskyandroidlib.RequestBuilder;
import com.johnhiott.darkskyandroidlib.models.Request;
import com.johnhiott.darkskyandroidlib.models.WeatherResponse;
import java.io.IOException;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
import retrofit.Callback;
import retrofit.RetrofitError;
import retrofit.client.Response;
import silive.in.weather.Models.GetLocation;
import silive.in.weather.Models.WeatherData;
import silive.in.weather.R;
public class MainActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
static double latitude, longitude;
LinearLayout weather_info;
TextView city_text, temp, temp_unit, sky_desc, current_time, date_day, current_time_min, current_time_sec, hourly;
ImageView icon;
ImageButton ref;
TextView humidity, dew, cloud, precip, max_temp, min_temp;
String APIKey = "5b29d34aeee88dc47264e71ed058a592";
//String GeoAPIKey = "AIzaSyAX52peWddi3gJQfuB-5teYPoo5haPb5Iw";
WeatherData weatherData;
GetLocation getLocation;
Context context;
GoogleApiClient mGoogleApiClient;
LocationRequest mLocationRequest;
boolean mRequestingLocationUpdates = true;
LocationListener mLocationListener;
Location mLastLocation;
String mLastUpdateTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = getApplicationContext();
//Initializing the layout contents
weather_info = (LinearLayout) findViewById(R.id.weather_info);
current_time = (TextView) findViewById(R.id.current_time);
current_time_min = (TextView) findViewById(R.id.current_time_min);
current_time_sec = (TextView) findViewById(R.id.current_time_sec);
hourly = (TextView) findViewById(R.id.hourly);
date_day = (TextView) findViewById(R.id.date_day);
city_text = (TextView) findViewById(R.id.city_text);
temp = (TextView) findViewById(R.id.temp);
temp_unit = (TextView) findViewById(R.id.temp_unit);
humidity = (TextView) findViewById(R.id.humidity);
dew = (TextView) findViewById(R.id.dew);
precip = (TextView) findViewById(R.id.precip);
cloud = (TextView) findViewById(R.id.cloud);
max_temp = (TextView) findViewById(R.id.max_temp);
min_temp = (TextView) findViewById(R.id.min_temp);
sky_desc = (TextView) findViewById(R.id.sky_desc);
icon = (ImageView) findViewById(R.id.icon);
ref = (ImageButton) findViewById(R.id.ref);
ref.setOnClickListener(this);
//check for connection
checkConnection();
//Google API client
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
}
Log.d("TAG", latitude + " " + longitude + "inside onCreate");
if (latitude ==0||longitude ==0){
updateValuesFromBundle(savedInstanceState);
}
weatherData = new WeatherData();
mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if (Build.VERSION.SDK_INT >= 24 &&
ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
latitude = mLastLocation.getLatitude();
longitude = mLastLocation.getLongitude();
Log.d("TAG", latitude + " cal lat");
Log.d("TAG", longitude + " cal lng");
//mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
//mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
}
}
}
};
/*getLocation = new GetLocation(this);
latitude = getLocation.getLatitude();
longitude = getLocation.getLongitude();*/
/*final GPSTracker gpsTracker = new GPSTracker(getApplicationContext());
if (gpsTracker.canGetLocation()) {
latitude = gpsTracker.getLatitude();
longitude = gpsTracker.getLongitude();
Log.d("TAG", latitude + " " + longitude + "inside onCreate");
}*/
ForecastApi.create(APIKey);
RequestBuilder weather = new RequestBuilder();
Request request = new Request();
request.setLat(latitude + "");
request.setLng(longitude + "");
request.setUnits(Request.Units.UK);
request.setLanguage(Request.Language.ENGLISH);
request.addExcludeBlock(Request.Block.CURRENTLY);
request.removeExcludeBlock(Request.Block.CURRENTLY);
weather.getWeather(request, new Callback<WeatherResponse>() {
@Override
public void success(WeatherResponse weatherResponse, Response response) {
Log.d("TAG", "Temp: " + weatherResponse.getCurrently().getTemperature());
Log.d("TAG", "Summary: " + weatherResponse.getCurrently().getSummary());
Log.d("TAG", "Hourly Sum: " + weatherResponse.getHourly().getSummary());
weatherData.setTemperature(weatherResponse.getCurrently().getTemperature());
weatherData.setDesc(weatherResponse.getCurrently().getSummary());
String img = weatherResponse.getCurrently().getIcon();
//icon.setImageResource(Integer.parseInt(img));
//setIcon(img);
//city_text.setText(GetCity(latitude, longitude));
weatherData.setHrs(weatherResponse.getHourly().getSummary());
weatherData.setMydate(java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()));
weatherData.setPres(weatherResponse.getCurrently().getPressure());
weatherData.setPrec(weatherResponse.getCurrently().getPrecipIntensity());
weatherData.setHumid(weatherResponse.getCurrently().getHumidity());
weatherData.setDewp(weatherResponse.getCurrently().getDewPoint());
weatherData.setMax(weatherResponse.getCurrently().getTemperatureMax());
weatherData.setMin(weatherResponse.getCurrently().getTemperatureMin());
}
@Override
public void failure(RetrofitError retrofitError) {
Log.d("TAG", "Error while calling: " + retrofitError.getUrl());
Log.d("TAG", retrofitError.toString());
}
});
temp.setText(" " + weatherData.getTemperature());
temp_unit.setText("C");
sky_desc.setText(weatherData.getDesc());
city_text.setText(GetCity(latitude, longitude));
hourly.setText(weatherData.getHrs());
date_day.setText(weatherData.getMydate());
cloud.setText("Pressure : " + weatherData.getPres());
Log.d("TAG", weatherData.getMax() + " " + weatherData.getMin() + "max min");
Log.d("TAG", weatherData.getPres() + " " + "pressure");
precip.setText("Precipitation : " + weatherData.getPrec());
humidity.setText("Humidity : " + weatherData.getHumid());
dew.setText("Dew Point : " + weatherData.getDewp());
max_temp.setText("Max.T : " + weatherData.getMax());
min_temp.setText("Min.T : " + weatherData.getMin());
updateTimeOnEachSecond();
//new GetData(this).execute();
}
public void checkConnection() {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = connectivityManager.getActiveNetworkInfo();
if (info == null) {
Snackbar snackbar = Snackbar
.make(weather_info, "No Internet Connection", Snackbar.LENGTH_LONG)
.setAction("RETRY", new View.OnClickListener() {
@Override
public void onClick(View view) {
checkConnection();
}
});
// Changing message text color
snackbar.setActionTextColor(Color.RED);
// Changing action button text color
View sbView = snackbar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.YELLOW);
snackbar.show();
} else {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
/*cornr.setVisibility(View.VISIBLE);
Intent intent = new Intent(Splash.this, MainActivity.class);
startActivity(intent);
finish();*/
}
}, 2000);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ref:
new GetData(this).execute();
//WeatherUpdate(latitude,longitude);
break;
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
Log.d("TAG", "Callback called");
if (Build.VERSION.SDK_INT >= 24 &&
ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
latitude = mLastLocation.getLatitude();
longitude = mLastLocation.getLongitude();
Log.d("TAG", latitude + " cal lat");
Log.d("TAG", longitude + " cal lng");
//mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
//mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
}
}
if (mRequestingLocationUpdates) {
startLocationUpdates();
}
}
@Override
public void onConnectionSuspended(int i) {
Log.d("TAG", "Connection suspended");
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
Log.d("TAG", "Connection failed");
}
protected void startLocationUpdates() {
if (Build.VERSION.SDK_INT >= 24 &&
ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
}
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mLocationListener);
}
public void updateTimeOnEachSecond() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
final Calendar c;
c = Calendar.getInstance();
Log.d("TAG", "time changed");
final int hrs = c.get(Calendar.HOUR_OF_DAY);
final int min = c.get(Calendar.MINUTE);
final int sec = c.get(Calendar.SECOND);
runOnUiThread(new Runnable() {
@Override
public void run() {
current_time.setText(String.valueOf(hrs + " :"));
current_time_min.setText(String.valueOf(min + " :"));
current_time_sec.setText(String.valueOf(sec));
mLastUpdateTime = String.valueOf(hrs+":");
mLastUpdateTime.concat(String.valueOf(min + " :"));
mLastUpdateTime.concat(String.valueOf(sec));
}
});
}
}, 0, 1000);
}
/*public void setIcon(String str) {
//icon = (ImageView) findViewById(R.id.icon);
*//*if (str.contains("sun") && str.contains("clear")) {
icon.setImageResource(R.mipmap.sunny);
} else if (str.contains("night") && str.contains("clear")) {
icon.setImageResource(R.mipmap.clrnt);
} else if (str.contains("night") && str.contains("cloud")) {
icon.setImageResource(R.mipmap.cldnt);
} else if (str.contains("night") && str.contains("rain")) {
icon.setImageResource(R.mipmap.ntrain);
} else if (str.contains("sun") && str.contains("rain")) {
icon.setImageResource(R.mipmap.sunrain);
} else if (str.contains("night") && str.contains("thunder")) {
icon.setImageResource(R.mipmap.thndr);
} else if (str.contains("rain") && str.contains("thunder")) {
icon.setImageResource(R.mipmap.thndr);
} else if (str.contains("day") && str.contains("rain")) {
icon.setImageResource(R.mipmap.rain);
} else if (str.contains("day") && str.contains("cloudy")) {
icon.setImageResource(R.mipmap.prtcld);
}*//*
}*/
public String GetCity(double latitude, double longitude) {
Log.d("TAG", latitude + " " + longitude + "one");
/*if (latitude == 0 || longitude == 0) {
latitude = getLocation.getLatitude();
longitude = getLocation.getLongitude();
}*/
Geocoder geoCoder = new Geocoder(getApplicationContext(), Locale.getDefault());
StringBuilder builder = new StringBuilder();
try {
List<Address> address = geoCoder.getFromLocation(latitude, longitude, 1);
Log.d("TAG", latitude + " " + longitude);
int maxLines = address.get(0).getMaxAddressLineIndex();
//int maxLines = 2;
for (int i = 0; i < maxLines; i++) {
Log.d("TAG", maxLines + " ");
String addressStr = address.get(0).getAddressLine(i);
Log.d("TAG", maxLines + " ");
if ((i >= 1) && (i <= (maxLines - 1))) {
builder.append(addressStr);
builder.append(" ");
}
}
String finalAddress = builder.toString(); //This is the complete address.
return finalAddress;
} catch (IOException e) {
// Handle IOException
} catch (NullPointerException e) {
// Handle NullPointerException
}
return null;
}
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putBoolean("REQUESTING_LOCATION_UPDATES_KEY",
mRequestingLocationUpdates);
savedInstanceState.putParcelable("LOCATION_KEY", mLastLocation);
savedInstanceState.putString("LAST_UPDATED_TIME_STRING_KEY", mLastUpdateTime);
super.onSaveInstanceState(savedInstanceState);
}
private void updateValuesFromBundle(Bundle savedInstanceState) {
if (savedInstanceState != null) {
if (savedInstanceState.keySet().contains("REQUESTING_LOCATION_UPDATES_KEY")) {
mRequestingLocationUpdates = savedInstanceState.getBoolean(
"REQUESTING_LOCATION_UPDATES_KEY");
//setButtonsEnabledState();
}
if (savedInstanceState.keySet().contains("LOCATION_KEY")) {
mLastLocation = savedInstanceState.getParcelable("LOCATION_KEY");
}
if (savedInstanceState.keySet().contains("LAST_UPDATED_TIME_STRING_KEY")) {
mLastUpdateTime = savedInstanceState.getString(
"LAST_UPDATED_TIME_STRING_KEY");
updateTimeOnEachSecond();
}
}
}
//Class to get API data
public class GetData extends AsyncTask<Void, Void, String> {
ProgressDialog progressDialog;
private double lat, lng;
public GetData(Context c) {
this.progressDialog = new ProgressDialog(c);
this.lat = getLocation.getLatitude();
this.lng = getLocation.getLongitude();
Log.d("TAG", lat + " " + lng + " inside GetData");
/*final GPSTracker gpsTracker = new GPSTracker(getApplicationContext());
if (gpsTracker.canGetLocation()) {
this.lat = gpsTracker.getLatitude();
this.lng = gpsTracker.getLongitude();
} else {
Log.d("TAG", " no gps");
DialogGps dialogGps = new DialogGps();
dialogGps.show(getFragmentManager(), "GPS Alert");
//gpsTracker.showSettingsAlert();
}*/
Log.d("TAG", lat + " " + lng + "inside getData");
}
public void UpdateUI(WeatherData getData) {
temp.setText(" " + getData.getTemperature());
temp_unit.setText("C");
sky_desc.setText(getData.getDesc());
city_text.setText(GetCity(lat, lng));
hourly.setText(getData.getHrs());
date_day.setText(getData.getMydate());
cloud.setText("Pressure : " + getData.getPres());
Log.d("TAG", getData.getMax() + " " + getData.getMin() + "max min");
Log.d("TAG", getData.getPres() + " " + "pressure");
precip.setText("Precipitation : " + getData.getPrec());
humidity.setText("Humidity : " + getData.getHumid());
dew.setText("Dew Point : " + getData.getDewp());
max_temp.setText("Max.T : " + getData.getMax());
min_temp.setText("Min.T : " + getData.getMin());
updateTimeOnEachSecond();
}
@Override
protected void onPreExecute() {
super.onPreExecute();
//progressDialog = new ProgressDialog(getApplicationContext());
progressDialog.setMessage("Loading");
progressDialog.show();
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
progressDialog.dismiss();
}
@Override
protected String doInBackground(Void... params) {
Log.d("TAG", lat + "" + lng);
RequestBuilder weather = new RequestBuilder();
Request request = new Request();
request.setLat(lat + "");
request.setLng(lng + "");
request.setUnits(Request.Units.UK);
request.setLanguage(Request.Language.ENGLISH);
request.addExcludeBlock(Request.Block.CURRENTLY);
request.removeExcludeBlock(Request.Block.CURRENTLY);
weather.getWeather(request, new Callback<WeatherResponse>() {
@Override
public void success(WeatherResponse weatherResponse, Response response) {
Log.d("TAG", "Temp: " + weatherResponse.getCurrently().getTemperature());
Log.d("TAG", "Summary: " + weatherResponse.getCurrently().getSummary());
Log.d("TAG", "Hourly Sum: " + weatherResponse.getHourly().getSummary());
weatherData.setTemperature(weatherResponse.getCurrently().getTemperature());
weatherData.setDesc(weatherResponse.getCurrently().getSummary());
String img = weatherResponse.getCurrently().getIcon();
//icon.setImageResource(Integer.parseInt(img));
//setIcon(img);
weatherData.setHrs(weatherResponse.getHourly().getSummary());
weatherData.setMydate(java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime()));
weatherData.setPres(weatherResponse.getCurrently().getPressure());
weatherData.setPrec(weatherResponse.getCurrently().getPrecipIntensity());
weatherData.setHumid(weatherResponse.getCurrently().getHumidity());
weatherData.setDewp(weatherResponse.getCurrently().getDewPoint());
weatherData.setMax(weatherResponse.getCurrently().getTemperatureMax());
weatherData.setMin(weatherResponse.getCurrently().getTemperatureMin());
UpdateUI(weatherData);
}
@Override
public void failure(RetrofitError retrofitError) {
Log.d("TAG", "Error while calling: " + retrofitError.getUrl());
Log.d("TAG", retrofitError.toString());
}
});
return null;
}
}
}
Die logcat zeigt 0.0, 0.0 für alle Standorte und zeigt nicht einmal den Ruf nach onConnected().
Versuchen Sie setzen mGoogleApiClient.connect(); in onStart –
Das Problem bleibt gleich – Akriti
haben eine Antwort für Schritt für Schritt Anleitung suchen: http://StackOverflow.com/A/38397092/5955362 –