Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓传感器数据_Android_Android Sensors - Fatal编程技术网

Android 安卓传感器数据

Android 安卓传感器数据,android,android-sensors,Android,Android Sensors,我想从android智能手机的加速计传感器收集一些数据。我尝试了一些方法,最好的方法是使用服务类并在活动类中调用它,但是这个方法只给出了当时的三个轴数据。 我的目的是从秒到秒收集数据,我的意思是每次数据更改时,它都会记录在日志文件中,这样我就可以从秒到秒添加一些数据 有人能帮我吗?我很高兴能帮上忙。 非常感谢你的预付款 我已经实现了这是我的活动代码 package trying.gapickerwithservice; import android.app.Activity; import an

我想从android智能手机的加速计传感器收集一些数据。我尝试了一些方法,最好的方法是使用服务类并在活动类中调用它,但是这个方法只给出了当时的三个轴数据。 我的目的是从秒到秒收集数据,我的意思是每次数据更改时,它都会记录在日志文件中,这样我就可以从秒到秒添加一些数据

有人能帮我吗?我很高兴能帮上忙。 非常感谢你的预付款

我已经实现了这是我的活动代码

package trying.gapickerwithservice;
import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.renderscript.Type;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
public class GAPickerWithService extends Activity implements SensorEventListener
{
    Sensor mySens;
    String giro;
    EditText VALUE;
    SensorManager sensorManager;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gapickerwserv);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        Sensor mySens = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        sensorManager.registerListener(this, mySens, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.gapicker_with, menu);
        return true;    
    }   
    @Override
    public void onAccuracyChanged(Sensor arg0, int arg1) {
        // TODO Auto-generated method stub

    }   
    @Override
    public void onSensorChanged(SensorEvent event) {
        VALUE = (EditText) findViewById(R.id.value);
        float Roll = event.values[2];
        float Pitch = event.values[1];
        float Yaw = event.values[0];
        giro = Float.toString(Pitch)+Float.toString(Roll)+Float.toString(Yaw);
        VALUE.setText(giro);
        // TODO Auto-generated method stub  
    }       
    protected void onResume(){
        super.onResume();
        sensorManager.registerListener(this, mySens, SensorManager.SENSOR_DELAY_NORMAL);
    }

    protected void onPause(){
        super.onPause();
        sensorManager.unregisterListener(this);
    }
    }
这是我的服务代码

package trying.gapickerwithservice;
import android.app.Service;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.IBinder;
import android.util.Log;
import android.widget.EditText;

public class GAPickerGyroService extends Service implements SensorEventListener {
Sensor mySens;
static final String TAG = "GAPickerGyroService";
private SensorManager mySensMan;
String giro;
@Override
public IBinder onBind(Intent intent) {
    // TODO Auto-generated method stub
    return null;
}
public void onCreate ()
{
    mySensMan = (SensorManager) getSystemService(SENSOR_SERVICE);
    mySens = mySensMan.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
    mySensMan.registerListener(this, mySens, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
    // TODO Auto-generated method stub      
}
@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub

    float Roll = event.values[2];
    float Pitch = event.values[1];
    float Yaw = event.values[0];
    giro = Float.toString(Pitch)+Float.toString(Roll)+Float.toString(Yaw);
    Log.d(TAG, giro);
}       
}

我认为您需要在服务上实现侦听器。看看,你实现了这个界面,比如View.OnClickListener,那么我认为你很好

你的代码实际上是有效的。。。在这里检查我的代码

package giveup.none.sensor;

import android.app.Activity;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import java.util.Arrays;
import java.util.List;


public class MainActivity extends Activity implements SensorEventListener {
    SensorManager sensorManager;
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView)findViewById(R.id.tv);
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        List<Sensor> list = sensorManager.getSensorList(Sensor.TYPE_ALL);

        for (Sensor s : list) {
            Log.d("guang", s.getName());
        }

        List<Sensor> gyroList = sensorManager.getSensorList(Sensor.TYPE_GYROSCOPE);
        Sensor gyroSensor;
        if (!gyroList.isEmpty()) {
            gyroSensor = gyroList.get(0);
        } else {
            return;
        }

        sensorManager.registerListener(this, gyroSensor, SensorManager.SENSOR_DELAY_NORMAL);

    }

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
        tv.setText( Arrays.toString(sensorEvent.values));
        Log.d("guang","changed: "+ Arrays.toString(sensorEvent.values));
    }

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

    }
}
package giveup.none.sensor;
导入android.app.Activity;
导入android.content.Context;
导入android.hardware.Sensor;
导入android.hardware.SensorEvent;
导入android.hardware.SensorEventListener;
导入android.hardware.SensorManager;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.TextView;
导入java.util.array;
导入java.util.List;
公共类MainActivity扩展活动实现SensorEventListener{
传感器管理器传感器管理器;
文本视图电视;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv=(TextView)findviewbyd(R.id.tv);
sensorManager=(sensorManager)getSystemService(Context.SENSOR\u服务);
List List=sensorManager.getSensorList(Sensor.TYPE_ALL);
用于(传感器:列表){
Log.d(“guang”,s.getName());
}
List gyroList=传感器管理器.getSensorList(传感器.TYPE_陀螺仪);
陀螺传感器;
如果(!gyroList.isEmpty()){
陀螺仪传感器=陀螺仪列表。获取(0);
}否则{
返回;
}
sensorManager.registerListener(这是陀螺传感器,sensorManager.SENSOR\u延迟\u正常);
}
@凌驾
传感器更改时的公共无效(传感器事件传感器事件){
tv.setText(Arrays.toString(sensorEvent.values));
Log.d(“guang”,“changed:”+Arrays.toString(sensorEvent.values));
}
@凌驾
精度更改时的公共无效(传感器,int i){
}
}
===========================================xml=============================

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv"
        android:text="@string/hello_world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>


如果您试图获取这些sensorevent值对您的意义,请检查此项。

您可以使用
sensorevent
时间戳来每秒仅保留一个数据集。但是,最好收集每秒获得的所有数据,计算这些值的平均值,并将平均结果存储为该秒的数据集

实际存储数据的位置取决于您以后要对其执行的操作。您可以将其写入文件或数据库

编辑


实际上,每次我都要记录传感器数据(x、y和z值) 更改后的值将附加为一行数据)

为此,只需将您的
Log.d(TAG,giro)
替换为将
giro
添加到文件中的一行即可(关于如何实现这一点,有很多示例)

单击开始按钮

用onClickListener设置一个开始按钮,然后在那里执行
mySensMan.registerListener(这是,mySens,SensorManager.SENSOR\u DELAY\u NORMAL)

并用停止按钮停止记录

用onClickListener设置一个停止按钮,并在那里执行
mySensMan.unregisterListener(…)

之后,我希望文本字段中的数据显示为字符串

从文件中读取文本(同样,还有大量示例),并使用文本视图的
setText()
来显示它


当心-传感器可能会生成大量数据。

事实上,我想把它写在一个文件中,谢谢你的回答,但实际上我想更改每个传感器值中的数据,所以我会在一个文件中附加大量传感器数据。好吧,你说你想从一秒到另一秒获取数据。我不确定我是否完全理解您的要求。实际上,我希望通过单击开始按钮并使用停止按钮停止记录来记录传感器数据(x、y和z值,每次更改的值都将附加为一行数据),然后我希望数据以字符串形式显示在文本字段中。谢谢你试图理解我的意图。你在这段代码中使用我的服务吗?我是android新手,请解释清楚,所以在我想在日志中添加所有传感器数据并将其作为字符串显示在文本字段中之前,非常抱歉并感谢你。@DonDoom更新了我的代码,也许你已经可以给我打分了。。。我真的不能在这里给你一个android教程。不过,我会给你一些建议。。。你需要学习java。。。“用Java思考”对你很有好处,请阅读与字符串处理相关的章节。谢谢你的建议@shanwu,它在logcat中显示了一些错误,如NullPointerException,我在智能手机中模拟了它。当我试图将event.values数组转换为string并在textview上设置时,代码行中出现了NullPointerException。@DonDoom如果您不接受我的回答,我将不回答您的进一步问题~抱歉,伙计。我无法为您完成您的工作。我还想建议您另一种选择:尝试使用诸如Tranql、Atoma或Neura之类的SDK,这样可以节省您编写这些东西的时间。他们可以为您提取传感器数据,并为您提供有关用户的一些有价值的见解