remot.java

package com.example.tomi.robotautomation;

import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.PopupMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;

import java.io.IOException;
import java.util.UUID;

public class Remot extends AppCompatActivity {
    Context context = this;
ImageButton maju,mundur,kiri,kanan,berhenti,kembali,onoff,line;
    String address = null;
    private ProgressDialog progress;
    BluetoothAdapter myBluetooth = null;
    BluetoothSocket btSocket = null;
    private boolean isBtConnected = false;
    //SPP UUID. Look for it    static final UUID myUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent newint = getIntent();
        address = newint.getStringExtra(MainActivity.EXTRA_ADDRESS); //receive the address of the bluetooth device
        setContentView(R.layout.activity_remot);
        new ConnectBT().execute(); //Call the class to connect
        ActionBar menu = getSupportActionBar();
        menu.setDisplayShowHomeEnabled(true);
        menu.setDisplayHomeAsUpEnabled(true);

        maju = (ImageButton) findViewById(R.id.imageButton4);
        maju.setOnTouchListener(new View.OnTouchListener() {
            @Override            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_MOVE)
                {
                maju();
                }

                if (event.getAction() == MotionEvent.ACTION_UP)
                {
                    berhenti();
                }

                return false;
            }
        });

        mundur=(ImageButton) findViewById(R.id.imageButton5);
        mundur.setOnTouchListener(new View.OnTouchListener() {
            @Override            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_MOVE)
                {
                    mundur();
                }
                if(event.getAction()==MotionEvent.ACTION_UP)
                {
                    berhenti();
                }
                return false;
            }
        });

        kiri=(ImageButton) findViewById(R.id.imageButton6);
        kiri.setOnTouchListener(new View.OnTouchListener() {
            @Override            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_MOVE)
                {
                    kiri();
                }
                if(event.getAction()==MotionEvent.ACTION_UP)
                {
                    berhenti();
                }
                return false;
            }
        });

        kanan=(ImageButton) findViewById(R.id.imageButton7);
        kanan.setOnTouchListener(new View.OnTouchListener() {
            @Override            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction()==MotionEvent.ACTION_MOVE)
                {
                    kanan();
                }
                if(event.getAction()==MotionEvent.ACTION_UP)
                {
                    berhenti();
                }
                return false;
            }
        });

        berhenti=(ImageButton) findViewById(R.id.imageButton3);
        berhenti.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                berhenti();
            }
        });

        onoff=(ImageButton) findViewById(R.id.imageButton9);
        onoff.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                PopupMenu popup = new PopupMenu(Remot.this,line);
                // Inflating menu using xml file                popup.getMenuInflater().inflate(R.menu.remote, popup.getMenu());

                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override                    public boolean onMenuItemClick(MenuItem item) {
                        if (item.getItemId() == R.id.on) {
                            Intent kem=new Intent(Remot.this,MainActivity.class);
                            Remot.this.startActivity(kem);
                            Remot.this.finish();
                        }
                        else if (item.getItemId() == R.id.of) {
                            stopline();
                            berhenti();
                            Disconnect();
                        }
                        else if (item.getItemId() == R.id.stopline) {
                            stopline();
                        }
                        else if (item.getItemId() == R.id.lineall) {
                            Toast.makeText(getApplicationContext(), "Maaf...Line Untuk Semua Area Belum Saya Buat..!.Tunggu Ya !", Toast.LENGTH_LONG).show();
                        }
                        return true;
                    }
                });
                popup.show();        //-------------------            }
        });



        line=(ImageButton)findViewById(R.id.imageButton8);
        line.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                PopupMenu popup = new PopupMenu(Remot.this,line);
                // Inflating menu using xml file                popup.getMenuInflater().inflate(R.menu.menuline, popup.getMenu());

                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override                    public boolean onMenuItemClick(MenuItem item) {
                        if (item.getItemId() == R.id.lineA) {
                         areaA();
                        }
                        else if (item.getItemId() == R.id.LineB) {
                         areaB();
                        }
                        else if (item.getItemId() == R.id.lineC) {
                        areaC();
                        }
                        else if (item.getItemId() == R.id.lineall) {
                            Toast.makeText(getApplicationContext(), "Maaf...Line Untuk Semua Area Belum Saya Buat..!.Tunggu Ya !", Toast.LENGTH_LONG).show();
                        }
                        return true;
                    }
                });
                popup.show();        //-------------------            }
        });

        kembali=(ImageButton) findViewById(R.id.imageButton10);
        kembali.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setTitle("Konfirmasi..");
                builder.setMessage("Yakin Anda Ingin Menutup Aplikasi ?");
                // Membuat tombol negativ                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
                //Membuat tombol positif                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override                    public void onClick(DialogInterface dialog, int which) {
                        // Bila pilih ok, maka muncul toast                        Toast.makeText(getApplicationContext(), "Anda Memilih Keluar", Toast.LENGTH_SHORT).show();
                        stopline();
                        berhenti();
                        Disconnect();
                        Intent kem=new Intent(Remot.this,MainActivity.class);
                        Remot.this.startActivity(kem);
                        Remot.this.finish();
                    }
                });
                builder.show();
            }

        });

//-----------------akhir set    }

    private void Disconnect()
    {
        if (btSocket!=null) //If the btSocket is busy        {
            try            {
                berhenti();
                btSocket.close(); //close connection            }
            catch (IOException e)
            { msg("Error");}
        }
        finish(); //return to the first layout
    }

    private void mundur()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("B".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }

    private void maju()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("F".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }

    //-------------    private void kiri()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("L".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }


    private void kanan()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("R".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }


    private void berhenti()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("T".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }

    private void stopline()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("7".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }
    //--------------------------------LINE    private void areaA()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("6".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }
    private void areaB()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("8".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }
    private void areaC()
    {
        if (btSocket!=null)
        {
            try            {
                btSocket.getOutputStream().write("9".toString().getBytes());
            }
            catch (IOException e)
            {
                msg("Error");
            }
        }
    }
    // fast way to call Toast    private void msg(String s)
    {
        Toast.makeText(getApplicationContext(),s, Toast.LENGTH_LONG).show();
    }

    @Override    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.remote, menu);
        return true;
    }

    @Override    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();

        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    private class ConnectBT extends AsyncTask<Void, Void, Void>  // UI thread    {
        private boolean ConnectSuccess = true; //if it's here, it's almost connected
        @Override        protected void onPreExecute()
        {
            progress = ProgressDialog.show(Remot.this, "Connecting...", "Please wait!!!");  //show a progress dialog        }

        @Override        protected Void doInBackground(Void... devices) //while the progress dialog is shown, the connection is done in background        {
            try            {
                if (btSocket == null || !isBtConnected)
                {
                    myBluetooth = BluetoothAdapter.getDefaultAdapter();//get the mobile bluetooth device                    BluetoothDevice dispositivo = myBluetooth.getRemoteDevice(address);//connects to the device's address and checks if it's available                    btSocket = dispositivo.createInsecureRfcommSocketToServiceRecord(myUUID);//create a RFCOMM (SPP) connection                    BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                    btSocket.connect();//start connection                }
            }
            catch (IOException e)
            {
                ConnectSuccess = false;//if the try failed, you can check the exception here            }
            return null;
        }
        @Override        protected void onPostExecute(Void result) //after the doInBackground, it checks if everything went fine        {
            super.onPostExecute(result);

            if (!ConnectSuccess)
            {
                msg("Connection Failed. Is it a SPP Bluetooth? Try again.");
                finish();
            }
            else            {
                msg("Connected.");
                isBtConnected = true;
            }
            progress.dismiss();
        }
    }
}


mainactivity.java

package com.example.tomi.robotautomation;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Set;
public class MainActivity extends AppCompatActivity
{
    Context context = this;

    //widgets    ImageButton btnPaired,btnback;
    ListView devicelist;
    //Bluetooth    private BluetoothAdapter myBluetooth = null;
    private Set<BluetoothDevice> pairedDevices;
    public static String EXTRA_ADDRESS = "device_address";

    @Override    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.getSupportActionBar().setTitle("Koneksi Bluetooth");
        ActionBar menu = getSupportActionBar();
        menu.setDisplayShowHomeEnabled(true);
        menu.setDisplayHomeAsUpEnabled(true);

        //Calling widgets        btnPaired = (ImageButton) findViewById(R.id.imageButton2);

        devicelist = (ListView)findViewById(R.id.Listview);

        btnback = (ImageButton) findViewById(R.id.imageButton);
        btnback.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setTitle("Konfirmasi..");
                builder.setMessage("Yakin Anda Ingin Menutup Aplikasi ?");
                // Membuat tombol negativ                builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override                    public void onClick(DialogInterface dialog, int which) {

                    }
                });
                //Membuat tombol positif                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override                    public void onClick(DialogInterface dialog, int which) {
                        // Bila pilih ok, maka muncul toast                        Toast.makeText(getApplicationContext(), "Anda Memilih Keluar", Toast.LENGTH_SHORT).show();
                        MainActivity.this.finish();
                    }
                });
                builder.show();
            }

        });


        //if the device has bluetooth        myBluetooth = BluetoothAdapter.getDefaultAdapter();

        if(myBluetooth == null)
        {
            //Show a mensag. that the device has no bluetooth adapter            Toast.makeText(getApplicationContext(), "Bluetooth Device Not Available", Toast.LENGTH_LONG).show();

            //finish apk            finish();
        }
        else if(!myBluetooth.isEnabled())
        {
            //Ask to the user turn the bluetooth on            Intent turnBTon = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(turnBTon,1);
        }

        btnPaired.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v)
            {
                pairedDevicesList();
            }
        });



    }

    private void pairedDevicesList()
    {
        pairedDevices = myBluetooth.getBondedDevices();
        ArrayList list = new ArrayList();

        if (pairedDevices.size()>0)
        {
            for(BluetoothDevice bt : pairedDevices)
            {
                list.add(bt.getName() + "\n" + bt.getAddress()); //Get the device's name and the address            }
        }
        else        {
            Toast.makeText(getApplicationContext(), "No Paired Bluetooth Devices Found.", Toast.LENGTH_LONG).show();
        }

        final ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1, list);
        devicelist.setAdapter(adapter);
        devicelist.setOnItemClickListener(myListClickListener); //Method called when the device from the list is clicked
    }

    private AdapterView.OnItemClickListener myListClickListener = new AdapterView.OnItemClickListener()
    {
        public void onItemClick (AdapterView<?> av, View v, int arg2, long arg3)
        {
            // Get the device MAC address, the last 17 chars in the View            String info = ((TextView) v).getText().toString();
            String address = info.substring(info.length() - 17);

            // Make an intent to start next activity.            Intent i = new Intent(MainActivity.this,Remot.class);

            //Change the activity.            i.putExtra(EXTRA_ADDRESS, address); //this will be received at ledControl (class) Activity            startActivity(i);
        }
    };


    @Override    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.        getMenuInflater().inflate(R.menu.menu_device_list, menu);
        return true;
    }

    @Override    public boolean onOptionsItemSelected(MenuItem item) {

        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        int id = item.getItemId();

        //noinspection SimplifiableIfStatement        if (id == R.id.action_settings) {
            return true;
        }



        return super.onOptionsItemSelected(item);
    }




}