我希望在使用广播接收器启动后获得位置坐标。但是我的代码不能工作很多次(仅工作很少次)。应用程序不等待位置管理器获取坐标。请帮助我。提前致谢。这是我的代码
`LocationManager lm=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
Toast.makeText(context,"location listner",Toast.LENGTH_SHORT).show();
LocationListener ll=new LocationListener() {
@Override
public void onLocationChanged(Location location) {
if(co<=0) {
double la=location.getLatitude();
double lo=location.getLongitude();
try {
SmsManager sms=SmsManager.getDefault();
Toast.makeText(context,"lat "+lo+" lon "+la,Toast.LENGTH_LONG).show();
co++;
sms.sendTextMessage(number,null,"Langitude "+la+" lattitude "+lo ,null,null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
Location location=new Location(LocationManager.GPS_PROVIDER);
}
@Override
public void onProviderDisabled(String provider) {
}
};
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,100,0,ll);
Toast.makeText(context,"went out .....",Toast.LENGTH_SHORT).show();
}`
答案 0 :(得分:0)
只要paste
方法正在执行,BroadcastReceiver
只有一个生命周期。该方法返回后,它不再存在,并且提供给它的onReceive
对象不再有效。因此,注册像Context
这样的异步回调将无法可靠地运行。我真的很惊讶它有效。
相反,请使用LocationListener
启动BroadcastReceiver
并让Service
注册Service
的监听器。 LocationManager
将保持不变,直到显式停止或系统因内存压力而导致死亡。