我以前使用位置偵聽器編寫了一個應用程序,但沒有訪問真實設備。現在我有一個薑餅手機(2.3.3),正如預期的那樣,我的應用程序是一個電池殺手。requestLocationUpdates對薑餅設備沒有任何影響的參數
我開始檢查更新時間和最小距離參數對requestLocationUpdates的影響,因爲文檔說這些會影響電池消耗。
我想知道如何調整這些參數可能會影響電池的消耗,據我所知,GPS將不得不繼續,以便知道設備已移動的距離,只有通知實際過程應用程序會改變,而芯片繼續使用電源。
這篇文章Understanding the LocationListener in Android提出了一個可信的解釋,表明狀態將變爲「暫時不可用」,並且GPS圖標將從屏幕上消失一段時間,直到根據需要再次打開爲止。到指定的更新週期。
這不會發生在我的手機上 - 即使更新週期爲90秒,GPS圖標也會保持不變,並且我不會發生狀態變化,根據文章末尾的一些帖子,其他人發現一樣。
SO上的任何用戶在2.3.3上遇到同樣的事情嗎?
或者讓Android放棄管理GPS芯片,並期望用戶爲GPS編寫自己的電池管理制度?
對於信息我最少的代碼來演示此行爲如下所示:
public class GpsTimeOutTestActivity extends Activity implements
LocationListener {
private LocationManager mLocMgr;
private long mUpdatePeriod = 90000; // 90 seconds
private float mMinDistance = 10.0f;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected void onResume() {
super.onResume();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER,
mUpdatePeriod, mMinDistance, (LocationListener) this);
}
@Override
protected void onPause() {
mLocMgr.removeUpdates((LocationListener) this);
super.onPause();
}
@Override
public void onLocationChanged(Location loc) {
String str = null;
NumberFormat formatter = new DecimalFormat("##0.000");
String fLat = formatter.format(loc.getLatitude());
String fLon = formatter.format(loc.getLongitude());
String provider = loc.getProvider();
provider = (provider == null) ? "No provider" : provider;
str = "Locn chg " + provider + " Lat/Lon " + fLat + "/" + fLon;
if (loc.hasAccuracy())
str+= " accy " + loc.getAccuracy();
showSomeOutput(str);
}
@Override
public void onProviderDisabled(String provider) {
String str = "Prov disabled " + provider;
showSomeOutput(str);
}
@Override
public void onProviderEnabled(String provider) {
String str = "Prov enabled " + provider;
showSomeOutput(str);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
String str = "Status chg " + provider;
switch (status) {
case android.location.LocationProvider.OUT_OF_SERVICE:
str+= " OUT OF SERVICE";
break;
case android.location.LocationProvider.AVAILABLE:
str+= " AVAILABLE";
break;
case android.location.LocationProvider.TEMPORARILY_UNAVAILABLE:
str+= " TEMPORARILY UNAVAILABLE";
break;
default:
str+= " UNKNOWN STATUS";
}
showSomeOutput(str);
}
private void showSomeOutput(String str) {
Log.d("GPSTEST", str);
EditText et = (EditText) findViewById(R.id.editText1);
Editable existingText = et.getText();
existingText.append("\n" + str);
}
}
所有評論將受到歡迎。
感謝您的鏈接。這是有道理的,因爲我可以調和我看到的行爲與我給出的鏈接所報告的行爲。實質上,我想有些設備的司機會採取(或接受)該爭論的注意,其他人則不會。如果requestLocationUpdates(..)返回一個結果代碼讓你知道參數是否被忽略,那本來會很好。看起來我自己當時必須寫一些生態友好的制度。 – NickT