我正在开发一个应用程序,可以与我的手机上的三个远程服务进行通信。对于沟通,我试图找出哪种方法是最好的(intents或AIDL)。我通过蓝牙以4码流/秒的速率接收每个15字节的流,现在我想添加我的gps位置以执行数据记录。 我需要每秒我的gps位置。由于requestLocationUpdates中的时间只是一个提示,因此我创建了一个计时器,它每秒要求最后一次已知位置。获取GPS位置时出错
不幸的是,当我尝试使用AIDL进行通信时,我遇到了无法修复的错误。奇怪的是,当我使用intents将接收到的数据传递给远程服务时,所有工作都正常。
任何人都可以帮我吗?
这里我的代码:
private static final long MINIMUM_DISTANCE_CHANGE_FOR_UPDATES = 0; //meters
private static final long MINIMUM_TIME_BETWEEN_UPDATES = 1000; //in Milliseconds
private final MyLocationListener listener;
private final LocationManager mLocationManager;
private final List<String> providers;
public Parser() {
mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
listener = new MyLocationListener();
listener.onProviderEnabled(LocationManager.GPS_PROVIDER);
mLocationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATES,
MINIMUM_DISTANCE_CHANGE_FOR_UPDATES,
listener);
providers = mLocationManager.getProviders(true);
timer = new Timer();
}
public boolean parse(byte[] data) {
gpsUpdater();
...
}
private void gpsUpdater() {
timer.scheduleAtFixedRate(new TimerTask() {
Location l = null;
@Override
public void run() {
for(String s: providers) {
l = mLocationManager.getLastKnownLocation(s);
if(l != null) {
gps = true;
latitude = l.getLatitude();
longitude = l.getLongitude();
}
}
}
}, 0, MINIMUM_TIME_BETWEEN_UPDATES);
}
public class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location arg0) {
//TODO Auto-generated method stub
}
@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
}
}
,这里是我得到的错误:
04-06 15:06:43.015:E/AndroidRuntime(844):致命异常:计时器-0 04-06 15:06:43.015:E/AndroidRuntime(844):java.lang.SecurityException:绑定器对不正确接口的调用 04-06 15:06:43.015:E/AndroidRuntime(844):at android .os.Parcel.readException(Parcel.java:1322) 04-06 15:06:43.015:E/AndroidRuntime(844):at android.os.Parce l.readException(Parcel.java:1276) 04-06 15:06:43.015:E/AndroidRuntime(844):at android.location.ILocationManager $ Stub $ Proxy.getLastKnownLocation(ILocationManager.java:896) 04-06 15:06:43.015:E/AndroidRuntime(844):在android.location.LocationManager.getLastKnownLocation(LocationManager.java:1020) 04-06 15:06:43.015:E/AndroidRuntime(844):at pt.ua. droidshark.handler.Parser $ 1.run(Parser.java:446) 04-06 15:06:43.015:E/AndroidRuntime(844):在java.util.Timer $ TimerImpl.run(Timer.java:284)
难道它是位置管理器使用一种aidl来提供我的应用程序的位置和电话不能处理这样的信息量,当所有的沟通是使用AIDL?我不明白为什么它在我使用intent时正常工作,并且始终在使用AIDL时出现此错误。 PS:由于有人提出原因可能是计时器不在服务或活动类中,因此我创建了一个服务,在该服务中执行代码,并得到了相同的情况。当使用意图进行所有通信并且在使用AIDL时出现错误时工作良好。
是的,我包含此权限 – 2012-04-06 16:27:34