Я работаю над проектом, который периодически определяет координаты телефона и загружает их в базу данных. Код я использую:LocationManager не запускается после повторного открытия приложения
public class Activity2 extends AppCompatActivity {
private LocationManager locm;
private LocationListener locl;
private Geocoder geocoder;
public TextView text, position;
public double lat, lon;
public String city;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
text = (TextView) findViewById(R.id.textView4);
position = (TextView) findViewById(R.id.textView5);
text.setText("Seriale: " + Build.SERIAL + "\nNome: " + Build.MANUFACTURER + " " + Build.PRODUCT);
geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());
locm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locl = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
try{
lat=location.getLatitude();
lon=location.getLongitude();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String date = df.format(Calendar.getInstance().getTime());
List<Address> la = geocoder.getFromLocation(lat, lon, 1);
if (la != null & la.size() > 0) {
Address address = la.get(0);
city = address.getLocality();
}
else
{
city="UNKNOWN";
}
MainActivity.st.executeUpdate("INSERT INTO position VALUES ('" + Build.SERIAL + "', '" + date + "', '" + lat + "', '" + lon + "', '" +city + "')");
position.setText(city);
} catch (Exception a){
}
}
@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(checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, 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{
locm.requestLocationUpdates("gps", 5000, 0, locl);
}
}
@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) {
try{
locm.requestLocationUpdates("gps", 5000, 0, locl);
}catch (SecurityException e){
}
}
}
}
С чистого старта (без кэш/данные о приложении сохраненным ранее) он работает хорошо и работает, как ожидалось:
- начинается первое действие, которое простой Логин (если usertext = пользователь $$ passtext = текст начинается
Activity2
) Activity2
просит разрешения (и GPS, если он отключен)- Уэйтса для GPS, чтобы открыть свою первую позицию
- Загрузки позиции каждые 5 секунд
Но если я закрыть приложение (не нажимая кнопку назад, но его очистки от RAM), а затем я пытаюсь открыть его снова, после начала Activity2
он не спрашивает для включения GPS больше, и он больше не показывает позиции, даже если он уже включен. Единственный способ вернуть его на работу - это очистка данных из внутренней памяти.
Как я могу решить эту проблему? Спасибо.
О, дорогая! Я полностью пропустил это. Какой быстрый ответ, теперь он отлично работает, большое вам спасибо! – Dadex