我想做这样的应用程序:
用户点击该按钮 应用程序显示用户的坐标(纬度和经度)
我正在执行here
步骤// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
double glat = location.getLatitude();
double glong = location.getLongitude();
Toast.makeText(getApplicationContext(), "Your position\n"+glat+"\n"+glong, Toast.LENGTH_LONG).show();
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
如何将其实现为按钮点击事件?
如果用户点击按钮,则会出现显示位置的Toast:)
更新
我使用startActivityForResult()实现它,但结果为空或null 这是我的代码:
这是我要点击的按钮上的代码
btn_obj_useKor.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(getApplicationContext(), MyLocationListener.class);
startActivityForResult(intent, 0);
}
});
这是我的MyLocationListener类:
public class MyLocationListener extends Activity{
Intent intent;
String output = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
LocationManager locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
double glat = location.getLatitude();
double glong = location.getLongitude();
output = glat+","+glong;
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onProviderDisabled(String provider) {}
};
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
intent.putExtra("returnedData", output);
setResult(RESULT_OK, intent);
finish();
}
}
当我点击它显示WTF的按钮时!这意味着结果为null或为空。
问题是什么,我该怎么做?
答案 0 :(得分:0)
它不会立即返回结果,因为GPS提供商需要时间来启动并找到您的位置。这就是您收听回调事件的原因。
目前您的代码正在侦听网络位置,这不是很准确。将LocationManager更改为GPS_Provider(在最后一行),以便在启用时使用GPS。
答案 1 :(得分:0)
响应onClick是一个用户事件,LocationListener onLocationChanged也是一个事件。如果在LocationListener事件之前触发用户事件,则无法显示任何位置。
我的建议是在按钮onClick处理程序中调用另一个活动的startActivityForResult,第二个活动包含所有LocationManager& LocationListener代码,在onLocationChanged事件处理程序中,您将位置传递回第一个活动。