从不调用LocationListener

时间:2013-10-05 22:36:14

标签: android locationlistener

我有一个客户端 - 服务器应用程序,客户端发送“ping”,服务器以“pong”响应。收到“乒乓”后,客户端将其位置更新(GPS数据)发送到服务器。收到位置更新后,服务器发送“pong”,这会持续一段时间。 套接字(用于发送和接收消息)由客户端和服务器在单独的线程中创建。我在主线程中注册LocationListener。问题是,我没有从GPS获得任何更新。我通过运行一个单独的应用程序来检查GPS,该应用程序显示所看到的卫星数量以及第一次修复所需的时间。第一次修复花了大约90秒。

我遇到的问题与提到herehere的问题非常相似。还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

有人可以对此有所了解吗?感谢。

1 个答案:

答案 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所抱怨的。