我开始开发一个记录视频的Android应用程序,我需要每1分钟收集一次GPS位置
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create an instance of Camera
mCamera = getCameraInstance();
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(id.camera_preview);
preview.addView(mPreview);
private boolean isRecording = false;
// Add a listener to the Capture button
Button captureButton = (Button) findViewById(id.button_capture);
captureButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isRecording) {
// stop recording and release camera
mMediaRecorder.stop(); // stop the recording
releaseMediaRecorder(); // release the MediaRecorder object
mCamera.lock(); // take camera access back from MediaRecorder
// inform the user that recording has stopped
setCaptureButtonText("Capture");
isRecording = false;
} else {
// initialize video camera
if (prepareVideoRecorder()) {
// Camera is available and unlocked, MediaRecorder is prepared,
// now you can start recording
mMediaRecorder.start();
// get the gps data
GpsDataFile.getOutPutDataFile(DATA_TYPE_GPS);
mTimer = new Timer;
mTimer.schedule(new setGpsDataToFile(),0,1000)
// inform the user that recording has started
setCaptureButtonText("Stop");
isRecording = true;
} else {
// prepare didn't work, release the camera
releaseMediaRecorder();
// inform user
}
}
}
}
Private Class setGpsDataToFile extends TimerTask {
@Override
public void run {
// getLocation contains another timer task
myLocation.getLocation(getApplicationContext(), mLocationResult); // I got the error here
// write the gps data in a file
gpsDataCapture(GpsDataFile, mLatitude, mLongitude);
}
}
我收到了错误FATAL EXCEPTION: Timer-1: can't create handler inside thread that has not called looper.prepare()
,我认为问题在于我在另一个内部创建了一个处理程序。
那么还有另一种方法可以获得相同的结果吗?
答案 0 :(得分:19)
你的错误基本上是说你试图在非UIThread中做某事。要在UI线程中运行它,只需使用:
runOnUiThread(new Runnable() {
public void run() {
// do your work right here
}
});