2012-07-30 30 views
1

我得到了一個強制關閉時,我試圖阻止我的GSP聽衆
下面的代碼Android:何時停止GPS偵聽器強制關閉?和</p> <pre><code>mlocManager.removeUpdates(mlocListener); mlocManager = null; </code></pre> <p>此:

LocationManager mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
LocationListener mlocListener = new MyLocationListener(); 
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
(long) update, 0, mlocListener); 

請幫助我,我不明白爲什麼它力關閉。

07-30 11:43:39.557: D/AndroidRuntime(1071): Shutting down VM 
07-30 11:43:39.557: W/dalvikvm(1071): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
07-30 11:43:39.575: E/AndroidRuntime(1071): FATAL EXCEPTION: main 
07-30 11:43:39.575: E/AndroidRuntime(1071): java.lang.NullPointerException 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at com.example.anotheractivity.Festivale$1.onClick(Festivale.java:109) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at android.view.View.performClick(View.java:2485) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at android.view.View$PerformClick.run(View.java:9080) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at android.os.Handler.handleCallback(Handler.java:587) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at android.os.Handler.dispatchMessage(Handler.java:92) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at android.os.Looper.loop(Looper.java:123) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
07-30 11:43:39.575: E/AndroidRuntime(1071):  at dalvik.system.NativeStart.main(Native Method) 
07-30 11:43:41.565: I/Process(1071): Sending signal. PID: 1071 SIG: 9 
+1

發表您的logcat的.. – 2012-07-30 11:41:15

+0

我怎麼發佈它? – David 2012-07-30 11:43:07

+0

複製粘貼:) – Mxyk 2012-07-30 11:43:39

回答

1

我爲此做了一項服務。獲取經度/緯度很容易使用它。

  1. 將此課程複製/粘貼到您的項目中。

package com.sample; import com.sample.globalconstant;

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

public class MyServiceGPS extends Service 
{ 
    private static final String TAG = "BOOMBOOMTESTGPS"; 
    private LocationManager mLocationManager = null; 
    private static final int LOCATION_INTERVAL = 1000; 
    private static final float LOCATION_DISTANCE = 10f; 

    private class LocationListener implements android.location.LocationListener{ 
     Location mLastLocation; 
     public LocationListener(String provider) 
     { 
      Log.e(TAG, "LocationListener " + provider); 
      mLastLocation = new Location(provider); 
     } 
     public void onLocationChanged(Location location) 
     { 
      Log.e(TAG, "onLocationChanged: " + location.getLatitude() +"....."+ location.getLongitude()); 
      globalconstant.lat = location.getLatitude(); 
      globalconstant.lon = location.getLongitude(); 
      Toast.makeText(getApplicationContext(), location.getLatitude() +"....."+ location.getLongitude(), 1000).show(); 
      mLastLocation.set(location); 
     } 
     public void onProviderDisabled(String provider) 
     { 
      Log.e(TAG, "onProviderDisabled: " + provider);   
     } 
     public void onProviderEnabled(String provider) 
     { 
      Log.e(TAG, "onProviderEnabled: " + provider); 
     } 
     public void onStatusChanged(String provider, int status, Bundle extras) 
     { 
      Log.e(TAG, "onStatusChanged: " + provider); 
     } 
    } 
    LocationListener[] mLocationListeners = new LocationListener[] { 
      new LocationListener(LocationManager.GPS_PROVIDER), 
      new LocationListener(LocationManager.NETWORK_PROVIDER) 
    }; 
    @Override 
    public IBinder onBind(Intent arg0) 
    { 
     return null; 
    } 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) 
    { 
     Log.e(TAG, "onStartCommand"); 
     super.onStartCommand(intent, flags, startId);  
     return START_STICKY; 
    } 
    @Override 
    public void onCreate() 
    { 
     Log.e(TAG, "onCreate"); 
     initializeLocationManager(); 
     try { 
      mLocationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE, 
        mLocationListeners[1]); 

     } catch (java.lang.SecurityException ex) { 
      Log.i(TAG, "fail to request location update, ignore", ex); 
     } catch (IllegalArgumentException ex) { 
      Log.d(TAG, "network provider does not exist, " + ex.getMessage()); 
     } 
     try { 
      mLocationManager.requestLocationUpdates(
        LocationManager.GPS_PROVIDER, LOCATION_INTERVAL, LOCATION_DISTANCE, 
        mLocationListeners[0]); 
     } catch (java.lang.SecurityException ex) { 
      Log.i(TAG, "fail to request location update, ignore", ex); 
     } catch (IllegalArgumentException ex) { 
      Log.d(TAG, "gps provider does not exist " + ex.getMessage()); 
     } 
    } 
    @Override 
    public void onDestroy() 
    { 
     Log.e(TAG, "onDestroy"); 
     super.onDestroy(); 
     if (mLocationManager != null) { 
      for (int i = 0; i < mLocationListeners.length; i++) { 
       try { 
        mLocationManager.removeUpdates(mLocationListeners[i]); 
       } catch (Exception ex) { 
        Log.i(TAG, "fail to remove location listners, ignore", ex); 
       } 
      } 
     } 
    } 
    private void initializeLocationManager() { 
     Log.e(TAG, "initializeLocationManager"); 
     if (mLocationManager == null) { 
      mLocationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE); 
     } 
    } 
} 
  1. 複製,當你想開始在活動驗證碼:

    startService(新意圖(這一點,MyServiceGPS.class));

  2. 創建一個類globalconstant:

    公共類globalconstant { 公共靜態雙緯度,經度; }

    ,當你想在你的項目當前的經緯度只在清單

    寫這globalconstant.lat ,globalconstant.lon

  3. 添加使用許可權

0

您需要將您請求的位置更新爲到locationManager.removeUpdates()方法相同的對象實施LocationListener的。

locationManager.removeUpdates(gpsl);