package com.mobvoi.ticwear.mobvoiapidemo;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.PowerManager;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.io.RandomAccessFile;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class PhoneActivity extends AppCompatActivity implements SensorEventListener, View.OnClickListener {
private SensorManager sm;
private Button mWriteButton,mStopButton;
private TextView mTextView;
private EditText etTxt1,etTxt2,etTxt3,etTxt4,etTxt5,etTxt6;
private String messages,message1,message2,message3,message4,message5,message6;
private Boolean doWrite = false;
private int count=0;
private String strcount;
private PowerManager.WakeLock wakeLock = null;//电源服务,保持屏幕常亮
//WakeLock是android系统中一种锁的机制,只要有进程持有这个锁,系统就无法进入休眠状态。
float[] magneticValues=new float[3];
float[] gravityValues=new float[3];
float[] accelerometerValues = new float[3];
private float [] Rx=new float[9];
private String Rstring;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone);//设置该activity显示
mTextView = (TextView)findViewById(R.id.textView);
etTxt1=(EditText) findViewById(R.id.txt1);
etTxt2=(EditText) findViewById(R.id.txt2);
etTxt3=(EditText) findViewById(R.id.txt3);
etTxt4=(EditText) findViewById(R.id.txt4);
etTxt5=(EditText) findViewById(R.id.txt5);
etTxt6=(EditText) findViewById(R.id.txt6);
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);//创建一个SensorManager来获取系统的传感器服务
mWriteButton = (Button) findViewById(R.id.Button_Write);
mWriteButton.setOnClickListener(this);
mStopButton = (Button) findViewById(R.id.Button_Stop);
mStopButton.setOnClickListener(this);
Timer timer = new Timer(true);
TimerTask task = new TimerTask() {
public void run() {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SS");
String str = sdf.format(new Date());
if (doWrite) {
Rstring=Rx[0]+" "+Rx[1]+" "+Rx[2]+" "+Rx[3]+" "+Rx[4]+" "+Rx[5]+" "+Rx[6]+" "+Rx[7]+" "+Rx[8];
messages=str+" "+message1+" "+message2+" "+message3+" "+message4+" "+message5+" "+message6+" "+Rstring+"\n";
writeFileSdcard(messages);
}
}
};
timer.schedule(task, 0, 20);//第二个参数的意思是,用户调用 schedule() 方法后,要等待这么长的时间才可以第一次执行run() 方法。
//第三个参数的意思就是,第一次调用之后,从第二次开始每隔多长的时间调用一次run()方法。单位:毫秒
}
@Override
protected void onResume() {
acquireWakeLock(this);//将获得到的锁使用acquire()方法来保持唤醒
super.onResume();
// 注册传感器
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), 20000);
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 20000);
sm.registerListener(this,sm.getDefaultSensor(Sensor.TYPE_GRAVITY), 20000);
sm.registerListener(this,sm.getDefaultSensor(Sensor.TYPE_GYROSCOPE), 20000);
sm.registerListener(this,sm.getDefaultSensor(Sensor.TYPE_ORIENTATION), 20000);
sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), 20000);
}
//将获得到的锁使用acquire()方法来保持唤醒
public void acquireWakeLock(Context context) {
if (wakeLock == null) {
PowerManager powerManager = (PowerManager)(context.getSystemService(Context.POWER_SERVICE));//获取PowerManager实例
//SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");//生成WakeLock实例
wakeLock.acquire();
}
}
//使用release()方法来释放掉该锁
public void releaseWakeLock() {
if(wakeLock != null && wakeLock.isHeld()){
wakeLock.release();
wakeLock = null;
}
}
@Override
public void onSensorChanged(SensorEvent event) {
DecimalFormat df = new DecimalFormat("###0.000000");
int sensorType = event.sensor.getType();
switch (sensorType) {
case Sensor.TYPE_ACCELEROMETER:
float X1=event.values[0];
float Y1=event.values[1];
float Z1=event.values[2];
message1 = df.format(X1) + " " + df.format(Y1) + " " + df.format(Z1);
//****************修改处********************************************
accelerometerValues = event.values.clone();
SensorManager.getRotationMatrix(Rx, null, accelerometerValues, magneticValues);
etTxt1.setText(message1);
break;
case Sensor.TYPE_LINEAR_ACCELERATION:
float X2=event.values[0];
float Y2=event.values[1];
float Z2=event.values[2];
message2 = df.format(X2) + " " + df.format(Y2) + " " + df.format(Z2);
etTxt2.setText(message2);
break;
case Sensor.TYPE_GRAVITY:
float X3=event.values[0];
float Y3=event.values[1];
float Z3=event.values[2];
message3=df.format(X3) + " " + df.format(Y3) + " " + df.format(Z3);
//****************修改处********************************************
//gravityValues=event.values.clone();
//SensorManager.getRotationMatrix(Rx, null, gravityValues, magneticValues);
//****************修改处********************************************
etTxt3.setText(message3);
break;
case Sensor.TYPE_GYROSCOPE:
float X4=event.values[0];
float Y4=event.values[1];
float Z4=event.values[2];
message4=df.format(X4) + " " + df.format(Y4) + " " + df.format(Z4);
etTxt4.setText(message4);
break;
case Sensor.TYPE_ORIENTATION:
float X5=event.values[0];
float Y5=event.values[1];
float Z5=event.values[2];
message5=df.format(X5) + " " + df.format(Y5) + " " + df.format(Z5);
etTxt5.setText(message5);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
float X6=event.values[0];
float Y6=event.values[1];
float Z6=event.values[2];
message6=df.format(X6) + " " + df.format(Y6) + " " + df.format(Z6);
magneticValues=event.values.clone();
SensorManager.getRotationMatrix(Rx, null, accelerometerValues, magneticValues);
etTxt6.setText(message6);
break;
}
}
/**
* 信息写入手机SD卡
* @param message 信息
*/
private void writeFileSdcard(String message) {
try {
// 如果手机插入了SD卡,而且应用程序具有访问SD的权限
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
// 获取SD卡的目录
File sdCardDir = Environment.getExternalStorageDirectory();
File targitFile = new File(sdCardDir.getCanonicalPath() + "/PhoneData"+strcount+".txt");
// 以指定文件创建 RandomAccessFile对象
RandomAccessFile raf = new RandomAccessFile(targitFile, "rw");
// 将文件记录指针移动到最后
raf.seek(targitFile.length());
// 输出文件内容
raf.write(message.getBytes());
// 关闭RandomAccessFile
raf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
@Override
protected void onPause() {
releaseWakeLock();
super.onPause();
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.Button_Write) {
doWrite = true;
count++;
mTextView.setText("Writing...PhoneData"+count);
SimpleDateFormat sdft = new SimpleDateFormat("yyyyMMdd-HHmmss");
strcount = sdft.format(new Date());
}
if (v.getId() == R.id.Button_Stop) {
doWrite = false;
mTextView.setText("PhoneData"+count+" 状态:stop");
}
}
}
PhoneActivity
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。