Guest User

Untitled

a guest
Jul 23rd, 2016
653
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.95 KB | None | 0 0
  1.  
  2. package com.example.xxx;
  3.  
  4.  
  5.  
  6.  
  7.  
  8. import java.io.File;
  9.  
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. import java.io.InputStream;
  13. import java.io.OutputStream;
  14. import java.io.OutputStreamWriter;
  15. import java.lang.reflect.Method;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.UUID;
  19.  
  20. import android.app.Activity;
  21. import android.content.Context;
  22. import android.hardware.Camera;
  23. import android.media.MediaRecorder;
  24. import android.os.Bundle;
  25. import android.view.SurfaceHolder;
  26. import android.view.SurfaceView;
  27. import android.view.View;
  28.  
  29. import android.widget.AdapterView;
  30. import android.widget.ArrayAdapter;
  31. import android.widget.Button;
  32. import android.widget.FrameLayout;
  33. import android.widget.Spinner;
  34.  
  35.  
  36. import android.widget.Toast;
  37. import android.bluetooth.BluetoothAdapter;
  38. import android.bluetooth.BluetoothDevice;
  39. import android.bluetooth.BluetoothSocket;
  40. import android.os.Build;
  41. import android.os.Handler;
  42. import android.util.Log;
  43. import android.view.View.OnClickListener;
  44. import android.widget.EditText;
  45. import android.widget.TextView;
  46.  
  47. public class MainActivity extends Activity {
  48. private static final String TAG = "Musiktherapie";
  49.  
  50. //Variablen setzen
  51. Button btnOn, btnOff;
  52. TextView txtArduino;
  53. Handler h;
  54. EditText dateipfad;
  55. boolean recording;
  56. final int RECIEVE_MESSAGE = 1; // Status for Handler
  57.  
  58. //Methoden setzen
  59. private BluetoothAdapter btAdapter = null;
  60. private BluetoothSocket btSocket = null;
  61. private StringBuilder sb = new StringBuilder();
  62. private ConnectedThread mConnectedThread;
  63. private Camera myCamera;
  64. private MyCameraSurfaceView myCameraSurfaceView;
  65. private MediaRecorder mediaRecorder;
  66.  
  67. // SPP UUID Service
  68. private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  69.  
  70.  
  71. private static String address = "20:15:06:24:45:69";
  72.  
  73. /**
  74. * Wird einmal aufgerufen wenn Activity startet
  75. */
  76. @Override
  77.  
  78. public void onCreate(Bundle savedInstanceState) {
  79. super.onCreate(savedInstanceState);
  80. recording = false;
  81. setContentView(R.layout.activity_main);
  82.  
  83.  
  84.  
  85.  
  86. //Spinner inizialisieren für die G-Settings
  87.  
  88. //liste mit items
  89. final List<String> list=new ArrayList<String>();
  90. list.add("G_Range 2");
  91. list.add("G_Range 4");
  92. list.add("G_Range 8");
  93.  
  94.  
  95.  
  96. //spinner erstellen
  97. final Spinner G =(Spinner) findViewById(R.id.spinner);
  98.  
  99.  
  100. //liste als adapter
  101. ArrayAdapter<String> adp = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
  102. adp.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  103. G.setAdapter(adp);
  104.  
  105.  
  106. G.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
  107. @Override
  108. public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
  109. mConnectedThread.write(String.valueOf(2*(G.getSelectedItemPosition())));
  110. }@Override
  111. public void onNothingSelected(AdapterView<?> parentView) {
  112. // do nothing
  113. }
  114.  
  115.  
  116.  
  117. });
  118.  
  119.  
  120.  
  121.  
  122. ///////////Kameravorschau/////////////
  123. myCamera = getCameraInstance();
  124.  
  125. myCameraSurfaceView=new MyCameraSurfaceView(this,myCamera);
  126.  
  127. FrameLayout myCameraPreview = (FrameLayout) findViewById(R.id.videoview);
  128. myCameraPreview.addView(myCameraSurfaceView);
  129.  
  130. btnOn=(Button) findViewById(R.id.btnOn);
  131.  
  132. btnOff=(Button) findViewById(R.id.btnOff);
  133.  
  134. dateipfad=(EditText)this.findViewById(R.id.dateipfad);
  135.  
  136.  
  137. Button btnOff = (Button) findViewById(R.id.btnOff);
  138. btnOff.setOnClickListener(new
  139.  
  140. OnClickListener() {
  141. public void onClick (View v){
  142. mediaRecorder.stop();
  143. mConnectedThread.write("3");
  144. recording = false;
  145. Toast.makeText(getBaseContext(),
  146. "Messwerte gespeichert!",
  147. Toast.LENGTH_SHORT).show();
  148. }
  149. }
  150.  
  151. );
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158. h=new
  159.  
  160. Handler() {
  161. public void handleMessage (android.os.Message msg){
  162.  
  163.  
  164.  
  165. switch (msg.what) {
  166. case RECIEVE_MESSAGE:
  167.  
  168. // wenn Daten empfangen werden
  169. byte[] readBuf = (byte[]) msg.obj;
  170.  
  171.  
  172. String path = "/sdcard/" + dateipfad.getText().toString() + ".txt"; //Environment.getExternalStorageDirectory().getPath()
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181. ///////Messwertedatei beschreiben//////////
  182. try {
  183.  
  184.  
  185.  
  186. File myFile = new File(path);
  187. myFile.createNewFile();
  188. FileOutputStream fOut = new FileOutputStream(myFile,true);
  189.  
  190. fOut.write(readBuf);
  191. fOut.flush();
  192. fOut.close();
  193.  
  194.  
  195.  
  196.  
  197. } catch (Exception e) {
  198. Toast.makeText(getBaseContext(), e.getMessage(),
  199. Toast.LENGTH_SHORT).show();
  200. }
  201.  
  202. break;
  203. }
  204. }
  205.  
  206. }
  207.  
  208. ;
  209.  
  210. btAdapter=BluetoothAdapter.getDefaultAdapter(); // get Bluetooth adapter vom Smartphone
  211.  
  212. checkBTState();
  213.  
  214. //////////////ON-Button/////////////////
  215. btnOn.setOnClickListener(new
  216.  
  217. OnClickListener() {
  218. public void onClick (View v){
  219.  
  220.  
  221. if (recording) {
  222. // Aufnahme stoppen und Kamera loslassen
  223. mediaRecorder.stop(); // Aufnahme stoppen
  224. releaseMediaRecorder(); // Mediarecorder Objekt loslassen
  225.  
  226. } else {
  227.  
  228. //Kamera loslassen bevor der MediaRecorder startet
  229. releaseCamera();
  230. if (!prepareMediaRecorder()) {
  231. Toast.makeText(MainActivity.this,
  232. "Fail in prepareMediaRecorder()!\n - Ended -",
  233. Toast.LENGTH_LONG).show();
  234. }
  235. /////////// Aufnahme starten///////////
  236. mediaRecorder.start();
  237. recording = true;
  238. }
  239.  
  240. mConnectedThread.write("1"); // Sende "1" über Bluetooth zum mikrocontroller
  241. Toast.makeText(getBaseContext(), "Starte Messung", Toast.LENGTH_SHORT).show();
  242. }
  243. }
  244.  
  245. );
  246.  
  247. }
  248.  
  249.  
  250.  
  251. private Camera getCameraInstance() {
  252. // TODO Auto-generated method stub
  253. Camera c = null;
  254. try {
  255. c = Camera.open(); // Kamera-Instanz öffnen
  256. c.setDisplayOrientation(90);
  257. } catch (Exception e) {
  258. // Kamera nicht verfügbar
  259. }
  260. return c; // gibt null aus wenn Kamera nicht verfügbar
  261. }
  262.  
  263.  
  264. private boolean prepareMediaRecorder() {
  265. myCamera = getCameraInstance();
  266. mediaRecorder = new MediaRecorder();
  267.  
  268. myCamera.unlock();
  269. mediaRecorder.setCamera(myCamera);
  270. //////Eigenschaften Videoaufnahme//////////
  271. mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
  272. mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
  273. mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
  274. mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  275. mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
  276. mediaRecorder.setAudioEncodingBitRate(128000);
  277. mediaRecorder.setAudioSamplingRate(48000);
  278. mediaRecorder.setVideoSize(1280,720);
  279. mediaRecorder.setVideoEncodingBitRate(12000000);
  280. mediaRecorder.setVideoFrameRate(30);
  281. mediaRecorder.setOutputFile("sdcard/Musiktherapie.mp4"); //Dateipfad
  282.  
  283.  
  284.  
  285. mediaRecorder.setPreviewDisplay(myCameraSurfaceView.getHolder().getSurface());
  286. try {
  287. mediaRecorder.prepare();
  288. } catch (IllegalStateException e) {
  289. releaseMediaRecorder();
  290. return false;
  291. } catch (IOException e) {
  292. releaseMediaRecorder();
  293. return false;
  294. }
  295. return true;
  296. }
  297.  
  298. private void releaseMediaRecorder() {
  299. if (mediaRecorder != null) {
  300. mediaRecorder.reset(); // Lösche Recorder Konfiguration
  301. mediaRecorder.release(); // Lasse Recorderobjekt los
  302. mediaRecorder = null;
  303. myCamera.lock(); // Kamera schließen für später
  304. }
  305. }
  306.  
  307. private void releaseCamera() {
  308. if (myCamera != null) {
  309. myCamera.release(); // Kamera loslassen für evtl. andere Anwendungen
  310. myCamera = null;
  311. }
  312. }
  313.  
  314. public class MyCameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback{
  315.  
  316. private SurfaceHolder mHolder;
  317. private Camera mCamera;
  318.  
  319. public MyCameraSurfaceView(Context context, Camera camera) {
  320. super(context);
  321. mCamera = camera;
  322. mHolder = getHolder();
  323. mHolder.addCallback(this);
  324. // deprecated setting, but required on Android versions prior to 3.0
  325. //mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  326. }
  327.  
  328.  
  329. public void surfaceChanged(SurfaceHolder holder, int format, int weight,
  330. int height) {
  331. if (mHolder.getSurface() == null){
  332.  
  333. return;
  334. }
  335.  
  336.  
  337. try {
  338. mCamera.stopPreview();
  339. } catch (Exception e){
  340. }
  341.  
  342.  
  343. try {
  344. mCamera.setPreviewDisplay(mHolder);
  345. mCamera.startPreview();
  346. } catch (Exception e){
  347. }
  348. }
  349.  
  350. public void surfaceCreated(SurfaceHolder holder) {
  351.  
  352. try {
  353. mCamera.setPreviewDisplay(holder);
  354. mCamera.startPreview();
  355. } catch (IOException e) {
  356. }
  357. }
  358.  
  359.  
  360. public void surfaceDestroyed(SurfaceHolder holder) {
  361. // TODO Auto-generated method stub
  362. }
  363. }
  364.  
  365. private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {
  366. if(Build.VERSION.SDK_INT >= 10){
  367. try {
  368. final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class });
  369. return (BluetoothSocket) m.invoke(device, MY_UUID);
  370. } catch (Exception e) {
  371. Log.e(TAG, "Could not create Insecure RFComm Connection",e);
  372. }
  373. }
  374. return device.createRfcommSocketToServiceRecord(MY_UUID);
  375. }
  376.  
  377. @Override
  378. public void onResume() {
  379. super.onResume();
  380.  
  381. Log.d(TAG, "...onResume - try connect...");
  382. BluetoothDevice device = btAdapter.getRemoteDevice(address);
  383.  
  384. try {
  385. btSocket = createBluetoothSocket(device);
  386. } catch (IOException e) {
  387. errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
  388. }
  389.  
  390. btAdapter.cancelDiscovery();
  391.  
  392. /////////////Verbindung aufbauen//////////
  393. Log.d(TAG, "...Connecting...");
  394. try {
  395. btSocket.connect();
  396. Log.d(TAG, "....Connection ok...");
  397. } catch (IOException e) {
  398. try {
  399. btSocket.close();
  400. } catch (IOException e2) {
  401. errorExit("Fatal Error", "In onResume()" + e2.getMessage() + ".");
  402. }
  403. }
  404.  
  405. //////////////Datenstrom erstellen///////////////
  406. Log.d(TAG, "...Create Socket...");
  407. mConnectedThread = new ConnectedThread(btSocket);
  408. mConnectedThread.start();
  409. }
  410.  
  411. @Override
  412. public void onPause() {
  413. super.onPause();
  414. releaseMediaRecorder(); // in der Pause mediarecorder loslassen
  415. releaseCamera(); // und Kamera loslassen
  416. Log.d(TAG, "...In onPause()...");
  417.  
  418. try {
  419. btSocket.close();
  420. } catch (IOException e2) {
  421. errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
  422. }
  423. }
  424.  
  425. private void checkBTState() {
  426. // Prüfe Bluetooth Unterstützung und prüfe ob eingeschalten
  427. if(btAdapter==null) {
  428. errorExit("Fatal Error", "Bluetooth not support");
  429. } else {
  430. if (btAdapter.isEnabled()) {
  431. Log.d(TAG, "...Bluetooth ON...");
  432. } else {
  433. //////Bluetooth einschalten//////
  434. BluetoothAdapter.getDefaultAdapter().enable();
  435. }
  436. }
  437. }
  438.  
  439. private void errorExit(String title, String message){
  440. Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show();
  441. finish();
  442. }
  443.  
  444. //////Datenverbindung///////
  445. private class ConnectedThread extends Thread {
  446. private final InputStream mmInStream;
  447. private final OutputStream mmOutStream;
  448.  
  449. public ConnectedThread(BluetoothSocket socket) {
  450. InputStream tmpIn = null;
  451. OutputStream tmpOut = null;
  452.  
  453. try {
  454. tmpIn = socket.getInputStream();
  455. tmpOut = socket.getOutputStream();
  456. } catch (IOException e) { }
  457.  
  458. mmInStream = tmpIn;
  459. mmOutStream = tmpOut;
  460. }
  461.  
  462. public void run() {
  463. byte[] buffer = new byte[255]; // Pufferspeicher für den Stream
  464. int bytes; // ausgegebene Bytes von read()
  465.  
  466.  
  467.  
  468. // InputStream lesen bis Fehler auftreten
  469. while (true) {
  470. try {
  471. // Lese InputStream
  472. bytes = mmInStream.read(buffer); // Erhalte Anzahl der Bytes und der Daten in "buffer"
  473. h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget(); // Sende zum Handler
  474. } catch (IOException e) {
  475. break;
  476. }
  477. }
  478. }
  479.  
  480. /* aus der Main activity aufrufen für das Senden zum msp */
  481. public void write(String message) {
  482. //Log.d(TAG, "...Data to send: " + message + "...");
  483. byte[] msgBuffer = message.getBytes();
  484. try {
  485. mmOutStream.write(msgBuffer);
  486. } catch (IOException e) {
  487. // Log.d(TAG, "...Error data send: " + e.getMessage() + "...");
  488. }
  489. }
  490. }
  491.  
  492.  
  493.  
  494.  
  495. }
Advertisement
Add Comment
Please, Sign In to add comment