Всем привет. Вот пишу отдельный класс java, который будет отвечать чисто только за управление Bluetooth на android-устройстве. Хотел бы написать два метода, которые:
Второй будет осуществлять поиск устройств и возвращать список найденных устройств. Со вторым методом я так понял не все так гладко, потому как на поиск затрачивается время, а метод выполняется полностью и сразу. Потому я думаю в таком случае использовать callback-функцию. А вот с первым проблема тоже кроется в том, что включение Bluetooth выполняется при помощи интента, то есть:
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
context.startActivity(intent);
А тут либо в Activity придется переопределять метод onActivityResult(), а я не хотел бы этого делать, потому как хотелось бы сделать классы независимыми друг от друга, следуя принципам инкапсуляции.
Как бы грамотнее это все можно было оформить? Не хочу все нагромождать в одной активности -- это неправильно!
Заранее большое спасибо тем, кто решил помочь! Всем добра и успехов вам!
В качестве ответа на свой вопрос нашел следующие решения:
BluetoothAdapter
методы enable()
и disable()
. Они возвращают true
, либо false
в зависимости от успеха их выполнения.К примеру мой метод для включения Bluetooth выглядит так:
public boolean enableBluetooth(boolean switchBt) {
if (adapter != null) {
return (switchBt) ? adapter.enable() : adapter.disable();
}
return false;
}
Не забудьте где нибудь в конструкторе инициализировать adapter
:
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
Во-втором случае, связанным с поиском устройств, я поступил так как и думал до этого, то есть -- использовал callback-методы. Создал интерфейс Callback
с методом onDiscoverStatus(int status)
:
public interface Callback { void onDiscoverStatus(int status); }
Далее создал IntentFilter
с отслеживаемыми событиями начала поиска, конца поиска и обнаружения устройства. Затем создал BroadcastReceiver с этими же событиями и зарегистрировал его. По наступлению какого либо события вызывал callback-метод. Далее в другом классе, где надо было получить информацию о наступлении одного из события имплементировал интерфейс Callback
.
IntentFilter
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
filter.addAction(BluetoothDevice.ACTION_FOUND);
this.context.registerReceiver(receiver, filter);
BroadcastReceiver
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
switch (action) {
case BluetoothAdapter.ACTION_DISCOVERY_STARTED:
callback.onStatusDiscover(STARTED);
break;
case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
callback.onStatusDiscover(FINISHED);
break;
case BluetoothDevice.ACTION_FOUND:
callback.onStatusDiscover(FOUND);
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device != null) {
callback.onStatusDiscover(FOUND);
callback.onFound(device);
}
break;
}
}
};
Допустим подключили интерфейс где нибудь в активности
MainActivity
public class MainActivity extends Activity implements Callback {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
@Override
public void onDiscoverStatus(int status) {
// что то делаем если пришел статус STARTED или FINISHED
}
}
Не забудьте потом по окончанию работы разрегистрировать BroadcastReceiver при помощи метода context.unregisterReceiver(receiver)
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Приложение работает, но принято ли так писать в Java? Просто для каждой переменной неудобно писать "public static String
Извините за глупый вопрос, но обязательно ли в качестве аргумента setPreferredSize использовать объект Dimension?
Не могу найти класс InlineKeyboardMarkup в библиотеке TELEGRAM API telegrambots-41-jar-with-dependencies
Я использую worldweatheronline APIСервис отдает xml примерно в следующем виде: