У меня есть приложение на iPad, которое отправляет информацию Bluetooth LE вместо имени устройства. Я пытаюсь зафиксировать эту информацию в своем коде Android и каким-то образом обновить пользовательский интерфейс. В основном мне нужно постоянно сканировать устройства и использовать «имя устройства» в соответствии с моим протоколом для обновления пользовательского интерфейса Android. Я знаю, что это неправильный способ, и я планирую реорганизовать оба приложения, чтобы они правильно использовали Bluetooth LE, но мне нужно сделать это в ближайшее время, а сейчас у меня нет времени.
В моем коде ниже я знаю, что scanLeDevices вызывается из-за некоторых журналов, которые я ввел, но оператор печати, который у меня есть в onLeScan, никогда не вызывается. Кто-нибудь может сказать мне, почему? Я давно застрял на этом...
public class MainActivity extends Activity {
private static final String TAG = "...";
List<String> listItems=new ArrayList<String>();
ArrayAdapter<String> adapter;
BluetoothManager mBluetoothManager;
private BluetoothAdapter mBluetoothAdapter;
TextView mainView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_main);
setProgressBarIndeterminate(true);
mBluetoothManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
mBluetoothAdapter = mBluetoothManager.getAdapter();
mainView = (TextView) findViewById(R.id.main_view);
scanLeDevice(true);
}
@Override
protected void onResume() {
super.onResume();
if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) {
//Bluetooth is disabled
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(enableBtIntent);
finish();
return;
}
if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
Toast.makeText(this, "No LE Support.", Toast.LENGTH_SHORT).show();
finish();
return;
}
scanLeDevice(true);
}
private static final long SCAN_TIME = 1000;
boolean mScanning = false;
private void scanLeDevice(final boolean enable) {
Log.i(null, "Inside scanLeDevice");
if (enable) {
// Stops scanning after a pre-defined scan period.
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mScanning = false;
Log.i(null, "Calling stopLeScan");
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}, SCAN_TIME);
mScanning = true;
Log.i(null, "Calling startLeScan");
mBluetoothAdapter.startLeScan(mLeScanCallback);
} else {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
}
}
private BluetoothAdapter.LeScanCallback mLeScanCallback =
new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi,
byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i(null, "INSIDE ONLESCAN");
//DO MY WORK
}
});
}
};
}
scanLeDevice(true)
вonResume
достаточно. Пожалуйста, удалите тот, что вonCreate
. - person Jorge Gil   schedule 09.09.2015