我这里有情况。在StartActivity.java onCreate方法中,我将检查用户是否打开了GPS。如果GPS关闭,用户需要打开并进入设置。所以activity将是onPause。当用户返回应用程序时,它将通过onResume。
然后它将转移到另一个名为MainActivity.java的活动中。在此活动中将生成一个映射。
StartActivity.java
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
if (Utils.isGPSEnabled(this)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(PERMISSIONS_LOCATION, REQUEST_LOCATION);
} else {
proceed();
}
} else {
Utils.T(this, "Please enable your GPS location");
Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(viewIntent);
}
}
@Override
protected void onResume() {
super.onResume();
proceed();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case REQUEST_LOCATION :
if (Utils.permissionGranted(requestCode, REQUEST_LOCATION, grantResults, 1)){
proceed();
} else {
Utils.t(this, "Go to settings and enable permissions");
}
}
}
public void proceed() {
new CountDownTimer(3000, 100) {
public void onTick(long millisUntilFinished) {
if (Math.round((float)millisUntilFinished / 1000.0f) != countTime) {
countTime = Math.round((float) millisUntilFinished / 1000.0f);
}
}
public void onFinish() {
tv_detect.setText("Done!");
intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
finish();
}
}.start();
}MainActivity.java
public class MainActivity extends AppCompatActivity implements
OnMapReadyCallback, LocationListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
View.OnClickListener, GoogleMap.OnMarkerClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buildGoogleApiClient();
}
protected synchronized void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
}
@Override
protected void onPause() {
super.onPause();
// stop location updates when Activity is no longer active
if (mGoogleApiClient != null) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
}
}
// The rest of method is already implemented
}错误:
无法暂停活动{xx.xxx.com.xxx/xx.xxx.com.xxx.ui.activity.MainActivity}:java.lang.IllegalStateException: GoogleApiClient尚未连接。
问题:当我将proceed()方法放在onResume上时会发生错误,并且它会产生两次MainActivity.java。当我将proceed()从onResume中删除时,它会正常工作,但我需要使用onResume,因为当活动暂停(用户转到设置以打开onResume)并返回到应用程序时,它将被卡住,而不做任何不方便的事情。
任何帮助都是非常感谢的。谢谢
发布于 2017-01-19 09:36:28
您需要检查mGoogleApiClient是否在MainActivity.java的onPause()中连接,所以您应该在onPause()中这样做。
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
}
}发布于 2017-01-23 08:13:51
在onResume()中检查这个条件,因为当第一次创建StartActivity.java时,它调用onResume(),当从设置返回时调用onResume第二次。
if (Utils.isGPSEnabled(this)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(PERMISSIONS_LOCATION, REQUEST_LOCATION);
} else {
proceed();
}
} else {
Utils.T(this, "Please enable your GPS location");
Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(viewIntent);
}https://stackoverflow.com/questions/41736699
复制相似问题