gpt4 book ai didi

Android加速度计将数据存储在文件中

转载 作者:太空狗 更新时间:2023-10-29 12:47:42 25 4
gpt4 key购买 nike

我正在编写一个应用程序,我必须在其中将数据存储在文件中以获取加速度计值。我怎么做 ?我只需要创建一个文件并将数据附加到该文件中。这是应用程序的流程:

  1. 用户点击开始按钮,它应该开始将传感器数据写入文件。
  2. 用户点击停止按钮,它应该停止将数据写入文件。

请帮忙..

编辑 1:根据 @iTech 编写的代码,但不附加数据。

import java.io.*;
import java.util.ArrayList;
import java.util.List;

import app.AccelLocData;

import com.google.android.gms.maps.*;
import com.google.android.gms.maps.GoogleMap.OnMapClickListener;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;

import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MapViewActivity extends Activity implements LocationListener,
SensorEventListener, OnClickListener {

GoogleMap googleMap;

private boolean started = false;
private ArrayList<AccelLocData> sensorData;
private SensorManager sensorManager;
private Button btnStart, btnStop;
private String provider;

File root, dir, sensorFile;
FileOutputStream fOut;
// ObjectOutputStream myOutWriter;
private Sensor mAccelerometer;
private FileWriter writer;

// private Button btnUpload;

@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

try {
root = android.os.Environment.getExternalStorageDirectory();
dir = new File(root.getAbsolutePath() + "/myapp");
dir.mkdirs();

File oldFile = new File(dir, "data.txt");

boolean deleted = oldFile.delete();
System.out.println("Delete status = " + deleted);
sensorFile = new File(dir, "data.txt");

sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = sensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);


btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);
btnStart.setOnClickListener(this);
btnStop.setOnClickListener(this);
btnStart.setEnabled(true);
btnStop.setEnabled(false);

int status = GooglePlayServicesUtil
.isGooglePlayServicesAvailable(getBaseContext());
if (status != ConnectionResult.SUCCESS) { // Google Play Services
// are
// not available

int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status,
this, requestCode);
dialog.show();

} else { // Google Play Services are available

// Getting reference to the SupportMapFragment of
// activity_main.xml
// SupportMapFragment supportMapFragment = (MapFragment)
// getFragmentManager().findFragmentById(R.id.map);

// Getting GoogleMap object from the fragment
googleMap = ((MapFragment) getFragmentManager()
.findFragmentById(R.id.map)).getMap();
// googleMap = supportMapFragment.getMap();

// can use for overlay on the map
List<Double> latList = new ArrayList<Double>();
latList.add(45.7309593);
latList.add(46.34);
latList.add(47.34);

List<Double> lonList = new ArrayList<Double>();
lonList.add(-122.6365384);
lonList.add(-123.6365384);
lonList.add(-124.6365384);

for (int i = 0; i < 3; i++) {
// LatLng latLng = new LatLng(45.7309593, -122.6365384);
LatLng latLng = new LatLng(latList.get(i).doubleValue(),
lonList.get(i).doubleValue());
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
googleMap
.addMarker(new MarkerOptions()
.position(latLng)
.title("My Spot")
.snippet("This is my spot!")
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)));
}
googleMap.setOnMapClickListener(new OnMapClickListener() {

@Override
public void onMapClick(LatLng latLng) {

// Creating a marker
MarkerOptions markerOptions = new MarkerOptions();

// Setting the position for the marker
markerOptions.position(latLng);

// Setting the title for the marker.
// This will be displayed on taping the marker
markerOptions.title(latLng.latitude + " : "
+ latLng.longitude);

// Clears the previously touched position
googleMap.clear();

// Animating to the touched position
googleMap.animateCamera(CameraUpdateFactory
.newLatLng(latLng));

// Placing a marker on the touched position
googleMap.addMarker(markerOptions);
}
});

// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager
.getLastKnownLocation(provider);

if (location != null) {
onLocationChanged(location);
}

locationManager
.requestLocationUpdates(provider, 20000, 0, this);
}
} catch (Exception e) {
e.printStackTrace();
}

}

public void onSensorChanged(SensorEvent event) {

if (started) {

double x = event.values[0];
double y = event.values[1];
double z = event.values[2];

long timestamp = System.currentTimeMillis();

LocationManager locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
criteria.setAccuracy(Criteria.ACCURACY_FINE);

provider = locManager.getBestProvider(criteria, true);
Location location = locManager.getLastKnownLocation(provider);

double latitude = 0;
double longitude = 0;
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
AccelLocData data = new AccelLocData(timestamp, x, y, z, latitude,
longitude);

System.out.println("data x:" + data.getX());

try {
writer.write(data.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

@Override
public void onLocationChanged(Location location) {

TextView tvLocation = (TextView) findViewById(R.id.tv_location);

// Getting latitude of the current location
double latitude = location.getLatitude();

// Getting longitude of the current location
double longitude = location.getLongitude();

// Creating a LatLng object for the current location
LatLng latLng = new LatLng(latitude, longitude);

// Showing the current location in Google Map
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));

// Zoom in the Google Map
googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
// System.out.println("Latitude:" + latitude + ", Longitude:" +
// longitude);

// Setting latitude and longitude in the TextView tv_location
// tvLocation.setText("Latitude:" + latitude + ", Longitude:" +
// longitude);

}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnStart:

btnStart.setEnabled(false);
btnStop.setEnabled(true);
System.out.println("cam on click of start");
started = true;

sensorManager.registerListener(this, mAccelerometer,
SensorManager.SENSOR_DELAY_FASTEST);
break;
case R.id.btnStop:
try {
btnStart.setEnabled(true);
btnStop.setEnabled(false);
// btnUpload.setEnabled(true);
started = false;

sensorManager.unregisterListener(this);

/*
* if(writer != null) { try { writer.close(); } catch
* (IOException e) { // TODO Auto-generated catch block
* e.printStackTrace(); } }
*/} catch (Exception e) {
e.printStackTrace();
}
break;
default:
break;
}

}

protected void onPause() {
super.onPause();

if (writer != null) {
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

protected void onResume() {
super.onResume();
try {
System.out.println("called onresume");
writer = new FileWriter(sensorFile, true);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

@Override
public void onProviderDisabled(String arg0) {
// 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

}

@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub

}

}

最佳答案

这是您入门的示例代码。

您可以查看 android 示例以了解如何从传感器读取数据,然后将其写入文件。

要运行此代码,您需要添加两个按钮并将它们的 onClick 设置为 onStartClickonStopClick。您还可以指定要在 SD 卡上的输出文件路径。

public class Main extends Activity implements SensorEventListener {

private SensorManager mSensorManager;
private Sensor mAccelerometer;
private FileWriter writer;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activiy_main);
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}

public void onStartClick(View view) {
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}

public void onStopClick(View view) {
mSensorManager.unregisterListener(this);
}
protected void onResume() {
super.onResume();
writer = new FileWriter("myfile.txt",true);
}

protected void onPause() {
super.onPause();

if(writer != null) {
writer.close();
}
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

@Override
public void onSensorChanged(SensorEvent event) {

float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
writer.write(x+","+y+","+z+"\n");

}
}

关于Android加速度计将数据存储在文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16268191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com