LocationManager的奇怪行为

时间:2013-03-06 17:28:36

标签: java android networking localization geolocation

当我使用Android LocationManager并希望使用简单的代码行进行位置更新时:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, updateInterval, 0, locationListener);

在使用Android 4.1的Galaxy S3上一切正常,但在使用Android 2.3的Galaxy S Plus上,它会抛出IllegalArgumentException,并表示提供程序为NULL。 我可以通过两部手机发送短信并拨打其他号码。还有这段代码:

TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation gsmloc = (GsmCellLocation)tm.getCellLocation();
Log.d("XXX", "gsm cell id:" + String.valueOf(gsmloc.getCid()));

在两部手机上工作正常,返回正确的手机ID,我也可以获得GSM位置区号。

有人可以向我解释为什么第一行代码不适用于Galaxy S Plus吗?文档说该方法在API级别1中加入。

编辑:locationListener的代码:

LocationListener locationListener = new LocationListener() {
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            // set
        }
        @Override
        public void onProviderEnabled(String provider) {

        }
        @Override
        public void onProviderDisabled(String provider) {

        }
        @Override
        public void onLocationChanged(Location location) {
            CharSequence cs = "Latitude" + Double.toString(location.getLatitude()) + "\n"
                    + "Longtitude" + Double.toString(location.getLongitude());
            Vibrator vib = (Vibrator)getSystemService(Context.VIBRATOR_SERVICE);
            vib.vibrate(300);
            Toast.makeText(context, cs, Toast.LENGTH_LONG).show();
            dbHandler.addLocation(location);
            Log.d("XXX", cs.toString());
        }
    };

dbHandler是标准数据库的处理程序。

0 个答案:

没有答案