2013-10-03 2 views
0

onCreate() 메소드 레지스터 BroadcastReceiver에서 서비스를 시작하고 onDestroy()에서 BroadcastReceiver의 등록을 취소하는 문제가 있습니다. 방법 onHandleIntent()에서 블루투스 장치 검색을 시작합니다. 문제는 모든 장치가 발견되기 전에 내 BroadcastReceiver이 파괴되어 실제로 BluetoothDevice.ACTION_FOUND 인 텐트로 수행 할 수 없다는 것입니다. startDiscovery()onCreate()으로 옮기려고 시도했지만 결과가 없습니다. 내 코드는 다음과 같습니다 1. 방금 만든있어 2. 발견이 막 시작 가 3가 그냥 파괴있어 :블루투스 스캔이 끝나기 전에 안드로이드 서비스의 메서드 onDestroy가 호출됩니다.

public class BluetoothService extends IntentService{ 

private BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter(); 
private final String SMART_TOKEN_ADDRESS = "F0:E7:7E:5F:63:70"; 
private final BroadcastReceiver receiver = new BroadcastReceiver(){ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 
     Log.v("BLUETOOTH","found it!"); 
    } 

}; 

public BluetoothService() { 
    super("BluetoothService"); 
    // TODO Auto-generated constructor stub 
} 

@Override 
public void onCreate(){ 
    super.onCreate(); 
    Log.v("SERVICE", "Just got created"); 
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
    registerReceiver(receiver, filter); 
    btAdapter.startDiscovery(); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    // TODO Auto-generated method stub 
    Log.v("BLUETOOTH", "Discovery just started"); 
    //btAdapter.startDiscovery(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Log.v("BLUETOOTH","Just got destroyed!"); 
    unregisterReceiver(receiver);   
} 

}

로그는 다음과 같습니다! 4.받은 android.bluetooth.device.action.FOUND

도움 주셔서 감사합니다! T.

답변

0

모든 요청을 처리 한 후 서비스가 중지되기 때문에 이러한 현상이 발생합니다. 문서에서 "모든 시작 요청이 처리 된 후 서비스를 중지하므로 결코 stopSelf()를 호출 할 필요가 없습니다."

그래서 서비스를 사용하려면 작업자 스레드에게 실행 대기를 알리는 wait 또는 다른 명령을 사용해야합니다.

서비스에 대한 설명서를 참조하십시오. http://developer.android.com/guide/components/services.html

관련 문제