wizTurn / Android-SDK

wizTurn Android SDK
14 stars 22 forks source link

startScaning StopScaning 반복할 때 에러 #57

Open dkshin opened 9 years ago

dkshin commented 9 years ago

버튼 ->startScaning ->비콘찾음->StopScaning 반복 이렇게 계속 했을 때 문제점이 없는지 테스트해본 결과 간혈적으로 G3 Cat6에서

03-06 17:42:49.806: E/AndroidRuntime(31262): java.lang.IllegalStateException: PeripheralSca nListener is null. It must be set ahead of further progress... 03-06 17:42:49.806: E/AndroidRuntime(31262): at com.wizturn.sdk.central.CentralManager.startScanning(CentralManager.java:122) 03-06 17:42:49.806: E/AndroidRuntime(31262): at infiniq.absent2.AbsentCheckFragment2.PushLeaveBeacon(AbsentCheckFragment2.java:741) 03-06 17:42:49.806: E/AndroidRuntime(31262): at infiniq.absent2.AbsentCheckFragment2$6$1$2.onClick(AbsentCheckFragment2.java:498) 03-06 17:42:49.806: E/AndroidRuntime(31262): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:160) 03-06 17:42:49.806: E/AndroidRuntime(31262): at android.os.Handler.dispatchMessage(Handler.java:102) 03-06 17:42:49.806: E/AndroidRuntime(31262): at android.os.Looper.loop(Looper.java:135) 03-06 17:42:49.806: E/AndroidRuntime(31262): at android.app.ActivityThread.main(ActivityThread.java:5292) 03-06 17:42:49.806: E/AndroidRuntime(31262): at java.lang.reflect.Method.invoke(Native Method) 03-06 17:42:49.806: E/AndroidRuntime(31262): at java.lang.reflect.Method.invoke(Method.java:372) 03-06 17:42:49.806: E/AndroidRuntime(31262): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908) 03-06 17:42:49.806: E/AndroidRuntime(31262): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

이런에러가 나타나네요 무조건 나타나는건 아니고 어쩔땐 3번만 반복해도 나타날때두 있구요 갤5에서는 아직까진 이런 현상이 안일어 났네요 해당 오류의 원인을 알고 싶습니다.

jayjay-dio commented 9 years ago

안녕하세요. 안드로이드 개발 담당자입니다.

WIZTURN 매니저앱에서 이슈가 발생하는건지, WIZTURN SDK를 이용해 앱을 만드셨는데 그 앱에서 이슈가 발생했다는건지 답변 주시면 감사하겠습니다.

dkshin commented 9 years ago

sdk를 이용한 앱입니다. wizturn 매니저에서는 이현상은 안일어나네요

dkshin commented 9 years ago

그 현상이 일어날 때 로그를 보면 03-06 18:02:59.915: D/BluetoothAdapter(9021): stopLeScan() 03-06 18:02:59.916: D/BluetoothAdapter(9021): scan not started yet 03-06 18:02:59.916: D/BluetoothAdapter(9021): startLeScan(): null 03-06 18:02:59.921: D/BluetoothLeScanner(9021): onClientRegistered() - status=0 clientIf=6

이 로그가 나타나고 startscan 하면 앱이 죽네요

jayjay-dio commented 9 years ago

아네, 로그를 보시면


03-06 17:42:49.806: E/AndroidRuntime(31262): java.lang.IllegalStateException: PeripheralSca nListener is null. It must be set ahead of further progress...

PeripheralScanListener 가 startScanning() 메소드 호출하기 전 할당되지 않아서 발생한 것입니다. 혹시 CenterManager.close()가 앱의 어느부분에서 호출되었는지 확인 부탁드립니다. CentralManager.close()은 앱이 종료될 때 호출해 주면됩니다.

CentralManager.setPeripheralScanListener() 으로 리스너 등록이 가능합니다.

dkshin commented 9 years ago

onDetach()에서 만 close를 하고있습니다. PeripheralScanListener는 전역변수이고 리스너를 지우지는 않구요 음 한 화면에서 반복을 하고 같은 동작을 하는것인데 리스너가 할당하지 않는다는게 이상해서요

jayjay-dio commented 9 years ago

Listener는 CentralManager.close()가 호출되면 내부적으로 해제됩니다. 어딘가에서 close()를 호출하는것으로 보입니다. 각 메소드 호출전후에 로그를 집어넣으시고 로그분석해 보시길 권장합니다.

dkshin commented 9 years ago

if (centralManager != null) { centralManager.close(); }

centralManager = CentralManager.getInstance(); centralManager.init(getActivity()); centralManager.setPeripheralScanListener(mPeripheralScanListener);

이구문을 반복할때 마다 해주는데 close 후 다시 연결해주면 문제가 있나요?

jayjay-dio commented 9 years ago

네~! If statement의 CentralManager.close()를 주석처리하면 문제가 없어집니다. CentralManager.close()는 대개 앱종료할때 메인 액티비티의 onDestroy()에서 호출하시면 됩니다.

dkshin commented 9 years ago

원인은 close 때문이 맞네요!!! 프래그먼트단에서 CentralManager.close()는 지웠는데 그대로 오류가 나서 서비스쪽을 확인해본결과 제가 서비스단에서 close를 시키고 있어서 해당현상이 일어났던 것이었습니다.

근데 서비스단에서 centralManager = CentralManager.getInstance(); centralManager.init(getApplicationContext()); centralManager.setPeripheralScanListener(mPeripheralScanListener); 이렇게 생성하고있고

다른 프래그먼트에서 centralManager = CentralManager.getInstance(); centralManager.init(getActivity()); centralManager.setPeripheralScanListener(mPeripheralScanListener);

이렇게 하였는데 프래그먼트에서 하는 행위가 서비스단에서 영향을 받는건가요???

jayjay-dio commented 9 years ago

CentralManager.close() 호출로 인한 이슈는 해결하신거라고 보입니다. 현재 SDK의 경우는 앱의 여러곳에서 CentralManager.setPeripheralScanListener()를 호출하면 가장 마지막 호출된 곳이 유효합니다. 다시 말해서 가장 마시막으로 할당된 PeripheralScanListener 의 객체가 스캔 콜백 이벤트를 받게 되어있습니다.

dkshin commented 9 years ago

답변 감사합니다!!!!