首先抱歉轉貼問題,因爲我之前沒有發佈我的代碼,現在只寫了一些行,我沒有解釋。所以再次用代碼發佈問題。 我已經編寫了一個代碼,用於記錄加速度數據並將數據保存在csv文件中。我需要做的是我必須在後臺運行加速器作爲服務。所以,我完成了編寫代碼 1.運行加速度計, 2.顯示文本框中的數據, 3.將數據寫入csv文件。 剩下的事情就是讓它成爲一項服務。我米給下面的代碼(Howfar我做了)Android加速度計服務
@SuppressWarnings("deprecation")
public class AccelerometerVaue extends Activity implements SensorListener {
SensorManager sm = null;
TextView xacc= null;
TextView yacc = null;
TextView zacc = null;
TextView xorient = null;
TextView yorient = null;
TextView zorient = null;
TextView text = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
setContentView(R.layout.activity_main);
xacc = (TextView) findViewById(R.id.xvalue);
yacc = (TextView) findViewById(R.id.yvalue);
zacc = (TextView) findViewById(R.id.zvalue);
xorient = (TextView) findViewById(R.id.xvalues);
yorient = (TextView) findViewById(R.id.yvalues);
zorient = (TextView) findViewById(R.id.zvalues);
}
@SuppressLint("SdCardPath")
public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
if (sensor == SensorManager.SENSOR_ORIENTATION) {
xorient.setText("Orientation X: " + values[0]);
yorient.setText("Orientation Y: " + values[1]);
zorient.setText("Orientation Z: " + values[2]);
}
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
// Time now = new Time();
// now.setToNow();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String currentDateandTime = sdf.format(new Date());
Log.d("Time",currentDateandTime);
xacc.setText("Accel X: " + values[0]);
yacc.setText("Accel Y: " + values[1]);
zacc.setText("Accel Z: " + values[2]);
String res=String.valueOf(currentDateandTime+"#"+values[0])+"#"+String.valueOf(values[1])+"#"+String.valueOf(values[2]);
Log.d("test", res);
CSVWriter writer = null;
try
{
//Log.d("check","pasla");
//Environment.getExternalStorageDirectory().getPath();
writer = new CSVWriter(new FileWriter("/sdcard/AccelData.csv",true), ',');
String[] entries = res.split("#"); // array of your values
writer.writeNext(entries);
//FileWriter
writer.close();
}
catch (IOException e)
{
//error
}
}
}
}
public void onAccuracyChanged(int sensor, int accuracy) {
String tag = null;
Log.e(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
}
@Override
protected void onResume() {
super.onResume();
sm.registerListener(this,
SensorManager.SENSOR_ORIENTATION |
SensorManager.SENSOR_ACCELEROMETER,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onStop() {
sm.unregisterListener(this);
super.onStop();
}
}
所以,現在我需要運行一個後臺服務,將保持在後臺以加速度計數據,並保持保存成csv文件。我怎樣才能做到這一點?我想再問一次,是否可以在一段時間後採取acc數據?假設我在這裏連續記錄所有的數據,這是巨大的,並且電池消耗將是巨大的。所以,我需要以這樣的方式實現服務,以便它能夠在後臺運行15分鐘,並在每分鐘開始時將數據記錄10秒鐘。
AlarmManager用於調度,但首先我想爲我的代碼啓動服務實現。假設我開始無限期的服務,我會稍後手動停止服務。怎麼做?沒有找到正確的方法來做到這一點 – MetaRs
我相信如果您有一個負責調度/取消「AlarmManager」中的服務的Activity,並且保留對用於在應用程序中執行調度的同一個PendingIntent的引用例如作爲全局靜態變量)。當您打算取消預先安排的服務時,您需要提供對「AlarmManager」的引用。 – Piovezan