2011-12-13 128 views
0

我正在嘗試將GPS座標發送到短信。此代碼有效,但每次GPS更新位置時,都會嘗試發送新的文本消息。我無法弄清楚如何停止位置更新。這是我目前的...我意識到它可能不是最有效的方式來做到這一點。停止位置管理器更新

任何幫助,將不勝感激!

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

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

} 

public void GPSDisable() { 
    LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE); 
    LocationListener mlocListener = new MyLocationListener(); 
    mlocManager.removeUpdates(mlocListener); 
} 

public class MyLocationListener implements LocationListener { 

    @Override 

    public void onLocationChanged(Location loc) { 

     loc.getLatitude(); 
     loc.getLongitude(); 

     double latitude = loc.getLatitude(); 
     double longitude = loc.getLongitude(); 

     Intent smsIntent = new Intent(Intent.ACTION_VIEW); 
     smsIntent.setType("vnd.android-dir/mms-sms"); 
     smsIntent.putExtra("address", "5555555555"); 
     smsIntent.putExtra("sms_body", "Location:"+latitude+","+longitude); 
     GPSDisable(); 
     startActivity(smsIntent); 

    } 


    @Override 

    public void onStatusChanged(String provider, int status, Bundle extras) 

    { 

    } 


    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

} 

@Override 
public void onLocationChanged(Location location) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderDisabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onProviderEnabled(String provider) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    // TODO Auto-generated method stub 

} 

}

+0

,如果你停止了更新比你如何發送消息的位置。 LocationListener實現了位置更新事件,只要位置發生變化,onLocationChange()就會被調用 – Pratik

回答

0

我會設置兩個全局變量的緯度和經度。 這個變量會每onLocationChanged更新一次。你不能改變這種方式,但你可以從那裏發送短信。

我會在5秒後發送一個定時器的短信讓我們說。

new java.util.Timer().schedule( 
    new java.util.TimerTask() { 
     @Override 
     public void run() { 
      Intent smsIntent = new Intent(Intent.ACTION_VIEW); 
    smsIntent.setType("vnd.android-dir/mms-sms"); 
    smsIntent.putExtra("address", "5555555555"); 
    smsIntent.putExtra("sms_body", "Location:"+latitude+","+longitude); 

    startActivity(smsIntent); 
     } 
    }, 
    5000); 

而且你onlocation改變可能看起來像這樣

@Override 
public void onLocationChanged(Location loc) { 
    loc.getLatitude(); 
    loc.getLongitude(); 

    latitude = loc.getLatitude(); 
    longitude = loc.getLongitude(); 


} 
+0

實際上,我想要的是在建立位置修復後發送文本消息。我能夠通過遵循另一個教程在... http://www.hrupin.com/2011/04/android-gps-using-how-to-get-current-location-example 但其他答覆也很有幫助,特別是Dany使用計時器,這將幫助我進行類似的項目。謝謝。 – AndroidNoobie

0

首先,我建議你看看this article

話雖如此,一般來說,當你不需要更多更新時,你應該從位置管理器「取消訂閱」。通常情況下,只要活動處於「活動狀態」,當您需要更新時,您就可以在「onCreate」中訂閱位置更新並在「onDestroy」中取消訂閱。 更好的是當你的活動分別變得可見或隱藏時(分別通過「onResume」/「onPause」)來訂閱/取消訂閱。有關活動生命週期的詳細信息,請參閱here

現在,關於您的具體問題,目前尚不清楚您期望的行爲是什麼。每次地點變化時你想發送一條短信嗎?或者只有當一段時間過去了?

假設你需要發送短信,只要你的位置發生變化,但不會太頻繁,我會建議如下: 1.在「onResume」中註冊位置更新並在「onPause」中取消註冊。 2.保留一些局部變量,告訴你哪一次是你最近一次發送SMS消息,以及它的座標是什麼。這些變量可能會持續存在Activity生命週期事件(例如,當Activity被銷燬時,您應該「存儲」這些值,並在重新創建時將其恢復)。 3.每當有新的位置更新時,檢查它是否過早或過於接近(與以前的SMS相比),如果不發送另一條消息,則更新變量。

說了這些之後,請注意,只要您的活動可見,此功能就會起作用。如果你需要一個類似的功能,不需要你保持活動可見,我建議你使用BroadcastReceiver。