2016-10-03 4 views
0

Я создаю приложение для Android, которое использует текущее местоположение устройства. Для этого я разработал приложение, используя следующий код, чтобы получить текущее местоположение каждые 5 секунд.Приложение для определения местоположения Android

import android.*; 
import android.Manifest; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.media.audiofx.BassBoost; 
import android.os.Build; 
import android.provider.Settings; 
import android.support.annotation.NonNull; 
import android.support.v4.app.ActivityCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class CurrentLocation extends AppCompatActivity { 

    private Button button; 
    private TextView textView; 

    private LocationManager locationManager; 
    private LocationListener locationListener; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_current_location); 

     button = (Button) findViewById(R.id.button); 
     textView = (TextView) findViewById(R.id.textView); 

     locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

     locationListener = new LocationListener() { 
      @Override 
      public void onLocationChanged(Location location) { 
       textView.append("\n " + location.getLongitude() + " " + location.getLatitude()); 
      } 

      @Override 
      public void onStatusChanged(String provider, int status, Bundle extras) { 

      } 

      @Override 
      public void onProviderEnabled(String provider) { 

      } 

      @Override 
      public void onProviderDisabled(String provider) { 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       startActivity(intent); 
      } 
     }; 

     if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       requestPermissions(new String[]{ 
         Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION, 
         Manifest.permission.INTERNET 
       }, 10); 
       return; 
      } 
     } 
     else{ 
      configureButton(); 
     } 
     ; 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     switch (requestCode){ 
      case 10: 
       if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED) 
        configureButton(); 
     } 
    } 

    private void configureButton() { 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       locationManager.requestLocationUpdates("gps", 5000, 0, locationListener); 
      } 
     }); 

    } 
} 

Он работал отлично, когда я впервые установил это приложение на своем устройстве. Но после этого он вообще не работает. Он даже не просит включить службу определения местоположения. Может кто-то, пожалуйста, помогите мне в этом. Спасибо.

+0

После того, как вы нажмете кнопку, проверьте свой лог-код и опубликуйте результат. У вас есть какие-либо ошибки? Вы включили свой GPS? – AndroidRuntimeException

ответ

1

Перед тем, как locationManager.requestLocationUpdates("gps", 5000, 0, locationListener); вы должны проверить, включен ли GPS (службы определения местоположения). Вы можете сделать это с ниже функции:

public boolean isGPSOn() { 
    boolean isOn = ((LocationManager) this.getSystemService(Context.LOCATION_SERVICE)) 
      .isProviderEnabled(LocationManager.GPS_PROVIDER); 
    if (!isOn) { 
     showGPSEnableDialog(); 
    } 
    return isOn; 
} 

и если не работает может показать диалог или напрямую перенаправлять настройки, чтобы включить его. Хорошо диалог предпочтительнее. Если пользователь решит включить GPS в вашем диалоговом окне, переадресуйте его на такие параметры.

startActivity(new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
+0

Я думаю, что уже сделал это в моем коде. – jayz