Open dkshin opened 9 years ago
안녕하세요. 안드로이드 개발 담당자입니다.
WIZTURN 매니저앱에서 이슈가 발생하는건지, WIZTURN SDK를 이용해 앱을 만드셨는데 그 앱에서 이슈가 발생했다는건지 답변 주시면 감사하겠습니다.
sdk를 이용한 앱입니다. wizturn 매니저에서는 이현상은 안일어나네요
그 현상이 일어날 때 로그를 보면 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 하면 앱이 죽네요
아네, 로그를 보시면
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() 으로 리스너 등록이 가능합니다.
onDetach()에서 만 close를 하고있습니다. PeripheralScanListener는 전역변수이고 리스너를 지우지는 않구요 음 한 화면에서 반복을 하고 같은 동작을 하는것인데 리스너가 할당하지 않는다는게 이상해서요
Listener는 CentralManager.close()가 호출되면 내부적으로 해제됩니다. 어딘가에서 close()를 호출하는것으로 보입니다. 각 메소드 호출전후에 로그를 집어넣으시고 로그분석해 보시길 권장합니다.
if (centralManager != null) { centralManager.close(); }
centralManager = CentralManager.getInstance(); centralManager.init(getActivity()); centralManager.setPeripheralScanListener(mPeripheralScanListener);
이구문을 반복할때 마다 해주는데 close 후 다시 연결해주면 문제가 있나요?
네~! If statement의 CentralManager.close()를 주석처리하면 문제가 없어집니다. CentralManager.close()는 대개 앱종료할때 메인 액티비티의 onDestroy()에서 호출하시면 됩니다.
원인은 close 때문이 맞네요!!! 프래그먼트단에서 CentralManager.close()는 지웠는데 그대로 오류가 나서 서비스쪽을 확인해본결과 제가 서비스단에서 close를 시키고 있어서 해당현상이 일어났던 것이었습니다.
근데 서비스단에서 centralManager = CentralManager.getInstance(); centralManager.init(getApplicationContext()); centralManager.setPeripheralScanListener(mPeripheralScanListener); 이렇게 생성하고있고
다른 프래그먼트에서 centralManager = CentralManager.getInstance(); centralManager.init(getActivity()); centralManager.setPeripheralScanListener(mPeripheralScanListener);
이렇게 하였는데 프래그먼트에서 하는 행위가 서비스단에서 영향을 받는건가요???
CentralManager.close() 호출로 인한 이슈는 해결하신거라고 보입니다. 현재 SDK의 경우는 앱의 여러곳에서 CentralManager.setPeripheralScanListener()를 호출하면 가장 마지막 호출된 곳이 유효합니다. 다시 말해서 가장 마시막으로 할당된 PeripheralScanListener 의 객체가 스캔 콜백 이벤트를 받게 되어있습니다.
답변 감사합니다!!!!
버튼 ->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에서는 아직까진 이런 현상이 안일어 났네요 해당 오류의 원인을 알고 싶습니다.