목록안드로이드 개발/안드로이드 (19)
일모도원(日暮途遠) 개발자
구글에 앱을 판매할려면 많은 ID들이 있어서 혼란스럽다. (판매자ID, 개발자 계정 ID, 결제 프로필 ID, 결제 계정 ID) 판매자 ID를 알려면 설정 - 결제 프로필로 간다. 결제 프로필 하단에 설정관리를 클릭한다.그럼 하단에 공개 판매자 프로필에서 "판매자 ID"를 알수 있다.
카메라 기능을 구현하기 위하여 공부하던중, 아래에 있는 코드는 Kotlin으로 되어 있어, 사진 찍고 이미지 파일을 저장하는 부분까지만 자바로 구현해보았다. (자바 11 사용중) https://developer.android.com/codelabs/camerax-getting-started?hl=ko#0 CameraX 시작하기 | Android Developers 이 Codelab에서는 CameraX를 사용하여 뷰파인더를 표시하고, 사진을 찍고, 카메라에서 이미지 스트림을 분석하는 카메라 앱을 만드는 방법을 소개합니다. developer.android.com 먼저 Empty Views Activity를 선택하자. 이름은 적당히주자. 난 package이름을 com.android.example.cameraj..
ExoPlayer를 이용해서 동영상플레이어를 개발하고 있다. 백그라운드에서 동영상을 플레이하고 있으면 시간이 좀 지나면 재생이 멈추는 현상이 발생한다. 이는 Service를 만들어서 해결했다. (오래되어서 서비스를 만들었다는 기억도 잘안난다.) 한참 잘 쓰고 있는데, 동영상을 정지상태에서 다른 앱을 열어서 좀 보다가 다시 돌아오면 플레이버튼이 작동을 안하는 현상을 발견했었다. 다른 모든 기능은 되는데... 자세히 보니 동영상 화면도 검다. 다른앱을 가기전에는 분명히 화면이 보인상태에서 재생만 정지했는데... exoPlayer.setPlayWhenReady(true)를 실행해도 실행이 되지 않는다. exoPlayer는 분명 null이 아닌데, 다시 exoplayer를 init해도 안된다... 귀찮아서 그냥..
분명히 손으로 붙여넣기하면 텍스트가 붙여넣어지는데, 평소에 잘쓰던 아래 코드가 안먹는다. 보니까 hasPrimaryClip이 false를 리턴한다. public static String getTextFromClipboard(Context context) { String str = ""; ClipboardManager cm = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE); if ((cm != null) && (cm.hasPrimaryClip() == true)) { ClipData clip = cm.getPrimaryClip(); ClipData.Item item = clip.getItemAt(0); if ((item != null) &&..
초창기 아이폰을 사용할때, 삼성이 안드로이드 장점으로 내세우던 것중 하나가 SD카드를 통해서 저장공간을 확장할수 있다는거였다. 안드로이드 개발을 시작할때 내부(internal) 저장공간, 외부(external) 저장공간 이라고 말할때, 나는 외부가 저 SD카드처럼 폰에 삽입해서 저장공간을 늘리는걸 말하는줄 알았다. 안드로이드 스튜디오에서 보면 이름이 떡하니 "sdcard"로 되어 있다. 근데 내 폰에는 sd카드가 없는데? 챗GPT에게 물어보니 요즘은 물리적인 sd카드를 안쓰는 추세이지만, 이전과 호환을 위해서 쓰는 이름이라고 한다. 4.0(아이스크림 샌드위치)까지는 물리적인 SD카드를 가리키는 이름이었다고 한다. 그리고 사실 저 sdcard폴더는 심볼릭링크로 나의 경우는 /storage/self/prim..
채팅UI용 오픈소스를 쓰면 되는데, 쓰는데도 공부할 시간이 필요해서 간단한 기능만 일단 만들어 보고 있다. 문제는 채팅 내용이 있는 리사이클 뷰를 키보드가 가리는 현상이다. 구글 검색해보니 "adjustResize"를 manifest에 추가하면 된다는 글도 있었지만, 나는 이미 반영되어 있다. android:windowSoftInputMode="stateAlwaysHidden|adjustPan|adjustResize" 챗GPT에게 물어봤지만 해결이 안되었다. 겨우 검색해서 찾아서 다음 한줄로 해결했다. 리사이클뷰에 addOnLayoutChangeListener를 추가하고 레이아웃이 바뀌면 리사이클 뷰의 맨 마지막으로 스크롤하게 만들었다. binding.rvChatGpt.addOnLayoutChangeLi..
챗GPT API를 쓰는 앱을 개발중에 릴리즈모드에서만 죽는 현상이 발견되었다. 에러로그가 이렇게 알아보기 힘들게 나온다. 다행히 ".NoSuchFieldException: system"라는 문구로 어디가 문제인지는 파악이 된다. E/AndroidRuntime: FATAL EXCEPTION: main Process: com.dalnimsoft.araconv, PID: 17238 java.lang.AssertionError: java.lang.NoSuchFieldException: system at f.h.g.r.k.n$j0.(:792) at f.h.g.r.k.n$w.a(:818) at f.h.g.d.k(:458) at f.h.g.r.k.i.b(:117) at f.h.g.r.k.i.e(:166) at f.h..
OpenSubtitles.com에서 자막을 받아오는 소스를 만들고 있다. 자막을 받아왔는데, "1"이란 숫자만 보인다. 짐작에 자막이 srt포맷이라 맨처음 ID를 보여주는거 같다. 구글링 해보니 GsonConverterFactory를 쓰지 말고 ScalarsConverterFactory를 사용하라고 한다. A converter for strings and both primitives and their boxed types to text/plain bodies. 문자열이나 기본형을 텍스트형태 그대로 보여준다. interface OpenSubtitleDownloadService { @GET Call downloadFile(@Url String url); } public class OpenSubtitleApi..