实例介绍
【实例简介】
Singal Acquisition android传感器(线性加速度、陀螺仪、磁场)信号实时获取,实时监测指定wifi、蓝牙信号强度
【实例截图】
【核心代码】
package com.example.wenjieli.singalacquisition; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.bluetooth.BluetoothDevice; import android.widget.Toast; import org.w3c.dom.Text; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import android.bluetooth.*; public class MainActivity extends AppCompatActivity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mAcc;//加速度计 private Sensor mGyr;//陀螺仪 private Sensor mMag;//磁场 private float[] accValues = new float[3], gyrValues = new float[3], magValues = new float[3];//存放传感器获取的值 private TextView acctv, gyrtv, magtv, wifitv, bttv; private Button save5; private int writeSQL = 0;//写入数据库开关:0否1是 private File file = new File("//sdcard/mydb.db"); private SQLiteDatabase db; private long timeToSave;//记录开始写入数据的时间,作为数据库表的名称 private WifiManager wifiManager; private Map<String, Integer> map = new HashMap<>();//存放要显示的wifi列表 private List<String> dbList; private ArrayList<String> checkedWifiList;//传入的选中wifi列表 private ArrayList<String> checkedBtList;//传入的选中蓝牙列表 private BluetoothAdapter mBluetoothAdapter; private Set<BluetoothDevice> btDevices = new HashSet<>(); private Map<String, Short> btMap = new HashMap<>();//存放要显示的蓝牙列表 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); db = SQLiteDatabase.openOrCreateDatabase(file, null);//打开或创建数据库 mSensorManager = (SensorManager) getSystemService(this.SENSOR_SERVICE); mAcc = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);//加速度计 mGyr = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);//陀螺仪 mMag = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);//磁场 save5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (writeSQL == 0) { writeSQL = 1; timeToSave = System.currentTimeMillis(); dbList = new ArrayList<String>(); } else { //loading... writeSQL = 0; db.execSQL("CREATE TABLE t" timeToSave " (time INT, acc1 REAL, acc2 REAL, acc3 REAL, gyr1 REAL, gyr2 REAL, gyr3 REAL, mag1 REAL, mag2 REAL, mag3 REAL, wifi TEXT, bluetooth TEXT)"); save5.setClickable(false); new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < dbList.size(); i ) { db.execSQL(dbList.get(i)); //Log.i("AAA",dbList.get(i).toString()); } Message msg1 = new Message(); msg1.what = 1; mHandler.sendMessage(msg1); } }).start(); save5.setText("正在写入..."); //loading vanish } } }); wifiThread.start(); btThread.start(); } public void initView() { acctv = (TextView) findViewById(R.id.acc); gyrtv = (TextView) findViewById(R.id.gyr); magtv = (TextView) findViewById(R.id.mag); save5 = (Button) findViewById(R.id.save5); wifitv = (TextView) findViewById(R.id.wifi); bttv = (TextView) findViewById(R.id.bluetooth); checkedWifiList = getIntent().getStringArrayListExtra("wifi"); checkedBtList = getIntent().getStringArrayListExtra("bluetooth"); //bttv.setText(checkedBtList.toString() ""); wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); } @Override public void onSensorChanged(SensorEvent sensorEvent) { switch (sensorEvent.sensor.getType()) { case Sensor.TYPE_LINEAR_ACCELERATION://加速度计 accValues[0] = sensorEvent.values[0]; accValues[1] = sensorEvent.values[1]; accValues[2] = sensorEvent.values[2]; acctv.setText("加速度计:\n" accValues[0] "\n" accValues[1] "\n" accValues[2] "\n"); if (writeSQL == 1) { save5.setText((int) ((System.currentTimeMillis() - timeToSave) / 1000) "s"); dbList.add("INSERT INTO t" timeToSave " VALUES(" System.currentTimeMillis() "," accValues[0] "," accValues[1] "," accValues[2] "," gyrValues[0] "," gyrValues[1] "," gyrValues[2] "," magValues[0] "," magValues[1] "," magValues[2] ",'" map.toString() "','" btMap.toString() "')"); //Log.i("BBB","INSERT INTO t" timeToSave " VALUES(" System.currentTimeMillis() "," accValues[0] "," accValues[1] "," accValues[2] "," gyrValues[0] "," gyrValues[1] "," gyrValues[2] "," magValues[0] "," magValues[1] "," magValues[2] ",'" map.toString() "','" btMap.toString() "')"); } break; case Sensor.TYPE_GYROSCOPE://陀螺仪 gyrValues[0] = sensorEvent.values[0]; gyrValues[1] = sensorEvent.values[1]; gyrValues[2] = sensorEvent.values[2]; gyrtv.setText("陀螺仪:\n" gyrValues[0] "\n" gyrValues[1] "\n" gyrValues[2] "\n"); break; case Sensor.TYPE_MAGNETIC_FIELD://磁场 magValues[0] = sensorEvent.values[0]; magValues[1] = sensorEvent.values[1]; magValues[2] = sensorEvent.values[2]; magtv.setText("磁场:\n" magValues[0] "\n" magValues[1] "\n" magValues[2] "\n"); break; default: break; } } //扫描wifi Thread wifiThread = new Thread(new Runnable() { @Override public void run() { synchronized (this) { while (true) { //map.clear(); wifiManager.startScan(); ArrayList<ScanResult> list = (ArrayList<ScanResult>) wifiManager.getScanResults(); for (int i = 0; i < list.size(); i ) { for (int j = 0; j < checkedWifiList.size(); j ) { if (list.get(i).SSID.equals(checkedWifiList.get(j))) { map.put(list.get(i).SSID, list.get(i).level); } } } Message msg = new Message(); msg.what = 0; mHandler.sendMessage(msg); } } } }); //扫描蓝牙 Thread btThread = new Thread(new Runnable() { @Override public void run() { synchronized (this) { while (true) { if (mBluetoothAdapter.isDiscovering()) { mBluetoothAdapter.cancelDiscovery(); } mBluetoothAdapter.startDiscovery(); } } } }); private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(BluetoothDevice.ACTION_FOUND)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); btDevices.add(device); short rssi = intent.getExtras().getShort(BluetoothDevice.EXTRA_RSSI); for(int i=0;i<checkedBtList.size();i ){ if(device.getName().equals(checkedBtList.get(i))){ btMap.put(device.getName() "", rssi); } } Message msg = new Message(); msg.what = 2; mHandler.sendMessage(msg); } } }; Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: wifitv.setText("WIFI:\n" map.toString() "\n"); break; case 1: save5.setText("保存数据"); save5.setClickable(true); break; case 2: bttv.setText("Bluetooth:\n" btMap.toString()); break; } } }; //定时任务 private Handler timerHandler = new Handler(); private Runnable task = new Runnable() { @Override public void run() { timerHandler.postDelayed(this,50);//50ms } }; /********************************************************************************/ /********************************* 生命周期函数 *********************************/ /********************************************************************************/ @Override public void onAccuracyChanged(Sensor sensor, int i) { //传感器获取精度变化时触发 } @Override protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mAcc, SensorManager.SENSOR_DELAY_NORMAL);//加速度计 mSensorManager.registerListener(this, mGyr, SensorManager.SENSOR_DELAY_NORMAL);//陀螺仪 mSensorManager.registerListener(this, mMag, SensorManager.SENSOR_DELAY_NORMAL);//磁场 registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND)); } @Override protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mReceiver); } //再按一次返回键退出 private long temptime = 0; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && (event.getAction() == KeyEvent.ACTION_DOWN)) { if (System.currentTimeMillis() - temptime > 2000) // 2s内再次选择back键有效 { System.out.println(Toast.LENGTH_LONG); Toast.makeText(this, "再按一次返回键退出", Toast.LENGTH_LONG).show(); temptime = System.currentTimeMillis(); } else { finish(); System.exit(0); //凡是非零都表示异常退出!0表示正常退出! } return true; } return super.onKeyDown(keyCode, event); } }
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论