任何人都可以建议我应该实现什么,显示等待消息,直到LocationListener.onLocationChanged被调用?
我尝试使用没有标题的对话框,但问题是 -
1.如果我setCancelable(false)
,则用户甚至无法按下后退按钮
2.如果我发出setCancelable(true)
,那么它会在onLocationChanged()之前消失
下面是我的代码
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Please Wait for GPS Signals...").setCancelable(false);
mLocationWaitDialog = builder.create();
mLocationWaitDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
WindowManager.LayoutParams layoutParam = mLocationWaitDialog.getWindow().getAttributes();
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
layoutParam.y = -height / 2; // y position
mLocationWaitDialog.show();
答案 0 :(得分:1)
我有这个:
在OnCreate方法中:
if (lastKnownLocation == null) {
Log.i("Location", "lastKnownLocation es null");
dialog = ProgressDialog.show(this, "Buscando...", "");
}
上面声明了对话框,它是一个ProgressDialog。
然后,在处理程序中:
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.i("Location", "Mensaje recibido2");
if(dialog!=null){
dialog.dismiss();
}
LatLng gpsrc = new LatLng(msg.getData().getDouble("lat"),
msg.getData().getDouble("lon"));
continuar(gpsrc);
}
};
我的onLocationChanged方法:
public void onLocationChanged(Location location) {
double nuevalat=location.getLatitude();
double nuevalon=location.getLongitude();
origen=new LatLng(nuevalat, nuevalon);
Bundle bundle=new Bundle();
bundle.putDouble("lat", origen.latitude);
bundle.putDouble("lon", origen.longitude);
Message mescoords = new Message();
mescoords.setData(bundle);
try {
handler.sendMessage(mescoords);
} catch (Exception e) {
e.printStackTrace();
}
}
这样,当调用onLocationChanged方法时,会发送一条消息,该消息将关闭ProgressDialog。尝试使用ProgressDialog,用户可以回来,我不确定。
答案 1 :(得分:0)
ProgressDialog pd = new ProgressDialog(activity);
pd.setMessage("Loading.. Please wait");
pd.show();
在onLocationChanged()里面停止它
pd.dismiss();
答案 2 :(得分:0)
我会尝试设置一个超时计时器,在一段时间后将cancelable设置为true。这样就可以解决你让它立即消失的问题,同时如果没有找到GPS,也不能锁定用户。