首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onResume误差

onResume误差
EN

Stack Overflow用户
提问于 2017-01-19 08:04:18
回答 2查看 348关注 0票数 0

我这里有情况。在StartActivity.java onCreate方法中,我将检查用户是否打开了GPS。如果GPS关闭,用户需要打开并进入设置。所以activity将是onPause。当用户返回应用程序时,它将通过onResume

然后它将转移到另一个名为MainActivity.java的活动中。在此活动中将生成一个映射。

StartActivity.java

代码语言:javascript
复制
    @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

代码语言:javascript
复制
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)并返回到应用程序时,它将被卡住,而不做任何不方便的事情。

任何帮助都是非常感谢的。谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-01-19 09:36:28

您需要检查mGoogleApiClient是否在MainActivity.java的onPause()中连接,所以您应该在onPause()中这样做。

代码语言:javascript
复制
if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
    LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
   }
}
票数 0
EN

Stack Overflow用户

发布于 2017-01-23 08:13:51

在onResume()中检查这个条件,因为当第一次创建StartActivity.java时,它调用onResume(),当从设置返回时调用onResume第二次。

代码语言:javascript
复制
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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41736699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档