如何添加蓝牙接收代码到我的代码?

vxf3dgd4  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(258)

我的声条项目(2个arduinos、继电器、数字电位器、LED、i2c、蓝牙和红外遥控器、diy放大器等)快结束了,我被卡住了。
这是我第一次使用androidstudio,事情对我来说变得越来越难了。
我创建了一个带有几个按钮、开关、滑块和下拉菜单的应用程序,它连接到蓝牙模块并将值发送到我的arduino。
现在我需要添加一个脚本,它将接收arduino正在发送的值(完成arduino代码),并最终设置按钮可点击/不可点击,并根据通过蓝牙接收的值设置滑块位置。
有没有人能告诉我如何从蓝牙读取值,并将它们存储在整数或其他格式中,以便使用if(integer=x)禁用和启用按钮;声明。
我将发布我的java代码(应用程序几乎完成,除了滑块和这个蓝牙接收部分),我将发布代码我来了迄今为止。。。
这个我快疯了。
感谢您的帮助:)

package com.interface80.soundbarcontrol;

import androidx.appcompat.app.AppCompatActivity;

import android.content.pm.ActivityInfo;
import android.icu.text.Transliterator;
import android.os.Build;
import android.os.*;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.AsyncTask;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.Switch;
import android.widget.Toast;

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

public class Remote extends Activity implements AdapterView.OnItemSelectedListener {
    private static final String TAG = "BlueTest5-Controlling";
    private int mMaxChars = 50000;//Default//change this to string..........
    private UUID mDeviceUUID;
    private BluetoothSocket mBTSocket;
    private ReadInput mReadThread = null;

    private boolean mIsUserInitiatedDisconnect = false;
    private boolean mIsBluetoothConnected = false;
    private int mLastSpinnerPosition = 0;

    private Button mBtnDisconnect;
    private BluetoothDevice mDevice;

    final static String on="92";//on
    final static String off="79";//off
    final static String subon="10";//subon
    final static String suboff="15";//suboff
    final static String zero="20";//zeroDB
    final static String six="25";//sixDB
    final static String twelwe="30";//twelweDB
    final static String userBoost="40";
    final static String softBoost="45";
    final static String normalBoost="50";
    final static String hardBoost="55";
    final static String overloadOn="60";
    final static String overloadOff="65";
    Switch toggle; //outside oncreate

    private ProgressDialog progressDialog;
    Button btnon,btnoff, btnsubon, btnsuboff, btnzero, btnsix, btntwelwe;
    Switch overloadSwitch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_remote);
        Spinner spinnerPresets = (Spinner) findViewById(R.id.spinnerPresets);
        ArrayAdapter<String> adapterPresets = new ArrayAdapter<String>(Remote.this,
                android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.arrayPresets));
        adapterPresets.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        spinnerPresets.setAdapter(adapterPresets);
        spinnerPresets.setOnItemSelectedListener(this);

        ActivityHelper.initialize(this);
        // mBtnDisconnect = (Button) findViewById(R.id.btnDisconnect);
        btnon = (Button) findViewById(R.id.on);
        btnoff = (Button) findViewById(R.id.off);
        btnsubon = (Button) findViewById(R.id.subon);
        btnsuboff = (Button) findViewById(R.id.suboff);
        btnzero = (Button) findViewById(R.id.zero);
        btnsix = (Button) findViewById(R.id.six);
        btntwelwe = (Button) findViewById(R.id.twelwe);
        overloadSwitch = (Switch) findViewById(R.id.overloadSwitch);

        Intent intent = getIntent();
        Bundle b = intent.getExtras();
        mDevice = b.getParcelable(MainActivity.DEVICE_EXTRA);
        mDeviceUUID = UUID.fromString(b.getString(MainActivity.DEVICE_UUID));
        mMaxChars = b.getInt(MainActivity.BUFFER_SIZE);

        Log.d(TAG, "Ready");

        btnon.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// TODO Auto-generated method stub

                try {
                    mBTSocket.getOutputStream().write(on.getBytes());

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        btnoff.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// TODO Auto-generated method stub

                try {
                    mBTSocket.getOutputStream().write(off.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        btnsubon.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// TODO Auto-generated method stub

                try {
                    mBTSocket.getOutputStream().write(subon.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        btnsuboff.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// TODO Auto-generated method stub

                try {
                    mBTSocket.getOutputStream().write(suboff.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        btnzero.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// TODO Auto-generated method stub

                try {
                    mBTSocket.getOutputStream().write(zero.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        btnsix.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// TODO Auto-generated method stub

                try {
                    mBTSocket.getOutputStream().write(six.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

        btntwelwe.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
// TODO Auto-generated method stub

                try {
                    mBTSocket.getOutputStream().write(twelwe.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });

    }

@Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        String text = parent.getItemAtPosition(position).toString();
        if (mLastSpinnerPosition == position)
            {
                return;
            }
        mLastSpinnerPosition = position;
            if (0 == position) {
                Toast.makeText(parent.getContext(), "Boost controlled by user.", Toast.LENGTH_SHORT).show();
                btnzero.setEnabled(true);
                btnsix.setEnabled(true);
                btntwelwe.setEnabled(true);

                try {
                    mBTSocket.getOutputStream().write(userBoost.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return; //do nothing
            }
            if (1 == position) {
                try {
                    mBTSocket.getOutputStream().write(softBoost.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Toast.makeText(parent.getContext(), "DynaBoost control.", Toast.LENGTH_SHORT).show();
                btnzero.setEnabled(false);
                btnsix.setEnabled(false);
                btntwelwe.setEnabled(false);
                return; //do nothing
            }
            if (2 == position) {
                try {
                    mBTSocket.getOutputStream().write(normalBoost.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Toast.makeText(parent.getContext(), "DynaBoost control.", Toast.LENGTH_SHORT).show();
                btnzero.setEnabled(false);
                btnsix.setEnabled(false);
                btntwelwe.setEnabled(false);
                return; //do nothing
            }
            if (3 == position) {
                try {
                    mBTSocket.getOutputStream().write(hardBoost.getBytes());
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                Toast.makeText(parent.getContext(), "DynaBoost control.", Toast.LENGTH_SHORT).show();
                btnzero.setEnabled(false);
                btnsix.setEnabled(false);
                btntwelwe.setEnabled(false);
                return; //do nothing
            }
        }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }

    private class ReadInput implements Runnable {

        private boolean bStop = false;
        private Thread t;

        public ReadInput() {
            t = new Thread(this, "Input Thread");
            t.start();
        }

        public boolean isRunning() {
            return t.isAlive();
        }

        @Override
        public void run() {
            InputStream inputStream;

            try {
                inputStream = mBTSocket.getInputStream();
                while (!bStop) {
                    byte[] buffer = new byte[256];
                    if (inputStream.available() > 0) {
                        inputStream.read(buffer);
                        int i = 0;
                        /*
                         * This is needed because new String(buffer) is taking the entire buffer i.e. 256 chars on Android 2.3.4 http://stackoverflow.com/a/8843462/1287554
                         */
                        for (i = 0; i < buffer.length && buffer[i] != 0; i++) {
                        }
                        final String strInput = new String(buffer, 0, i);

                        /*
                         * If checked then receive text, better design would probably be to stop thread if unchecked and free resources, but this is a quick fix
                         */

                    }
                    Thread.sleep(500);
                }
            } catch (IOException e) {
// TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
// TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

        public void stop() {
            bStop = true;
        }

    }

    private class DisConnectBT extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
        }

        @Override
        protected Void doInBackground(Void... params) {//cant inderstand these dotss

            if (mReadThread != null) {
                mReadThread.stop();
                while (mReadThread.isRunning())
                    ; // Wait until it stops
                mReadThread = null;

            }

            try {
                mBTSocket.close();
            } catch (IOException e) {
// TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);
            mIsBluetoothConnected = false;
            if (mIsUserInitiatedDisconnect) {
                finish();
            }
        }

    }

    private void msg(String s) {
        Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onPause() {
        if (mBTSocket != null && mIsBluetoothConnected) {
            new DisConnectBT().execute();
        }
        Log.d(TAG, "Paused");
        super.onPause();
    }

    @Override
    protected void onResume() {
        if (mBTSocket == null || !mIsBluetoothConnected) {
            new ConnectBT().execute();
        }
        Log.d(TAG, "Resumed");
        super.onResume();
    }

    @Override
    protected void onStop() {
        Log.d(TAG, "Stopped");
        super.onStop();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
    }

    private class ConnectBT extends AsyncTask<Void, Void, Void> {
        private boolean mConnectSuccessful = true;

        @Override
        protected void onPreExecute() {

            progressDialog = ProgressDialog.show(Remote.this, "", "Connecting");// http://stackoverflow.com/a/11130220/1287554

        }

        @Override
        protected Void doInBackground(Void... devices) {

            try {
                if (mBTSocket == null || !mIsBluetoothConnected) {
                    mBTSocket = mDevice.createInsecureRfcommSocketToServiceRecord(mDeviceUUID);
                    BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
                    mBTSocket.connect();
                }
            } catch (IOException e) {
// Unable to connect to device`
                // e.printStackTrace();
                mConnectSuccessful = false;

            }
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            if (!mConnectSuccessful) {
                Toast.makeText(getApplicationContext(), "Could not connect.Please turn on Sound bar", Toast.LENGTH_LONG).show();
                finish();
            } else {
                msg("Connected to Sound bar");
                mIsBluetoothConnected = true;
                mReadThread = new ReadInput(); // Kick off input reader
            }

            progressDialog.dismiss();
        }

    }
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

    public void toggle( View View) //outside oncreate
    {
        if( overloadSwitch.isChecked() ){
            try {
                mBTSocket.getOutputStream().write(overloadOn.getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return; //do nothing
        }
        else
        {
            try {
                mBTSocket.getOutputStream().write(overloadOff.getBytes());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return; //do nothing

        }
    }
    }
@Override
        public void run() {
            InputStream inputStream;

            try {
                inputStream = mBTSocket.getInputStream();
                    byte[] buffer = new byte[1024];
                        inputStream.read(buffer);
                        int BTvalue = buffer;
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
               }
fhg3lkii

fhg3lkii1#

问题解决了。昨天我熬夜了,但没有成功。我又生气又沮丧地上床睡觉了。今天我发现我尝试的所有代码都不起作用,因为代码已经存在了。读写字符串。刚用了绳子就搞定了:)

相关问题