這個程式必須跟腦立方MindWave藍牙裝置連結,使用前必須先跟MindWave建立通訊頻道,透過這個頻道來撈訊息
進到Resume狀態開始初始化物件,並取得到藍牙橋接器,將藍牙橋接器和高等工人餵給腦力方所提供的Class TGDevice,並且開始監聽訊息
TGDevice有可能是一個高等經紀人型態,所以它才能去撈到通道訊息
撈訊息如果同時是連線成功以及連線中則關閉MindWave通道,接著就可以取得到腦波值,在該範例冥想低於35則會打電話給老闆,哈哈 叫他起床尿尿吧~
TestProject:
/**@(#)TestProject.java 1.0 2012.12.14 * @author ChengYou Fang */ package com.cyfang.test; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.WindowManager; import android.widget.Toast; import com.neurosky.thinkgear.TGDevice; public class TestProject extends Activity { private static TGDevice device; private static BluetoothAdapter bluetoothAdapter; private static boolean State = false; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_project); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } private final void init() { bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); // 橋接 if (bluetoothAdapter != null) { device = new TGDevice(bluetoothAdapter, handler); // Message Passing State = setTGDevice(); } else { Toast.makeText(this, "沒辦法連接到該裝置", Toast.LENGTH_LONG).show(); } } private final boolean setTGDevice() { if (device.getState() != TGDevice.STATE_CONNECTED && device.getState() != TGDevice.STATE_CONNECTING) { device.connect(false); // 拒絕其他裝置連線 return true; // 設定成功 } return false; // 設定失敗 } private final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { // 取得到Message Passing Signal case TGDevice.MSG_STATE_CHANGE: switch (msg.arg1) { // 取得通信中的狀態 case TGDevice.STATE_CONNECTED: device.start(); Log.i("Tag", "連線成功"); break; } break; case TGDevice.MSG_POOR_SIGNAL: Log.i("POOR_SIGNAL:", "" + msg.arg1); break; case TGDevice.MSG_MEDITATION: // 冥想狀態 Log.i("MEDITATION:", "" + msg.arg1); if (msg.arg1 < 35) { // 如果想睡覺就打給老闆 Action.setPhone("921871800", getApplicationContext()); } break; case TGDevice.MSG_LOW_BATTERY: Toast.makeText(getApplicationContext(), "電池電量過低,將關閉程式", Toast.LENGTH_LONG).show(); finish(); // 關閉程式 break; } } }; @Override protected void onResume() { super.onResume(); init(); // 初始化 } @Override protected void onPause() { if (State) { State = false; device.close(); // 關閉連接 } super.onPause(); } }
Action
/**@(#)Action.java 1.0 2012.12.14 * @author ChengYou Fang */ package com.cyfang.test; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.util.Log; import android.widget.Toast; class Action { protected static final String phone = "tel:0"; private static Intent intent = null; public static final void setPhone(String str, Context context) { intent = new Intent(Intent.ACTION_CALL); // 意圖打電話 try { intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setData(Uri.parse(phone + Integer.parseInt(str)));// 測試是否為數字 context.startActivity(intent); Log.i("Call", intent.getData().toString()); } catch (NumberFormatException exception) { Toast.makeText(context, "電話號碼有問題", Toast.LENGTH_LONG).show(); } } }
權限:
uses-permission android:name="android.permission.BLUETOOTH"/> uses-permission android:name="android.permission.CALL_PHONE"/>