2016-02-04 8 views
1

Я хочу, чтобы показать через тоста сообщение с моей широты и долготы информаций, поэтому я написал этот код в моем mainActivity:Местоположение не работает на реальном устройстве

public class RunActivity extends AppCompatActivity implements LocationListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_run); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this); 

} 

@Override 
public void onLocationChanged(Location location) { 
    Toast.makeText(getApplicationContext(), "Latitude : "+location.getLatitude()+", Longitude : "+location.getLongitude(), Toast.LENGTH_LONG); 
} 

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

} 

@Override 
public void onProviderEnabled(String provider) { 
    Toast.makeText(getApplicationContext(), provider+" is enabled", Toast.LENGTH_LONG); 
} 

@Override 
public void onProviderDisabled(String provider) { 
    Toast.makeText(getApplicationContext(), provider+" is disabled", Toast.LENGTH_LONG); 
} 

}

Я запустить его прямо на моем устройстве (Samsung S5), но тосты не будут отображаться. Есть идеи?

+0

Вы уверены, что получаете исправление gps? Удерживайте устройство за окном на несколько секунд. Не роняйте;) – AlbAtNf

+0

Я провел ночь как дурак по соседству: D Не работает :( – Habchi

+0

Часть, где вы обрабатываете недостающие разрешения, пуста. Вы просто вернетесь. Если вы используете android 6, сделайте конечно, вы предоставили разрешения вручную в настройках приложения – AlbAtNf

ответ

0

мне удалось найти решение, создав еще один проект, основанный на некоторых информаций, которые я получил в книге, так что я просто разместить свой код здесь в надежде, что это поможет кому-то. Это полностью Функциональное:

public class MainActivity extends AppCompatActivity { 

public TextView Long; 
public TextView Lat; 
public TextView Speed; 
public TextView Alt; 
public TextView Clock; 
public TextView Provider; 
public String ProviderName; 

private final LocationListener locationListener = new LocationListener() { 
    @Override 
    public void onLocationChanged(Location location) { 
     setContentView(R.layout.activity_main); 
     Provider = (TextView) findViewById(R.id.Provider); 
     Long = (TextView) findViewById(R.id.Lon); 
     Lat = (TextView) findViewById(R.id.Lat); 
     Speed = (TextView) findViewById(R.id.Speed); 
     Alt = (TextView) findViewById(R.id.Alt); 
     Clock = (TextView) findViewById(R.id.Time); 
     Provider.setText(ProviderName); 
     Long.setText(Double.toString(location.getLongitude())); 
     Lat.setText(Double.toString(location.getLatitude())); 
     Speed.setText(Float.toString(location.getSpeed())); 
     Alt.setText(Double.toString(location.getAltitude())); 
     Date date = new Date(location.getTime()); 
     DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); 
     Clock.setText(dateFormat.format(date)); 
    } 

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

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     Toast.makeText(getApplicationContext(), provider + " is enabled", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     Toast.makeText(getApplicationContext(), provider + " is disabled", Toast.LENGTH_LONG).show(); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    getApplicationContext().getSystemService(Context.LOCATION_SERVICE); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    LocationProvider provider = lm.getProvider("gps"); 
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     // TODO: Consider calling 
     // ActivityCompat#requestPermissions 
     // here to request the missing permissions, and then overriding 
     // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
     //           int[] grantResults) 
     // to handle the case where the user grants the permission. See the documentation 
     // for ActivityCompat#requestPermissions for more details. 
     return; 
    } 
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener); 
    ProviderName = provider.getName(); 


} 

}

Спасибо.

0

В Android Marshmallow пользователь должен предоставить разрешения во время выполнения (не при установке, как и раньше). В вашем фрагменте кода для обработки этого запроса разрешения пуст

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 

     return; 
    } 

ВЕРНЕТЕ вызывается непосредственно перед requestLocationUpdates. Вот почему он не называется.

Быстрое исправление: Перейдите в настройки вашего смартфона. Перейдите в Приложения, найдите свое приложение и укажите разрешения вручную.

В конечном счете вам необходимо будет реализовать этот код TODO, который вы получили в своем коде. См Google developers guide

EDIT Я только что видел вашу реальную проблему здесь ... Вы просто забыли позвонить show() на этот тост.

Toast.makeText().show(); 
+0

Я добавил метод show() к моим тостам, теперь я получаю сообщение, когда я включаю или отключаю GPS, но что-нибудь о моем laitutde и долготе. Я также проверял конфигурацию своих приложений, если разрешение установлено для моего приложения, и да это было уже. Так что я все еще ничего не рассказываю о своей геоинформации – Habchi

+0

Я думаю, вы почему-то не получаете исправления gps. У вас есть другое устройство для тестирования? – AlbAtNf

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