package macrobytes.spydrone; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.ImageButton; import android.widget.TextView; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Set; import java.util.UUID; public class MainActivity extends AppCompatActivity { final byte delimiter = 33; int readBufferPosition = 0; BluetoothSocket mmSocket; BluetoothDevice mmDevice = null; UUID uuid = UUID.fromString("94f39d29-7d6d-437d-973b-fba39e49d4ee"); //Standard Seri-alPortService ID public void writebt(BluetoothSocket socket, String message) throws IOException { String msg = message; mmSocket = socket; OutputStream mmOutputStream = null; mmOutputStream = mmSocket.getOutputStream(); mmOutputStream.write(msg.getBytes()); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Handler handler = new Handler(); BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); int REQUEST_ENABLE_BT= 9999; if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } final WebView webview = (WebView) this.findViewById(R.id.webView); int default_zoom_level=300; webview.setInitialScale(default_zoom_level); webview.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { System.out.println("hello"); return false; } }); webview.post(new Runnable() { @Override public void run() { int width = webview.getWidth(); int height = webview.getHeight(); webview.loadUrl("http://192.168.1.100:8080"); } }); final class workerThread implements Runnable { private String btMsg; public workerThread(String msg) { btMsg = msg; } public void run() { while (true) { int bytesAvailable; try { final InputStream mmInputStream; mmInputStream = mmSocket.getInputStream(); bytesAvailable = mmInputStream.available(); if (bytesAvailable > 0) { byte[] packetBytes = new byte[bytesAvailable]; Log.e("recv bt", "bytes available"); byte[] readBuffer = new byte[1024]; mmInputStream.read(packetBytes); for (int i = 0; i < bytesAvailable; i++) { byte b = packetBytes[i]; if (b == delimiter) { byte[] encodedBytes = new byte[readBufferPosition]; System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); final String data = new String(encodedBytes, "US-ASCII"); readBufferPosition = 0; handler.post(new Runnable() { public void run() { } }); break; } else { readBuffer[readBufferPosition++] = b; } } } } catch (IOException e) { e.printStackTrace(); } } } } final ImageButton uparrow = (ImageButton) findViewById(R.id.uparrow); final TextView status = (TextView) findViewById(R.id.status); uparrow.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { status.setText("Forward"); try { writebt(mmSocket, "forward"); } catch (IOException e) { e.printStackTrace(); } } else if (event.getAction() == MotionEvent.ACTION_UP) { status.setText("None"); try { writebt(mmSocket, "stop"); } catch (IOException e) { e.printStackTrace(); } } return true; } }); final ImageButton rightarrow = (ImageButton) findViewById(R.id.rightarrow); rightarrow.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { status.setText("Right"); try { writebt(mmSocket, "turn right"); } catch (IOException e) { e.printStackTrace(); } } else if (event.getAction() == MotionEvent.ACTION_UP) { status.setText("None"); try { writebt(mmSocket, "stop"); } catch (IOException e) { e.printStackTrace(); } } return true; } }); final ImageButton downarrow = (ImageButton) findViewById(R.id.downarrow); downarrow.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { status.setText("Down"); try { writebt(mmSocket, "backward"); } catch (IOException e) { e.printStackTrace(); } } else if (event.getAction() == MotionEvent.ACTION_UP) { status.setText("None"); try { writebt(mmSocket, "stop"); } catch (IOException e) { e.printStackTrace(); } } return true; } }); final ImageButton leftarrow = (ImageButton) findViewById(R.id.leftarrow); leftarrow.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { status.setText("Left"); try { writebt(mmSocket, "turn left"); } catch (IOException e) { e.printStackTrace(); } } else if (event.getAction() == MotionEvent.ACTION_UP) { status.setText("None"); try { writebt(mmSocket, "stop"); } catch (IOException e) { e.printStackTrace(); } } return true; } }); final Button connect = (Button)findViewById(R.id.button); final TextView textview = (TextView)findViewById(R.id.textView); connect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid); if (!mmSocket.isConnected()) { connect.setText("Connecting... Please Wait..."); mmSocket.connect(); connect.setText("Connected"); (new Thread(new workerThread("hello"))).start(); uparrow.setVisibility(View.VISIBLE); downarrow.setVisibility(View.VISIBLE); leftarrow.setVisibility(View.VISIBLE); rightarrow.setVisibility(View.VISIBLE); webview.setVisibility(View.VISIBLE); textview.setVisibility(View.INVISIBLE); connect.setVisibility(View.INVISIBLE); } } catch (IOException e) { e.printStackTrace(); connect.setText("Failed to Connect"); } } }); Set pairedDevices = mBluetoothAdapter.getBondedDevices(); if (pairedDevices.size() > 0) { for (BluetoothDevice device : pairedDevices) { if (device.getName().equals("raspberrypi")) //Note, you will need to change this to match the name of your device { mmDevice = device; break; } } } } }