안드로이드 기기에서 오디오 지연값을 자동으로 계산하는 방법

아래 메소드를 이용하면 기기상의 오디오 설정을 인식하여 계산된 레이턴시 값을 반환합니다.

원래는 Android SDK상에서 제공되는 메소드입니다.
하지만 Private 메소드라서 일반적인 접근이 불가능하여 Reflection을 이용, 접근 후 값을 가져오는 방식입니다.

public int getAndroidLatency() {
   int latency = 0;
   AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
   try {
      Method m = am.getClass().getMethod("getOutputLatency", int.class);
      latency = (Integer) m.invoke(am, AudioManager.STREAM_MUSIC);
   }
   catch (Exception e) {
   }
   return latency
}

C#에서 다양한 타입에 대응하는 List 제작하기

최근 C#을 통한 개발을 진행 하는 도중 여러 종류의 JSON파일을 읽어 List로 변환해야 됐던 경우가 있었다.

dynamic을 이용하고, 변수를 선언하고 초기화를 하려니 내가 쓰는 JSON 라이브러리는 string을 데이터 타입으로 변환할 경우 type을 지정해줘야됐다.

하지만, 타입을 지정하는건 C#에 Type이라는 자료형이 존재하기 때문에 문제가 없으나 List의 경우 초기화할 때 자료형을 또 지정해줘야한다.

그래서 생각나는대로 List<T> 선언 시 typeof를 사용하여 Type를 지정해주었으나 오류가 발생하였다.

검색해보니 상속받은 Type 자료형의 MakeGenericType이라는 메소드를 사용하면 됐었다.

결국 아래와 같은 코드를 사용하여 해결하였다.

dynamic datas = JsonConvert.DeserializeObject(savedString, typeof(List<>).MakeGenericType(this.info.jsonType));