Java GPS跟踪器未进入我的主活动屏幕的问题

Java GPS跟踪器未进入我的主活动屏幕的问题,java,android,android-gps,Java,Android,Android Gps,为了方便访问,这里是我的GitHub链接 出于某种原因,GPS跟踪工作正常,我的供应商活动正常,但我无法访问我的主要活动。如果我尝试访问MainActivity,它只会关闭应用程序 在MainActivity的第82行,我最初希望使用它,因此如果用户允许GPS跟踪,它将返回到MainActivity屏幕,但当我将其设置为MainActivity.class时,它不会执行任何操作。因此,我将其设置为VendorActivity.class,它会将用户发送到VendorActivity。但当我在应

为了方便访问,这里是我的GitHub链接

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

在MainActivity的第82行,我最初希望使用它,因此如果用户允许GPS跟踪,它将返回到MainActivity屏幕,但当我将其设置为MainActivity.class时,它不会执行任何操作。因此,我将其设置为VendorActivity.class,它会将用户发送到VendorActivity。但当我在应用程序中回击以转到主屏幕时,它只是关闭应用程序

我花了两天的时间试图弄明白这一点,但我无法确定修复的位置

如果有人有空闲时间并且愿意帮助新的Android应用程序开发人员,我们将不胜感激


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

看起来您正在MainActivity中调用finish()。这将导致MainActivity关闭。如果调用finish(),MainActivity将保留在堆栈中,当您按back时,您将返回MainActivity。

根据清单文件,您的项目设置为
MainActivity
是您的启动活动。这就是你的出发点!但您也可以通过在两个位置调用
finish()
来删除任何返回路径

简单的解决方法就是更改以下代码:

if (checkAndRequestPermissions()){
    finish();
    return;
}
要仅显示这一行代码,请执行以下操作:

checkAndRequestPermissions();
以及在切换到
供应商活动的
onRequestPermissionsResult()方法中删除
finish()
。更改:

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!!
}
private boolean checkAndRequestPermissions(){
int permissionLocation=ContextCompat.checkSelfPermission(这是Manifest.permission.ACCESS\u FINE\u位置);
List ListPermissionsNeed=new ArrayList();
if(permissionLocation!=已授予PackageManager.PERMISSION){
listPermissionsNeed.add(Manifest.permission.ACCESS\u FINE\u位置);
}
如果(!ListPermissionsNeed.isEmpty()){
ActivityCompat.requestPermissions(此,ListPermissionsNeed.toArray(新字符串[ListPermissionsNeed.size()),请求\u ID\u多个\u权限);
返回false;
}
return true;//如果已授予权限,则返回true!!
}
如果用户未授予权限,则您请求该权限。因此,
onRequestPermissionsResult()
将与请求结果一起触发。但是,如果用户授予您进入
VendorActivity
的权限,同时调用
finish()
,简单地说,这将从活动堆栈中删除
MainActivity
。在这种情况下,您显示的是
VendorActivity
,但点击后退按钮将终止应用程序,因为您已经从堆栈中删除了
MainActivity


如果用户拒绝授予您权限,您只需再次将其灰化以授予权限,或者您调用
finish()
以杀死该应用程序

Awesome!谢谢我会用它做实验!另外,在用户接受GPS跟踪后,是否可以直接进入我的主活动屏幕而不必进入供应商活动屏幕?你是最好的!非常感谢。现在可以了!谢谢你抽出时间来帮助我!我真的很感激!!!!我们都从某个地方开始学习。很高兴我能帮你找到正确的方向。快乐编码。