0

嗨下面是我檢查gps設置的代碼,它適用於Android 2.3.6及更低版本的所有設備,但不適用於ICS和Jellybean。當我檢查GPS設置啓用與否在設備上,啓動位置設置的意圖,並啓用GPS,回到我的應用程序,當我對GPS再次檢查仍顯示爲已禁用,並強制關閉應用程序位置源設置的意圖只適用於所有設備<4.0

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) 

回答

0

首先確保你沒有導入錯誤的設置庫。您應該使用android.provider.Settingsandroid support library。它在我的GS3上工作,它是v4.2。

也看着LogCat它看起來像你有兩個LocalSettings實例運行一些如何。確保您沒有在同時訪問手機設置時實例化兩個相同的活動。嚴格模式似乎不喜歡你有兩個實例打開時,它期待1,因此它殺死了你的程序。我知道這可能不會回答你的問題,但它可能會指向你正確的方向。

StrictMode$InstanceCountViolation: class LocationSettingsActivity; instances=2; limit=1

另請參見:

Android Activity Lifecycle

Android Strict Mode

StrictMode Instance Count Violation

0

解決,

我面臨這個親blem,因爲我試圖訪問互聯網上的主線程與版本< 2.3.6工作,但這不支持更高的版本,因爲他們在主線程異常生成網絡。爲此,始終建議您在從您的應用程序使用Internet時使用Asynctask。現在它對我來說非常合適。

相關問題