Android收集和发送数据

时间:2013-04-27 01:06:58

标签: java android mysql accelerometer

  1. 我正在开发应用程序,我需要收集加速度计和位置数据&通过Web服务器发送它们。我必须收集有关传感器更改事件的数据。现在我正在尝试收集它,当我点击开始按钮,但不知何故我没有看到数据存储在我的文件中。任何人都可以帮我这个吗?

  2. 我必须将此数据发送到MySQL数据库进行处理(在Web服务器上)。如何将数据发送到服务器?

  3. 以下是我现在尝试的内容:

     package myapp;
    
        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;
    
        // private Button btnUpload;
    
        @SuppressLint("NewApi")
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
            sensorData = new ArrayList<AccelLocData>();
            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
    
    
                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);
            }
    
        }
    
        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("Accel Data:" + data.toString());
        //       System.out.println("Latitude:" + latitude);
    //           System.out.println("Longitude:" + longitude);
    
                sensorData.add(data);
    
            }
        }
    
        @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 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
    
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.btnStart:
                btnStart.setEnabled(false);
                btnStop.setEnabled(true);
                // btnUpload.setEnabled(false);
            //  sensorData = new ArrayList<AccelLocData>();
                // save prev data if available
                started = true;
                try {
                    File root = android.os.Environment
                            .getExternalStorageDirectory();
                    File dir = new File(root.getAbsolutePath() + "/myapp");
                    dir.mkdirs();
                    File sensorFile = new File(dir, "acc.txt");
    
                    // sensorFile.createNewFile();
                    FileOutputStream fOut = new FileOutputStream(sensorFile);
                    ObjectOutputStream myOutWriter = new ObjectOutputStream(fOut);
                    System.out.println("Sensor data size:"+sensorData.size());
                    for(int i=0;i<sensorData.size();i++){
                        System.out.println("Sensor Data:" + sensorData.get(i).getX());  
                    }
    
                    myOutWriter.writeObject(sensorData);
                    myOutWriter.close();
                    fOut.close();
                } catch (Exception e) {
    
                }
                Sensor accel = sensorManager
                        .getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
                sensorManager.registerListener(this, accel,
                        SensorManager.SENSOR_DELAY_FASTEST);
                break;
            case R.id.btnStop:
                btnStart.setEnabled(true);
                btnStop.setEnabled(false);
                // btnUpload.setEnabled(true);
                started = false;
                sensorManager.unregisterListener(this);
    
                // don't need chart
                // openChart();
    
                // show data in chart
                break;
            // case R.id.btnUpload:
    
            // break;
            default:
                break;
            }
    
        }
    
    }
    

1 个答案:

答案 0 :(得分:1)

在您的活动中将此信息放入您的“开始”按钮的OnClick中:

startService(new Intent(this, BackgroundService.class));

这是你的停止按钮:

stopService(new Intent(this, BackgroundService.class));

创建一个新的类,例如:

public class BackgroundService extends Service implements LocationListener,
    SensorEventListener{


//Hint: there are some methods you need to implement which I forgot to mention but eclipse will add them for you

@Override
public void onCreate() {



    //enable networking, look into this: http://www.vogella.com/blog/2012/02/22/android-strictmode-networkonmainthreadexception/

    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    //do your data collecting-methods and connect to your webserver


}

@Override
public void onDestroy() {
       //unregister your sensor listener

}

}

在这种方法中,我得到了这个:

    @Override
    public void onSensorChanged(SensorEvent event) {

        sendValuesToYourServer(Float.toString(event.values[0]) + "," + Float.toString(event.values[1]) +","+ Float.toString(event.values[2])); 


    }