当我使用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是标准数据库的处理程序。