为了便于访问,我的GitHub链接
https://github.com/PoetryHorizon/eloteroMan2
出于某种原因GPS跟踪工作正常,我的VendorActivity工作正常,但我无法访问我的主要活动。如果我尝试访问我的MainActivity,它只是关闭应用程序。
在我的MainActivity的第82行,我原本想要它,所以如果用户允许GPS跟踪,它将返回到MainActivity屏幕,但是当我将它设置为MainActivity.class时,它什么都不做。所以我将它设置为VendorActivity.class,它将用户发送到VendorActivity就好了。但当我回到应用程序进入主屏幕时,它只是关闭应用程序。
我花了两天的时间试图解决这个问题,我无法确定修复的位置。
如果有人有空闲时间并且愿意帮助新的Android App Developer,我们将不胜感激。
这只是我上课前我正在开展的一个有趣的项目。我之前从未使用GPS定位。
根据清单文件,您的项目设置为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()
杀死应用程序
看起来你在MainActivity中调用了finish()。这将导致关闭MainActivity。如果您取消对finish()的调用,MainActivity将保留在堆栈中,当您按下时,您将返回MainActivity。