Проблемы с 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.

Другие вопросы по тегам