마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안녕하세요 시리얼통신 문의드립니다

0 추천
현재

https://github.com/kai-morich/SimpleUsbTerminal 해당 예제 사용하여

시리얼통신에 성공하였습니다.  실행하면 연결가능 리스트가 뜨고

연결할 보드를 누르면 terminalfragment가 뜨고 데이터가 정상적으로 잘 출력이되는데요..

혹시 연결된상태 유지하면서 액티비티간 전한은 어떻게 할수있을까요 ㅜㅜ

조언 부탁드립니다.. 감사합니다 ㅜㅜ
kmd2410 (180 포인트) 님이 2022년 8월 19일 질문

1개의 답변

+1 추천
 
채택된 답변

원하시는대로 하려면 같은 인스턴스가 여러군데서 접근 가능해야 할 것 같은데요. 먼저 해당 시리얼 통신을 담당할 클래스를 하나 만드세요. 예를 들면 SerialCommunicationRepository라고 하면, 이 클래스의 인스터스를 Application 클래스에 만드세요.

https://developer.android.com/reference/android/app/Application

public class SerialCommunicationRepository {
   // 시리얼 통신에 필요한 로직을 이 클래스에 위치
}

public class AppModule  {     
    
      private final SerialCommunicationRepository serialCommunicationRepository = new SerialCommunicationRepository()
    
     privat  SerialCommunicationRepository getSerialCommunicationRepository() {
           return serialCommunicationRepository;
     }
}

public class MyApp extends Application {
     
     private AppModule appModule;

     @Override
     public void onCreate() {
         super.onCreate();
         appModule = new AppModule();
    }

   public AppModule getAppModule() {
        return appModule;
   }
}

당연히 MyApp을 AndroidManifest.xml에 등록을 하셔야 겠죠? 이렇게 하면 AppModule은 singleton으로 앱 전체에 한개의 인스턴스만 생성될 겁니다. SerialCommunicationRepository도 마찬가지일거구요, 이제 액티비티에서 Applcation 인스턴스에 접근해서 AppModule을 가져오면 됩니다.

public class FirstActivity extends AppCompatActivity {
      
       private AppModule appModule;

       @Override
       public void onCreate(...) {
            appModule = ((MyApp) getApplicationContext()).getAppModule();
            super.onCreate(...)
       }
}

 

동일한 방법으로 다른 액티비티에서도 사용하시면 될 겁니다.AppModule을 가져오는 코드가 많이 반복되면 유틸리티 클래스를 만들어 코드를 빼거나 BaseActivity(덜 권장함)를 만들어 사용하시면 됩니다.

spark (227,530 포인트) 님이 2022년 8월 19일 답변
kmd2410님이 2022년 8월 22일 채택됨
...