Java 位置管理器在Android 4.0.2 Emulator中不工作
我正在应用程序中使用Java 位置管理器在Android 4.0.2 Emulator中不工作,java,android,gps,Java,Android,Gps,我正在应用程序中使用位置管理器进行GPS跟踪。在Android2.2,2.3.3模拟器和设备中使用时,应用程序返回apt位置。但奇怪的是,我在Emulator 4.0.2中测试了这个应用程序。它返回强制关闭错误为05-28 15:13:46.584:E/AndroidRuntime(4458):位于com.package.TestRun.registerLocationListeners(TestRun.java:191)inlogcat。我实现了以下代码: LocationManage
位置管理器
进行GPS跟踪。在Android
2.2,2.3.3模拟器和设备中使用时,应用程序返回apt位置。但奇怪的是,我在Emulator 4.0.2中测试了这个应用程序。它返回强制关闭错误为05-28 15:13:46.584:E/AndroidRuntime(4458):位于com.package.TestRun.registerLocationListeners(TestRun.java:191)
inlogcat。我实现了以下代码:
LocationManager lm;
LocationManager lmNet;
private void registerLocationListeners() {
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (myGPSLocationListener == null || mynetworkprovider == null)
{
createLocationListeners();
}
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER ,0,0,mynetworkprovider);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER ,60000,0,myGPSLocationListener);
}
private void createLocationListeners() {
mynetworkprovider = new LocationListener() {
public void onLocationChanged(Location argLocation) {
if (argLocation != null) {
gps[0] = argLocation.getLatitude();
gps[1] = argLocation.getLongitude();
//Toast.makeText( getApplicationContext(),"Network provider Lat =" + gps[0] + " Lon = " + gps[1] , Toast.LENGTH_SHORT).show();
}
//Toast.makeText( getApplicationContext(),"On Location change" , Toast.LENGTH_SHORT).show();
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
// Toast.makeText( getApplicationContext(),"Disable" , Toast.LENGTH_SHORT).show();
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
// Toast.makeText( getApplicationContext(),"enabled" , Toast.LENGTH_SHORT).show();
}
public void onStatusChanged(String provider,
int status, Bundle extras) {
// TODO Auto-generated method stub
//Toast.makeText( getApplicationContext(),"Status change" , Toast.LENGTH_SHORT).show();
}
};
myGPSLocationListener = new LocationListener() {
public void onLocationChanged(Location argLocation) {
if (argLocation != null) {
gps[0] = argLocation.getLatitude();
gps[1] = argLocation.getLongitude();
//Toast.makeText( getApplicationContext(),"GPS Lat =" + gps[0] + " Lon = " + gps[1] , Toast.LENGTH_SHORT).show();
}
//Toast.makeText( getApplicationContext(),"On Location change" , Toast.LENGTH_SHORT).show();
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
//Toast.makeText( getApplicationContext(),"Disable" , Toast.LENGTH_SHORT).show();
//launchGPS();
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
//Toast.makeText( getApplicationContext(),"enabled" , Toast.LENGTH_SHORT).show();
}
public void onStatusChanged(String provider,
int status, Bundle extras) {
// TODO Auto-generated method stub
//Toast.makeText( getApplicationContext(),"Status change" , Toast.LENGTH_SHORT).show();
}
};
}
更新:这是我的日志:
05-28 15:42:46.375: E/AndroidRuntime(5585): FATAL EXCEPTION: main
05-28 15:42:46.375: E/AndroidRuntime(5585): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.package/com.package.TestRun}: java.lang.IllegalArgumentException: provider=network
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.access$600(ActivityThread.java:122)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.os.Handler.dispatchMessage(Handler.java:99)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.os.Looper.loop(Looper.java:137)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.main(ActivityThread.java:4340)
05-28 15:42:46.375: E/AndroidRuntime(5585): at java.lang.reflect.Method.invokeNative(Native Method)
05-28 15:42:46.375: E/AndroidRuntime(5585): at java.lang.reflect.Method.invoke(Method.java:511)
05-28 15:42:46.375: E/AndroidRuntime(5585): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-28 15:42:46.375: E/AndroidRuntime(5585): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-28 15:42:46.375: E/AndroidRuntime(5585): at dalvik.system.NativeStart.main(Native Method)
05-28 15:42:46.375: E/AndroidRuntime(5585): Caused by: java.lang.IllegalArgumentException: provider=network
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.os.Parcel.readException(Parcel.java:1331)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.os.Parcel.readException(Parcel.java:1281)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:646)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.location.LocationManager._requestLocationUpdates(LocationManager.java:582)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.location.LocationManager.requestLocationUpdates(LocationManager.java:446)
05-28 15:42:46.375: E/AndroidRuntime(5585): at com.package.TestRun.registerLocationListeners(TestRun.java:191)
05-28 15:42:46.375: E/AndroidRuntime(5585): at com.package.TestRun.onCreate(TestRun.java:135)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.Activity.performCreate(Activity.java:4465)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-28 15:42:46.375: E/AndroidRuntime(5585): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
Android 4.0的位置管理器API是否有更新?如果有人遇到同样的问题,请共享视图/解决方案链接。这是一个问题。看
它说:
不要使用直接提供程序字符串,因为不能保证它在运行时存在
仅使用从LocationManager
获得的提供程序
,如下所示:
LocationManager locationManager = (LocationManager)context.getSystemService( Context.LOCATION_SERVICE );
Criteria criteria = new Criteria();
criteria.setAccuracy( Criteria.ACCURACY_COARSE );
String provider = locationManager.getBestProvider( criteria, true );
if ( provider == null ) {
Log.e( TAG, "No location provider found!" );
return;
}
lastLocation = locationManager.getLastKnownLocation(provider);
或
locationmanager
中另一个有用的方法是locationmanager.getAllProviders()
您是否向模拟器添加了GPS支持?
/**
* Returns a list of the names of all known location providers. All
* providers are returned, including ones that are not permitted to be
* accessed by the calling activity or are currently disabled.
*
* @return list of Strings containing names of the providers
*/