2017-01-19 1 views
0

У меня есть ситуация здесь. В методе StartActivity.java onCreate я проверю, включил ли пользователь свой GPS или нет. Если GPS выключен, пользователю необходимо включить и перейти к настройкам. Таким образом, activity будет onPause. Когда пользователь вернется в приложения, он перейдет через onResume.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.MainAc tivity}: java.lang.IllegalStateException: GoogleApiClient еще не подключен.

Проблема: Ошибка происходит, когда я ставлю proceed() метод на onResume и он будет генерировать в два раза MainActivity.java дважды. Когда я удалю proceed() из onResume, он будет работать нормально, но мне нужно использовать onResume, потому что когда действие приостанавливается (пользователь переходит к настройкам для включения GPS) и возвращается в приложения, он будет застревать и ничего не делать, что не удобный.

Любая помощь действительно оценена. Благодаря

+0

Что такое configview()? – AJay

+0

@ Enzokie, обращайтесь к вопросу. Уже обновляем проблемы. – Sariyanti

+0

@AJay это была декларация 'ui'. – Sariyanti

ответ

0

вам нужно проверить, что mGoogleApiClient подключен OnPause() из MainActivity.java , так что вы должны сделать это в OnPause()

if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) { 
    LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 
    } 
} 
+0

Мне нужно поставить это на 'MainActivity.java'? Ошибка произошла в 'StartActivity.java'. Необходимость проверки (независимо от того, включен ли пользователь GPS или нет), произошла в 'StartActivity.java'. После этого он перенаправляется на 'MainActivity.java'. – Sariyanti

+0

Да в MainActivity.java – Omer

+0

'continue();' был в 'StartActivity.java', не могли бы вы прочитать вопросы. – Sariyanti

0

проверить это условие в 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); 
    } 
+0

Это по-прежнему ошибка. Кроме того, вызов 'continue()' вызывает вызов дважды. – Sariyanti

Смежные вопросы