嗨,下面是我用于检查 gps 设置的代码,它在所有具有 android 2.3.6 及更低版本的设备上都能完美运行,但不适用于 ICS 和 Jellybean。当我检查设备上是否启用 GPS 设置并启动位置设置意图并启用 GPS 并返回我的应用程序时,当我再次检查 GPS 时它仍然显示禁用并强制关闭应用程序
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
// if (!isGPSEnabled && !isNetworkEnabled)
if (!isGPSEnabled && !isNetworkEnabled)
{
// no network provider is enabled
} else {
this.canGetLocation = true;
// First get location from Network Provider
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
/**
* Function to get latitude
* */
public double getLatitude(){
if(location != null){
latitude = location.getLatitude();
}
// return latitude
return latitude;
}
/**
* Function to get longitude
* */
public double getLongitude(){
if(location != null){
longitude = location.getLongitude();
}
// return longitude
return longitude;
}
public boolean canGetLocation() {
return this.canGetLocation;
}
/**
* Function to show settings alert dialog
* */
public void showSettingsAlert(){
AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
// Setting Dialog Title
alertDialog.setTitle("GPS is settings");
// Setting Dialog Message
alertDialog.setMessage("GPS is not enabled. Do you want to go to
settings menu?");
// Setting Icon to Dialog
//alertDialog.setIcon(R.drawable.delete);
// On pressing Settings button
alertDialog.setPositiveButton("Settings", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Intent intent = new
Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
}
});
// on pressing cancel button
alertDialog.setNegativeButton("Cancel", new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
// Showing Alert Message
alertDialog.show();
}
这就是我在 logcat 中得到的
01-09 14:53:14.190: E/StrictMode(555): class com.android.settings.Settings$LocationSettingsActivity; instances=2; limit=1
01-09 14:53:14.190: E/StrictMode(555): android.os.StrictMode$InstanceCountViolation: class com.android.settings.Settings$LocationSettingsActivity; instances=2; limit=1
01-09 14:53:14.190: E/StrictMode(555): at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)
01-09 14:53:14.637: E/StrictMode(555): A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks.
01-09 14:53:14.637: E/StrictMode(555): java.lang.Throwable: Explicit termination method 'close' not called
01-09 14:53:14.637: E/StrictMode(555): at dalvik.system.CloseGuard.open(CloseGuard.java:184)
01-09 14:53:14.637: E/StrictMode(555): at android.content.ContentResolver$CursorWrapperInner.<init>(ContentResolver.java:1581)
01-09 14:53:14.637: E/StrictMode(555): at android.content.ContentResolver.query(ContentResolver.java:320)
01-09 14:53:14.637: E/StrictMode(555): at com.android.settings.LocationSettings.onStart(LocationSettings.java:62)
01-09 14:53:14.637: E/StrictMode(555): at android.app.Fragment.performStart(Fragment.java:1493)
01-09 14:53:14.637: E/StrictMode(555): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:829)
01-09 14:53:14.637: E/StrictMode(555): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:998)
01-09 14:53:14.637: E/StrictMode(555): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:981)
01-09 14:53:14.637: E/StrictMode(555): at android.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1700)
01-09 14:53:14.637: E/StrictMode(555): at android.app.Activity.performStart(Activity.java:4481)
01-09 14:53:14.637: E/StrictMode(555): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1928)
01-09 14:53:14.637: E/StrictMode(555): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
01-09 14:53:14.637: E/StrictMode(555): at android.app.ActivityThread.access$600(ActivityThread.java:122)
01-09 14:53:14.637: E/StrictMode(555): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
01-09 14:53:14.637: E/StrictMode(555): at android.os.Handler.dispatchMessage(Handler.java:99)
01-09 14:53:14.637: E/StrictMode(555): at android.os.Looper.loop(Looper.java:137)
01-09 14:53:14.637: E/StrictMode(555): at android.app.ActivityThread.main(ActivityThread.java:4340)
01-09 14:53:14.637: E/StrictMode(555): at java.lang.reflect.Method.invokeNative(Native Method)
01-09 14:53:14.637: E/StrictMode(555): at java.lang.reflect.Method.invoke(Method.java:511)
01-09 14:53:14.637: E/StrictMode(555): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-09 14:53:14.637: E/StrictMode(555): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-09 14:53:14.637: E/StrictMode(555): at dalvik.system.NativeStart.main(Native Method)
01-09 14:53:14.647: W/CursorWrapperInner(555): Cursor finalized without prior close()
01-09 14:53:14.677: E/System(555): Uncaught exception thrown by finalizer
01-09 14:53:14.877: E/System(555): java.lang.IllegalStateException: Binder has been finalized!
01-09 14:53:14.877: E/System(555): at android.os.BinderProxy.transact(Native Method)
01-09 14:53:14.877: E/System(555): at android.database.BulkCursorProxy.close(BulkCursorNative.java:288)
01-09 14:53:14.877: E/System(555): at android.database.BulkCursorToCursorAdaptor.close(BulkCursorToCursorAdaptor.java:133)
01-09 14:53:14.877: E/System(555): at android.database.CursorWrapper.close(CursorWrapper.java:45)
01-09 14:53:14.877: E/System(555): at android.content.ContentResolver$CursorWrapperInner.close(ContentResolver.java:1586)
01-09 14:53:14.877: E/System(555): at android.content.ContentQueryMap.close(ContentQueryMap.java:173)
01-09 14:53:14.877: E/System(555): at android.content.ContentQueryMap.finalize(ContentQueryMap.java:179)
01-09 14:53:14.877: E/System(555): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:182)
01-09 14:53:14.877: E/System(555): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168)
01-09 14:53:14.877: E/System(555): at java.lang.Thread.run(Thread.java:856)