我的问题是,当我旋转GPS时,我无法停止LocationServices.FusedLocationApi
。这只发生在我旋转屏幕后。如果我不改变方向,开始和停止工作正常。
这应该控制是否应该更新
private boolean mRequestingLocationUpdates;
以下是我要保存的值
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putBoolean(REQUESTING_LOCATION_UPDATES_KEY, mRequestingLocationUpdates);
savedInstanceState.putBoolean(REQUESTING_SAVED_FIRSTTIME, isFirstTime);
savedInstanceState.putString(LAST_UPDATED_TIME_STRING_KEY, mLastUpdateTime);
super.onSaveInstanceState(savedInstanceState);
}
private void updateValuesFromBundle(Bundle savedInstanceState) {
Log.i(TAG, "Updating values from bundle");
if (savedInstanceState != null) {
if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) {
mRequestingLocationUpdates = savedInstanceState.getBoolean(REQUESTING_LOCATION_UPDATES_KEY);
if (mProgressBar != null) {
mProgressBar.setVisibility(View.VISIBLE);
}
if (lightsOn != null) {
lightsOn.setVisibility(View.VISIBLE);
}
}
if (savedInstanceState.keySet().contains(IS_FIRST_TIME_KEY)) {
isFirstTime = savedInstanceState.getBoolean(IS_FIRST_TIME_KEY);
}
// Update the value of mLastUpdateTime from the Bundle and update the UI.
if (savedInstanceState.keySet().contains(LAST_UPDATED_TIME_STRING_KEY)) {
mLastUpdateTime = savedInstanceState.getString(LAST_UPDATED_TIME_STRING_KEY);
}
}
}
START和STOP位置更新
protected void startLocationUpdates() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mLocationRequest, this);
}
protected void stopLocationUpdates() {
LocationServices.FusedLocationApi.removeLocationUpdates(
mGoogleApiClient, this);
}
onCreate使用按钮来控制开始和停止
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainreal);
// Starting the gps and location updates
mStartTrackerButton = (Button) findViewById(R.id.buttonStart);
mStartTrackerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainReal.this, "START", Toast.LENGTH_SHORT).show();
// Set true, will generate a new date, and a new startpoint in database
isFirstTime = true;
if (mProgressBar != null) {
mProgressBar.setVisibility(View.VISIBLE);
}
if (lightsOn != null) {
lightsOn.setVisibility(View.VISIBLE);
}
mRequestingLocationUpdates = true;
startLocationUpdates();
}
});
// STOP the gps and location updates
mStopTrackerButton = (Button) findViewById(R.id.buttonStop);
mStopTrackerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mProgressBar != null) {
mProgressBar.setVisibility(View.GONE);
}
if (lightsOn != null) {
lightsOn.setVisibility(View.GONE);
}
mRequestingLocationUpdates = false;
stopLocationUpdates();
}
});
// Setting up google api client
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
// Create the LocationRequest object
mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10 * 1000) // 10 seconds, in milliseconds
.setFastestInterval(5 * 1000); // 2 seconds, in milliseconds
mRequestingLocationUpdates = false;
// Update values using data stored in the Bundle.
updateValuesFromBundle(savedInstanceState);
}
答案 0 :(得分:0)
我并不完全理解您的问题,但如果您想在屏幕旋转时保存某些内容,则可以检查屏幕旋转,如下所示:
<nav id="nav">
<ul>
<li class="active"><a href="#slide1" title="Next Section" >About</a></li>
<li><a href="#slide2" >Works</a></li>
<li><a href="#slide3" >Contact</a></li>
</ul>
</nav>
或者,如果您只是想锁定屏幕altogther(也可能有用),您可以在 @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int orientation = newConfig.orientation;
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
// Save something
} else (orientation == Configuration.ORIENTATION_LANDSCAPE) {
// Save something
}
}
文件中写下,如下所示:
AndroidManifest.xml
希望它有所帮助!
答案 1 :(得分:0)
需要在onPause()
内添加此内容。可以对此有一些解释。
@Override
protected void onPause() {
super.onPause();
if (mGoogleApiClient.isConnected()) {
stopLocationUpdates();
}
}