我有一个客户端 - 服务器应用程序,客户端发送“ping”,服务器以“pong”响应。收到“乒乓”后,客户端将其位置更新(GPS数据)发送到服务器。收到位置更新后,服务器发送“pong”,这会持续一段时间。 套接字(用于发送和接收消息)由客户端和服务器在单独的线程中创建。我在主线程中注册LocationListener。问题是,我没有从GPS获得任何更新。我通过运行一个单独的应用程序来检查GPS,该应用程序显示所看到的卫星数量以及第一次修复所需的时间。第一次修复花了大约90秒。
我遇到的问题与提到here和here的问题非常相似。还here。
我的代码如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.getBestProvider(criteria, true);
isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!isGPSEnabled) {
Log.i(TAG,"PING: GPS not enabled");
} else {
Log.i(TAG,"PING: GPS enabled");
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
Log.i(TAG,"PING: adding GPS status listener");
locationManager.addGpsStatusListener(PingActivity.this);
}
/*The server and client threads are started after this.*/
LocationListener如下:
LocationListener locListener = new LocationListener()
{
@Override
public void onLocationChanged(Location location) {
Log.i(TAG, "PING: onLocationChanged");
Log.i(TAG, "PING: location is " + location.getLatitude() + ", " + location.getLongitude());
}
如您所见,LocationListener中只有两个日志语句,并且根本不打印这两个日志语句。是因为我有一个线程不断监听更新并且从不调用LocationListener?我还尝试为GPS创建一个单独的活动,并在启动客户端 - 服务器线程之前注册它。
这些是清单文件中的权限。
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET"/>
我在LogCat中收到的消息是
duplicate add listener for uid
有人可以对此有所了解吗?感谢。
答案 0 :(得分:-1)
您收到代码错误(从android源代码中提取)
private void handleAddListener(int uid) {
synchronized(mListeners) {
if (mClientUids.indexOfKey(uid) >= 0) {
// Shouldn't be here -- already have this uid.
Log.w(TAG, "Duplicate add listener for uid " + uid);
return;
}
mClientUids.put(uid, 0);
if (mNavigating) {
try {
mBatteryStats.noteStartGps(uid);
} catch (RemoteException e) {
Log.w(TAG, "RemoteException in addListener");
}
}
}
}
mClientUids
被声明为
private final SparseIntArray mClientUids = new SparseIntArray();
并且,在您的代码中,
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener);
locationManager.addGpsStatusListener(PingActivity.this);
在这里你要添加两个不同的监听器,这就是Android所抱怨的。