device fragment에서 scan activity를 호출하여 BLE를 스캔/선택하고,
ble address를 device fragment에서 device control fragment로 전송하여 BLE 통신을 연결합니다.(service 사용)
통신을 연결하여 데이터를 주고 받을 수 있습니다.
그런데 다른 fragment로 전환하며 BLE 통신이 끊어집니다.
Toast.makeText 로 확인해보니 fragment 전환 시 onDestroy() 와 onDetach()까지 호출되어서 해당 fragment가 종료되네요.
device fragment에서 BLE 연결을 하고,
다른 fragment로 이동하더라도 ble 통신이 계속 연결되어서 data를 주고 받고 싶은데,
방법을 모르겠습니다.
BottomNavigationView navView = findViewById(R.id.nav_view);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.navigation_home, R.id.navigation_device, R.id.navigation_search, R.id.navigation_community, R.id.navigation_my)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment_activity_main);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(binding.navView, navController);
}
}
다른 블로그에서 찾은 방법으로는
fragment 전화 시 hide으로 감추는 방식으로 BLE 연결을 유지가 되지만,
BLE 연결이 되면 다른 fragment로 전환이 안되었습니다.
private FragmentManager fragmentManager;
private HomeFragment fragmentHome;
private DeviceFragment fragmentDevice;
private SearchFragment fragmentSearch;
private CommunityFragment fragmentCommunity;
private MyFragment fragmentMy;
switch(menuItem.getItemId())
{
case R.id.navigation_home:
if(fragmentManager.findFragmentByTag("Home") != null){ fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("Home")).commit();
}
else {
fragmentHome = new HomeFragment();
fragmentManager.beginTransaction()
.add(R.id.nav_host_fragment_activity_main, fragmentHome, "Home")
.commit();
}
if(fragmentManager.findFragmentByTag("Device") != null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("Device")).commit();
}
if(fragmentManager.findFragmentByTag("Search") != null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("Search")).commit();
}
if(fragmentManager.findFragmentByTag("Community") != null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("Community")).commit();
}
if(fragmentManager.findFragmentByTag("My") != null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("My")).commit();
}
return true;