抱歉我的英文。 我正试图从GPS获取一个位置以放置全局变量纬度,经度。 GPS打开,但在从GPS检索数据之前,活动仍在继续。
我需要换句话说...方法getCurrentLocation()只有在找到位置并填充经度和纬度变量时才能完成,所以我可以在其他方法中使用它们。 我知道......用户必须等待......我将在屏幕上显示一些内容。 我该怎么办? 谢谢
我想我正在某个地方跳过停止听GPS。哪里更好?
代码如下:
//Method to retrieve coordinates
public void getCurrentLocation() {
//Use GPS if possible
if(manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
//assign Listener to GPS
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
Toast.makeText(this, LocationManager.GPS_PROVIDER, Toast.LENGTH_SHORT).show();
}
else if(manager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){//toherwise, use NETWORK
//assign Listener to NETWORK
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
Toast.makeText(this, LocationManager.NETWORK_PROVIDER, Toast.LENGTH_SHORT).show();
}
}
//Class to store the location recived in two variables
final class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
//coordinates storing
latitude = String.valueOf(location.getLatitude());
longitude = String.valueOf(location.getLongitude());
Toast.makeText(getApplicationContext(), latitude + longitude, Toast.LENGTH_LONG).show();
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
答案 0 :(得分:2)
使用LocusService第三方库! Goto LocusService
通过调用简单的功能,您可以轻松获得当前的GPS或网络位置....
要解决您的问题,请使用此代码!
library(stringr)
params <- "var1 /* first, variable */, var2, var3 /* third, variable */"
# Split by , which are not enclosed in your /*...*/
params_split <- str_split(params, ",(?=[^(/[*])]*(/[*]))")[[1]]
# Extract matches of /*...*/, only taking the contents
params_def <- str_match(params_split, "/[*] *(.*?) *[*]/")[,2]
params_def[is.na(params_def)] <- ""
# Remove traces of /*...*/
params_clean <- trimws(gsub("/[*] *(.*?) *[*]/", "", params_split))
答案 1 :(得分:1)
如果您希望Android活动等到获得GPS位置,您可以尝试使用AsyncTask
。有关答案,请参阅Android find GPS location once, show loading dialog。基本上在onPreExecute
中你可以开始对话(它在doInBackground
被调用之前开始)。这意味着您要等到可以定位并显示对话框的时间。然后在doInBackground
中,您可以获得该位置。完成后onPostExecute
被调用。您可以从onPostExecute
内停止。您可以检查位置是否为空,然后如果需要,还可以从onPostExecute
内部调用其他功能。
这可能是一种方式。您可以从AsyncTask Android example学习一个基本示例。您也可以先阅读文档here。
其他一些类似的有用问题:
Wait for current location - GPS - Android Dev
getting location instantly in android
希望这有帮助。
答案 2 :(得分:1)
最好使用getLastKnownLocation()方法。 这是代码示例:
将纬度和经度设为全局变量
double longitude;
double latitude;
protected void onCreate(Bundle savedBundle) {
super.onCreate(savedBundle);
setContentView(R.layout.activity_receipt_result);
Objects.requireNonNull(getSupportActionBar()).setElevation(0);
locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// Activity#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for Activity#requestPermissions for more details.
ActivityCompat.requestPermissions(this,new String[] {Manifest.permission.ACCESS_FINE_LOCATION},1);
}else{
Location location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER);
latitude = location.getLatitude();
longitude = location.getLongitude();
Log.d("Location: ", "long-lat" + longitude + "-"+ latitude);
}
}
在其余代码中可以使用经度和纬度变量之后。
答案 3 :(得分:0)
我遇到同样的问题,
通过使用Activity生命周期方法解决它。
1)onCreate(Bundle b)
方法
2)需要GPS定位的意图或功能,onStart()
方法。
所以活动从onCreate(bundle)
方法开始,将捕获GPS位置。这里
GPS海拔高度,纬度,经度值将分配给全局变量。
之后将执行onStart()
方法,其中将调用GPS位置全局变量以执行必要的操作。
希望这有助于你