Как принимать данные по Bluetooth?
Программирвоание - это не про поиск готовых решений, а про понимание того, как работает та или иная технология и какой код надо написать для её использования. Читайте документацию, разбирайте, пробуйте, если будут конкретные вопросы, приходите с ними.
Жалко. Поэтому словами. 
Есть фоновая служба. В ней сиглетон тред  сервера. 
В сервере 
// создаём серверный сокет, он будет прослушивать порт на наличие запросов
serverSocket = bluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord("RAWBT", SPP_UUID);

// запускаем бесконечный цикл, внутри которого сокет будет слушать соединения и обрабатывать их
// создаем клиентский сокет, метод accept() создаёт экземпляр Socket при новом подключении

Далее в бесконечном цикле, пока верен флаг что работаем

принять соединение, если количество открытых соединений не превысило лимит. 
стартует  тред взаимодействия 

public abstract class Connection extends Thread {
    BluetoothSocket socket; // сокет, созданный при подключении пользователя
    final OnDocumentReceived mDelegate;
}

В конкретной реализации этого класса  потребуются
    final ExecutorService executor = Executors.newSingleThreadExecutor();
    private DataOutputStream stream;
    private DataInputStream dataInputStream;

Экзекутор для рассылки сообщений с прочитанными данными 
так как чтение идет из еще одного паралейного треда. 

В общем врядли ваши примеры были настолько сложными
Я еще про часть самого окна терминала ничего не написал. А там тоже накрутить кода пришлось