본문 바로가기

MOBILE/android

(11)
[Android] intent가 왜 이럴까 특정 시간 알림을 설정하는데 내 코드 구조는 1. intent에 알림 정보를 담아서 pendingintent에 넣음 2. 그걸 alarmManager.set() 로 설정함 3. alarmmanager 는 broadcast receiver를 상속받아서 구현 4. 거기에 전달된 intent에 (알림 정보 담겨있는 intent) string extra 정보를 꺼내서 다시 intent에 넣고 5. 서비스로 보내서 서비스에서 알림을 처리함 간단하게 MainActivity => BroadcastReceiver => Service 근데 이때 1번과 4번에서 사용한 인텐트 모두 명시적 인텐트를 사용했음 // 1번: 알림 매니저 설정하는 코드 Intent alarmIntent=new Intent(MainActivity...
[Android] common Intent: android에서 웹을 검색어로 연결하자 근데 여기에 RecyclerView를 곁들인. android에서 웹을 열고 싶은데 검색어를 검색한 웹을 열고 싶을 때는 common intent를 쓰면 된다 구글 공식 문서에 공통 인텐트에 대한 내용이 상세하게 나와있다. https://developer.android.com/guide/components/intents-common?hl=ko#java Intent의 action을 ACTION_WEB_SEARCH SearchManager.QUERY를 intent의 extra로 넣으면 된다. 구글 공식 문서에 잘 설명해둠 이걸 나의 프로젝트에 적용해보면 일단 recycler view의 item을 클릭했을 때 textView의 text를 가져와서 web으로 검색하는 코드이다. 그럼 쉽게 TextView query=v.findViewById(R.id.text..
[Android] Android 4대 구성요소: Activity, Service, BroadcastReceiver, ContentProvider 서비스 : 시간이 오래 걸리는 작업들은 백그라운드 서비스로 실행시켜야한다. 안드로이드 서비스는 액티비티에 종속되어있다. 따라서 별개의 thread가 아니라 main thread에서 실행된다. Activity와 달리 UI가 없는게 특징이다. 이때 안드로이드 서비스가 액티비티에 종속되어 메인 스레드에서 실행되기 때문에 서비스에서 deadlock이 걸리게 되면 메인 액티비티도 중지된다. 또는 서비스에서 오래 걸리는 작업을 별개의 thread에서 실행하지 않으면 메인 스레드의 UI 또한 중지되므로 os는 ANR 즉 android not responding 발생시켜 앱 프로세스가 강제종료된다. 요약하자면 서비스는 시간이 오래 걸리는 작업을 백그라운드에서 진행할 때 사용하는데 별개의 thread가 아닌 메인 스레드..
[Android] Notification, PendingIntent로 알림 활용하기 Notification 안드로이드의 알림서비스이다. 상단바에 보이는 것들이 알림인데 os가 관리하기 때문에 NotificationManager 시스템 서비스를 이용해서 os에게 넘긴다. 이때 알림을 눌렀을 때 어떤 action을 만들고 싶은 경우 pendingIntent 객체에 intent를 담아 시스템에서 대기하도록 해야한다. pendingIntent는 지정된 상황이 올 때까지 intent를 보관하고 있으므로 알림을 눌렀을 때 intent를 실행한다. 즉 intent를 PendingIntent 객체에 넣고 PendingIntent 객체를 Notification 객체에 넣고 NotificationManager에 Notification 객체를 등록하게 되면 시스템의 알림 서비스에 전달된다. 요약하면 다음과..
[오류일기] android pendingIntent IllegalArgumentException 안드로이드 12를 타겟팅 하는 수준에서는 pending intent의 flag를 immutable or mutable 둘 중 하나를 꼭 명시해야 한다. noti를 변경 가능한지 아닌지 명시해야함 noti의 Direct Reply Action을 사용한다면 flag를 mutable로 설정해야 한다. 예를 들면 이런식으로 flag를 두개를 동시에 설정할 수도 있다. Intent intent=new Intent(this,subActivity.class); PendingIntent pendingIntent=PendingIntent.getActivity(this,101,intent, PendingIntent.FLAG_UPDATE_CURRENT|PendingIntent.FLAG_IMMUTABLE); 구글 공식 문서에..
[Android] AlertDialog, DatePickerDialog, TimePickerDialog: Dialog 모음 및 사용 AlertDialog class 일종의 사용자 대화창이라고 부르는데 나는 그냥 팝업 창이라고 부름 제목, 아이콘, 메세지, 목록, 버튼은 최대 3개까지 지원해준다. 사용법은 간단하다. 1. AlertDialog.Builder 객체 생성 2. 원하는 기능에 따라 - 제목: setTitle() - 아이콘: setIcon() - 메세지: setMessage() - 목록: setItems() - 버튼: setPositiveButton(),setNegativeButton() 으로 설정 3. AlertDialog.Builder 객체에 create() 메서드로 AlertDialog 객체를 생성 4. AlertDialog 객체에 show 메서드로 화면에 표시 alerttButton.setOnClickListener(n..
[Android] option menu, context menu, popup menu: Menu 모음 및 사용 안드로이드에서 제공하는 메뉴는 크게 3가지 형태이다. 1. option menu : action bar에 달려있는 기본 메뉴 -> 앱 전체에 작용한다. 액티비티에 종속되기 때문에 액티비티별로 메뉴가 다르게 설정할 수도 있음 2. context menu : view 를 길게 누르면 나타나는 메뉴 -> 현재 선택된 view에만 작용한다. 3. popup menu : view를 클릭하면 나타나는 메뉴 -> 현재 화면에 있는 모든 view에 작용한다. menu 사용하기 1. option menu 크게 두개의 메서드를 오버라이딩해서 구현해야 한다. - onCreateOptionsMenu - onOptionsItemSelected (1) onCreateOptionsMenu: Menu 정의 public boolean..
[오류 일기] android.view.InflateException: Binary XML file line ___ - bottomnavigationview inflate 오류 하단 탭 bottomnavigationview를 사용하던 와중에 갑자기 오류가 났다 디버그 실행을 하니까 menu의 xml 파일에 문제가 있는 걸로 보였다 그래서 여러 번 코드를 추가하고 삭제하는 과정을 통해서 실험을 몇번 했는데 item에 onclick 속성이 들어가면 오류가 뜨는 것이었음 구글 안드로이드 개발자 문서를 좀 찾아봤는데 ?? 이게 무슨 소리지 onClick에 메서드를 쓰라고? 해서 메뉴 리소스 문서를 더 찾아봤다 메뉴 리소스 | Android 개발자 | Android Developers button 때문에 onClick은 true, false만 해두고 처리는 Mainactivity에서 하는 줄 알았는데 onClick에는 실행될 메서드를 쓰는 거였다 이거 때문에 꽤나 고생했네 하.. 결론:..