0
Как позвонить SensorManager изнутри -Call SensorManager от AsyncTask?
protected String doInBackground(String... params) {
.....
}
Я должен регистрировать данные acclerometer на файл. Это приложение работает в фоновом режиме. Поэтому я использую AsyncTask для его реализации. Мне нужно запустить и остановить запись, нажав кнопку (onClick). Любые указатели были бы полезны !!
Это обновление ... Файл написан пустым ... Как запустить регистрацию?
public class AsyncTaskActivity extends Activity implements SensorEventListener{
Button btn;
File root = Environment.getExternalStorageDirectory();
StringBuilder builder = new StringBuilder();
File gpxfile = new File(root, "TestFile.txt");
String fileText = "Data";
FileWriter gpxwriter;
BufferedWriter out;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new LongOperation(new AsyncTaskActivity()).execute("");
}
});
}
private class LongOperation extends AsyncTask<String, Void, String> {
private AsyncTaskActivity mActivity;
public LongOperation (AsyncTaskActivity activity) {
mActivity = activity;
}
@Override
protected String doInBackground(String... params) {
try {
gpxwriter = new FileWriter(gpxfile);
out = new BufferedWriter(gpxwriter);
if (root.canWrite()){
SensorManager manager = (SensorManager) mActivity.getSystemService(Context.SENSOR_SERVICE);
Sensor accelerometer = manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if(!manager.registerListener((SensorEventListener) this, accelerometer, SensorManager.SENSOR_DELAY_GAME)){
System.out.println("Could not start!!!!!!!!!");
}
out.write("Start");
out.newLine();
out.close();
}
} catch (IOException e) {
Log.e("doIn","Could not write file " + e.getMessage());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
TextView txt = (TextView) findViewById(R.id.output);
txt.setText("File written successfully!!!");
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
builder.setLength(0);
builder.append(event.values[0]+","+event.values[1]+","+event.values[2]);
try {
out.append(builder.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Rajdeep Спасибо за помощь. Я новичок в программировании, если это возможно, пожалуйста, помогите мне? – Fox
Если вы регистрируете только данные датчика в однократном упражнении, тогда «AsynTask» является разумным. Но если вы хотите постоянно получать данные датчика в фоновом режиме, то ** Service ** - лучший вариант в сочетании с «HandlerThread». 'AsynTask' не будет работать в этом случае. – ChuongPham