GPS追踪器没有进入我的主要活动屏幕的问题

问题描述 投票:0回答:2

为了便于访问,我的GitHub链接

https://github.com/PoetryHorizon/eloteroMan2

出于某种原因GPS跟踪工作正常,我的VendorActivity工作正常,但我无法访问我的主要活动。如果我尝试访问我的MainActivity,它只是关闭应用程序。

在我的MainActivity的第82行,我原本想要它,所以如果用户允许GPS跟踪,它将返回到MainActivity屏幕,但是当我将它设置为MainActivity.class时,它什么都不做。所以我将它设置为VendorActivity.class,它将用户发送到VendorActivity就好了。但当我回到应用程序进入主屏幕时,它只是关闭应用程序。

我花了两天的时间试图解决这个问题,我无法确定修复的位置。

如果有人有空闲时间并且愿意帮助新的Android App Developer,我们将不胜感激。

这只是我上课前我正在开展的一个有趣的项目。我之前从未使用GPS定位。

java android android-gps
2个回答
0
投票

根据清单文件,您的项目设置为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。在这种情况下,您正在显示VendorActivity,但点击后退按钮将终止应用程序,因为您已经从堆栈中删除了MainActivity

如果用户拒绝给你许可,你只需再次打电话给他们许可,或者你打电话给finish()杀死应用程序


0
投票

看起来你在MainActivity中调用了finish()。这将导致关闭MainActivity。如果您取消对finish()的调用,MainActivity将保留在堆栈中,当您按下时,您将返回MainActivity。

© www.soinside.com 2019 - 2024. All rights reserved.