블루투스 장치를 발견하기 위해 의도 필터를 사용하여 브로드 캐스트 수신기를 등록하는 방법이 있습니다.브로드 캐스트 수신기가 끝날 때까지 기다리는 방법
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
App appState = ((App)getApplicationContext());
appState.setTeste("OLAAAAA");
String action = intent.getAction();
elementos = new Vector<String>();
String delimiter = "_";
String[] temp = null;
xpto = "OLA";
// When discovery finds a device
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
// Get the BluetoothDevice object from the Intent
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
// SO VAI VERIFICAR DO QUE ESTAO PRESENTES (DISCOVERABLE) OS QUE ESTAO PAIRED
if (device.getBondState() == BluetoothDevice.BOND_BONDED) {
Log.v("TAG","PAIRED AND PRESENT="+device.getName());
temp = device.getName().split(delimiter);
}
int aux = 0;
if(temp != null)
{
for(int i =0; i < temp.length ; i++)
{
if(temp[aux].equals("SapoFit"))
{
elementos.add(temp[aux]+"_"+temp[aux+1]);
Log.v("TAG","Seleccionado="+temp[aux]+"_"+temp[aux+1]);
}
aux++;
}
elSelecionado = temp[0]+"_"+temp[0+1];
}
}
}
};
this.registerReceiver(mReceiver, filter);
Log.v("TAG","HERE COMES empty="+xpto.toString());
내 문제는 다음과 같습니다 : 메소드의 코드가 내가 (순서대로 그 방법) 사용하려고 시간에 의해 순차적으로 몇 가지를 실행하기 때문에 여기에
// global variable
String xpto = "empty";
은 무효 방법입니다 브로드 캐스트 수신기에 할당 한 전역 변수는 여전히
null이거나 비어 있습니다.
"메인 코드"를 장소에서 브로드 캐스트 리시버로 이동하거나 BR이 완료되면 다른 글로벌 변수를 1로 할당하는 것과 같은 몇 가지 "해결책"이 있습니다 (메인 코드에서 x = 1! 기다릴)하지만 이것은 좋은 프로그래밍이 아니므로 올바른 방법이 있다고 확신합니다.
PendingResult가 발견되었지만 API 레벨 11이므로 너무 높습니다. 어떤 제안? 그것은 여러 구성 요소에서 사용하고 응용 프로그램에 대한 진정한 "글로벌"인 경우
나는이 코드를 다른 파일에 http://pastebin.com/mXG6iyW6 클래스 애플리케이션에 넣었으며 매니페스트에 추가했다.하지만 여전히 null을 얻고있다. 나는 무엇을 이해하지 못합니까? – Tiago
내 문제를 이해할 수 있도록 코드를 편집했습니다. – Tiago
제가 보겠습니다. Null은 우리가 다루어야하는 것 중 하나 일뿐입니다. :) –