ATX Home Security Robot Rover (6 / 8 steg)
Steg 6: Android programmering
Android ansökan ansvarar för att få internet data och skicka det till ATX2 arduino ombord.
Bluetooth-hanteraren och avsändare:
paketet com.example.alisson.atx2;
import android.app.Activity; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.bluetooth.BluetoothAdapter; import android.view.View; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.Toast;
import com.dropbox.sync.android.DbxAccountManager; import com.dropbox.sync.android.DbxFile; import com.dropbox.sync.android.DbxFileSystem; import com.dropbox.sync.android.DbxPath;
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Set; import java.util.UUID;
allmän klass MainActivity sträcker sig aktiviteten {private BluetoothSocket mmSocket privata BluetoothDevice mmDevice privata InputStream mmInStream; privat OutputStream mmOutStream;
skyddade void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);}
offentliga boolean onCreateOptionsMenu (Menu menu) {/ / blåsa upp menyn; detta lägger till innehåll i åtgärdsfältet om det är dagsläget. getMenuInflater () .inflate (R.menu.menu_main, menyn); return true;}
offentliga boolean onOptionsItemSelected (MenuItem post) {/ / handtag åtgärder objekt klickar här. Åtgärdsfältet kommer / / automatiskt handtaget klickar på hem/upp-knappen, så länge / / som du anger en förälder verksamhet i AndroidManifest.xml. int id = item.getItemId();
noinspection SimplifiableIfStatement om (id == R.id.action_settings) {return true;}
återvända super.onOptionsItemSelected(item); }
public void checkDevices (vy) {
slutliga int REQUEST_ENABLE_BT = 0; BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); slutliga ArrayList mArrayAdapter = ny ArrayList();
om (mBluetoothAdapter == null) {/ / enheten stöder inte Bluetooth} om (! mBluetoothAdapter.isEnabled()) {uppsåt enableBtIntent = ny Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE), startActivityForResult (enableBtIntent, REQUEST_ENABLE_BT), //Ativa Bluetooth}
Ange pairedDevices = mBluetoothAdapter.getBondedDevices(); Om det är ihopkopplade enheter om (pairedDevices.size() > 0) {/ / Loop genom ihopkopplade enheter för (BluetoothDevice enhet: pairedDevices) {/ / Lägg till namn och adress till matris kort att visa i en ListView mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
Kontext sammanhang = getApplicationContext(); int längd = Toast.LENGTH_SHORT; Toast toast = Toast.makeText (ramen, (device.getName() + "\n" + device.getAddress()), varaktighet); IF(Device.getName().startsWith("HC")) {ConnectThread ct = nya ConnectThread(device); ct.run();} / / toast.show(); } } }
privat klassen ConnectThread utökar tråd {
offentliga ConnectThread (BluetoothDevice device) {/ / använda en tillfällig objekt som tilldelas senare mmSocket, / / eftersom mmSocket är sista BluetoothSocket tmp = null; mmDevice = enhet; UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); Få en BluetoothSocket att ansluta med den givna BluetoothDevice prova {/ / MY_UUID är app UUID sträng, som också används av servern koden tmp = device.createRfcommSocketToServiceRecord(uuid);} fånga (IOException e) {} mmSocket = tmp; }
public void run() {försök {/ / ansluta enheten via uttaget. Detta kommer att blockera / / tills det lyckas eller kastar ett undantag mmSocket.connect(); Kontext sammanhang = getApplicationContext(); int längd = Toast.LENGTH_SHORT; Toast toast = Toast.makeText (sammanhang ("SUCESSO"), varaktighet); Toast.show(); ConnectedThread ct = nya ConnectedThread(mmSocket); CT.write("5"); } fånga (IOException connectException) {kontext sammanhang = getApplicationContext(); int längd = Toast.LENGTH_SHORT; Toast toast = Toast.makeText (ramen, (connectException.toString()), varaktighet); Toast.show(); Det går inte att ansluta; nära uttaget och få ut försök {mmSocket.close();} fånga (IOException closeException) {} RETUR; }
}
/ ** Kommer att avbryta en pågående anslutning och stänga uttaget * / public void cancel() {försök {mmSocket.close();} fånga (IOException e) {{}}}
privat klassen ConnectedThread utökar tråd {
offentliga ConnectedThread (BluetoothSocket socket) {//mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; försök {tmpIn = socket.getInputStream(); tmpOut = socket.getOutputStream();} fånga (IOException e) {}
mmInStream = tmpIn; mmOutStream = tmpOut; }
public void run() {byte [] buffert = nya byte [1024]; / / buffer butik för stream int byte; / / byte som returneras från read()
Hålla lyssnar på InputStream tills ett undantag inträffar samtidigt (sant) {försök {/ / läsa från InputStream bytes = mmInStream.read(buffer);
mHandler.obtainMessage (MESSAGE_READ, byte, -1, buffert) / / .sendToTarget(); {} fånga (IOException e) {bryta;}} }
/ * Kalla detta från den huvudsakliga verksamheten att skicka data till den fjärranslutna enheten * / public void write (sträng meddelande) {
byte [] msgBuffer = message.getBytes();
försök {mmOutStream.write(msgBuffer);} fånga (IOException e) {sträng msg = "i onResume() och ett undantag inträffade under skrivning:" + e.getMessage(); MSG = msg + ".\n\nCheck som SPP UUID: finns på server.\n\n"; } }
/ * Kalla detta från den huvudsakliga verksamheten till stängningen anslutningen * / public void cancel() {försök {mmSocket.close();} fånga (IOException e) {kontext sammanhang = getApplicationContext(); int längd = Toast.LENGTH_SHORT; Toast toast = Toast.makeText (ramen, (e.toString()), varaktighet); Toast.show();} } }
}