목록안드로이드 개발 (49)
일모도원(日暮途遠) 개발자
ExoPlayer를 이용해서 동영상플레이어를 개발하고 있다. 백그라운드에서 동영상을 플레이하고 있으면 시간이 좀 지나면 재생이 멈추는 현상이 발생한다. 이는 Service를 만들어서 해결했다. (오래되어서 서비스를 만들었다는 기억도 잘안난다.) 한참 잘 쓰고 있는데, 동영상을 정지상태에서 다른 앱을 열어서 좀 보다가 다시 돌아오면 플레이버튼이 작동을 안하는 현상을 발견했었다. 다른 모든 기능은 되는데... 자세히 보니 동영상 화면도 검다. 다른앱을 가기전에는 분명히 화면이 보인상태에서 재생만 정지했는데... exoPlayer.setPlayWhenReady(true)를 실행해도 실행이 되지 않는다. exoPlayer는 분명 null이 아닌데, 다시 exoplayer를 init해도 안된다... 귀찮아서 그냥..
AlertDialog말고 Material Dialogue를 사용해보고 싶었다. 웹싸이트를 보면 아래처럼 둥근 테두리에 디자인이 좋아 보인다. https://github.com/material-components/material-components-android/blob/master/docs/components/Dialog.md#basic-dialog 에 보면 예제가 있다. new를 붙여서 자바코드를 실행해본다. new MaterialAlertDialogBuilder(this) .setMessage("메시지") .setPositiveButton("OK", null) .setNegativeButton("취소", null) .show(); 근데 나는 왜 둥근 테두리가 안나오지? setRadius가 있으면 좋을..
다이얼로그 레이아웃에서 넓이를 match_parent로 줬는데도, 다이얼로그의 넓이가 많이 작다. 오른쪽 처럼 뷰 넓이의 90%를 만들어 보자. 넓이를 90%로 주기 위해서 아래 아래 두줄을 추가했다. 주의 할점은 dialog.show 다음에 추가해야 한다. int width = (int)(activity.getResources().getDisplayMetrics().widthPixels*0.9); dialog.getWindow().setLayout(width, ViewGroup.LayoutParams.WRAP_CONTENT); private Dialog dialog; ... dialog.show(); int width = (int)(activity.getResources().getDisplayMetri..
분명히 손으로 붙여넣기하면 텍스트가 붙여넣어지는데, 평소에 잘쓰던 아래 코드가 안먹는다. 보니까 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) &&..
구글 플레이에 앱을 올리니 아래와 같은 워닝이 나온다. The developer of Google Mobile Ads (GMA) SDK (com.google.android.gms:play-services-ads) added the following note to SDK version 19.3.0:This version is officially deprecated, and will soon disable ad loading. Please update to a new version. See https://developers.google.com/admob/android/deprecation for more details. 내 코드를 보면 아래처럼 19.3.0을 쓰고 있다. implementation 'com...
리스트가 600개 정도 되는데 이게 전부 다 어댑터에서 binding이 되고 있어서 무척 느리다. 삽질 끝에 소스코드가 아닌, 레이아웃쪽에 문제가 있다는걸 알았다. 원인은 아래 코드가 문제였다. 저 코드로 인해서 리사이클 뷰의 높이가 제대로 안구해져서 어댑터에서 높이에 해당되는 아이템만 바인딩하는게 아니라 리스트내의 모든 아이템을 바인딩 해서 오류가 발생했다. (왜 저코드가 문제인지는 정확히는 잘 모르겠다...) 안되는거 아래처럼 고치면 바인딩이 이슈는 해결되지만 UI문제가 생긴다. 즉 이런씩으로 BottomNavigationView가 일부 잘려져 나온다. 내경우에는 ConstraintLayout 안에 다시 ConstraintLayout으로 레이아웃을 만들지 않아도 되어서 안에서는 그냥 LinearLay..
초창기 아이폰을 사용할때, 삼성이 안드로이드 장점으로 내세우던 것중 하나가 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..