Проблемы с GPS-трекером не отображаются на главном экране активности - PullRequest
0 голосов
/ 10 сентября 2018

Для более легкого доступа вот моя ссылка GitHub

https://github.com/PoetryHorizon/eloteroMan2

По какой-то причине GPS-отслеживание работает нормально, моя VendorActivity работает нормально, но я не могу получить доступ к своей основной активности.Он просто закрывает приложение, если я пытаюсь получить доступ к своему MainActivity.

В строке 82 в моей MainActivity я изначально хотел иметь его, чтобы, если пользователь разрешил GPS-отслеживание, он возвращался на экран MainActivity, но когда я установил его как MainActivity.class, он ничего не делает.Поэтому я установил VendorActivity.class, и он отлично отправляет пользователя в VendorActivity.Но когда я возвращаюсь в приложение, чтобы перейти на главный экран, оно просто закрывает приложение.

Я потратил 2 дня, пытаясь выяснить это, и я не могу точно определить, где находится исправление.

Если у кого-либо есть свободное время и он хочет помочь новому разработчику приложений для Android, он будет очень признателен.

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

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

В соответствии с файлом манифеста ваш проект настроен так, что 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);

Объяснение:

В вашем 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 из стека Activity.В этом случае вы показываете VendorActivity, но при нажатии кнопки «Назад» приложение будет убито, поскольку вы уже удалили MainActivity из стека.

Если пользователь отказывается дать вам разрешение, вы простоЗять их снова, чтобы дать разрешение, или вы звоните finish(), чтобы убить приложение

0 голосов
/ 10 сентября 2018

Похоже, вы вызываете finish () в своей MainActivity.Это приведет к закрытию MainActivity.Если вы завершите вызов метода finish (), MainActivity будет сохранена в стеке, а когда вы нажмете назад, вы вернетесь к MainActivity.

...