我使用网络提供商或GPS提供商用户选择为节目位置创建了一个应用程序 通过复选框。当用户选择不启用GPS工作正常时。但是当用户选择GPS启用后,第一次在近距离调试后进入家庭崩溃...在开放区域工作后重复...并且没有问题工作和家里。 会发生什么?我如何避免这个错误?需要使用不同的代码应用程序更改我的代码自动选择最佳提供程序?(非用户)这是我的代码....
// Get the location manager
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
// Define the criteria how to select the locatioin provider -> use
// default
if(gps_en==true){ //In previous activity with checkbox user choice preferences
provider = LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
// Initialize the location fields
if (location != null) {
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
} else {
latituteField.setText("Location not available");
longitudeField.setText("Location not available");
}
}
else{
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
// Initialize the location fields
if (location != null) {
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
} else {
latituteField.setText("Location not available");
longitudeField.setText("Location not available");
}
}
java.lang.NullPointerException
loc.LocTracker.onSensorChanged(LocTracker.java:769)
android.hardware.SensorManager$ListenerDelegate$1.handleMessage(SensorManager.java:580)
android.os.Handler.dispatchMessage(Handler.java:99)
android.os.Looper.loop(Looper.java:137)
android.app.ActivityThread.main(ActivityThread.java:4482)
java.lang.reflect.Method.invokeNative(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
dalvik.system.NativeStart.main(Native Method)
您能为我的代码提供更好的方法吗? 权限很好。我想要应用程序自动选择最佳提供商GPS或网络 首先是准确性标准。 从网络提供商开始,如果GPS提供商具有更好的准确性 用户在开放区域应用程序使用GPS提供商。 感谢。
答案 0 :(得分:0)
您是否已向清单文件添加了相应的权限?
我相信您需要以下其中一项GPS /位置代码:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
或
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
答案 1 :(得分:0)
你可能在UI线程上这样做你可能应该在后台线程上做一些关于这样做的研究。在UI线程上执行此类工作对于应用来说非常耗时。