Проблемы с GPS-трекером не отображаются на главном экране активности
Для более легкого доступа вот моя ссылка GitHub
https://github.com/PoetryHorizon/eloteroMan2
По какой-то причине GPS-отслеживание работает нормально, моя VendorActivity работает нормально, но я не могу получить доступ к своей основной активности. Он просто закрывает приложение, если я пытаюсь получить доступ к своему Main Activity.
В строке 82 в моей MainActivity я изначально хотел, чтобы, если пользователь разрешает GPS-отслеживание, он возвращался к экрану MainActivity, но когда я установил его как Main Activity.class, он ничего не делает. Поэтому я установил VendorActivity.class, и он отлично отправляет пользователя в VendorActivity. Но когда я возвращаюсь в главное приложение, оно просто закрывает приложение.
Я потратил 2 дня, пытаясь выяснить это, и я не могу точно определить, где находится исправление.
Если у кого-то есть свободное время и он готов помочь новому разработчику приложений для Android, он будет очень признателен.
Это просто веселый побочный проект, над которым я работаю до начала занятий. Я никогда не работал с местоположением GPS раньше.
2 ответа
В соответствии с файлом манифеста ваш проект настроен так, что MainActivity
это ваша деятельность по запуску. Это то, где вы начинаете! Но вы также удаляете любой путь назад, вызывая finish()
в двух местах.
Простое решение - просто изменить этот код:
if (checkAndRequestPermissions()){
finish();
return;
}
только к этой единственной строке кода:
checkAndRequestPermissions();
А также убрать finish()
в onRequestPermissionsResult()
метод, при котором вы переключаетесь на VendorActivity
, Изменить:
Intent i = new Intent(MainActivity.this, VendorActivity.class);
startActivity(i);
finish();
должно быть просто:
Intent i = new Intent(MainActivity.this, VendorActivity.class);
startActivity(i);
Explaination:
В вашем MainActivity
в onCreate()
метод, который вы проверяете, если пользователь предоставил разрешение на местоположение, используя метод checkAndRequestPermissions()
если он вернется true
Вы просто выходите из программы - выключается!
if (checkAndRequestPermissions()){ //if this is true .. user has already granted permission then you kill the app! why?
finish();
return;
}
Метод checkAndRequestPermissions()
возвращается true
если пользователь уже предоставил разрешение.
private boolean checkAndRequestPermissions() {
int permissionLocation = ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION);
List<String> listPermissionsNeeded = new ArrayList<>();
if (permissionLocation != PackageManager.PERMISSION_GRANTED) {
listPermissionsNeeded.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (!listPermissionsNeeded.isEmpty()) {
ActivityCompat.requestPermissions(this, listPermissionsNeeded.toArray(new String[listPermissionsNeeded.size()]), REQUEST_ID_MULTIPLE_PERMISSIONS);
return false;
}
return true; //Returns true if permission has already been granted!!
}
Если пользователь не предоставил разрешение, вы запрашиваете его. таким образом onRequestPermissionsResult()
срабатывает с результатами запроса. Если пользователь дает разрешение, вы переходите на VendorActivity
Однако одновременно звоните finish()
который, проще говоря, удаляет MainActivity
из стека активности. В этом случае вы показываете VendorActivity
, но нажатие кнопки "Назад" убьет приложение, потому что вы уже удалили MainActivity
из стека.
Если пользователь отказывается дать вам разрешение, вы просто снова выводите его, чтобы дать разрешение, или звоните finish()
убить приложение
Похоже, вы вызываете finish() в MainActivity. Это приведет к закрытию MainActivity. Если вы завершите вызов метода finish(), MainActivity будет сохранена в стеке, а когда вы нажмете назад, вы вернетесь к MainActivity.