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

startActivityForResult가 SecurityException을 낼 경우

0 추천
먼저 현재는 결과가 필요한 액티비티 사용에 ActivityResultLauncher를 쓴다는 것은 알고 있고

제가 작성한 코드가 아닌 남이 3년 전 쯤에 작성한 코드를 유지보수 하고 있는 단계임을 알립니다

 

 

구글 플레이 콘솔에서 SecurityException을 발생시키는 곳을 찾아봤는데 Intent에 ACTION_IMAGE_CAPTURE 상수를 넣어 startActivityForResult로 이동하는 부분입니다

 

아래는 스택 트레이스 입니다

Exception java.lang.SecurityException:
  at android.os.Parcel.createExceptionOrNull (Parcel.java:3023)
  at android.os.Parcel.createException (Parcel.java:3007)
  at android.os.Parcel.readException (Parcel.java:2990)
  at android.os.Parcel.readException (Parcel.java:2932)
  at android.app.IActivityTaskManager$Stub$Proxy.startActivity (IActivityTaskManager.java:2774)
  at android.app.Instrumentation.execStartActivity (Instrumentation.java:1801)
  at android.app.Activity.startActivityForResult (Activity.java:5583)
  at androidx.activity.ComponentActivity.startActivityForResult (ComponentActivity.java:574)
  at android.app.Activity.startActivityForResult (Activity.java:5541)
  at androidx.activity.ComponentActivity.startActivityForResult (ComponentActivity.java:560)
  at kr.or.cwma.smrt.PhotoActivity.dispatchTakePictureIntentEx (PhotoActivity.kt:645)
  at kr.or.cwma.smrt.PhotoActivity.getPhoto (PhotoActivity.kt:583)
  at kr.or.cwma.smrt.PhotoActivity.onClick (PhotoActivity.kt:405)
  at android.view.View.performClick (View.java:7881)
  at android.view.View.performClickInternal (View.java:7858)
  at android.view.View.-$$Nest$mperformClickInternal
  at android.view.View$PerformClick.run (View.java:30863)
  at android.os.Handler.handleCallback (Handler.java:942)
  at android.os.Handler.dispatchMessage (Handler.java:99)
  at android.os.Looper.loopOnce (Looper.java:226)
  at android.os.Looper.loop (Looper.java:313)
  at android.app.ActivityThread.main (ActivityThread.java:8741)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:571)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1067)
Caused by android.os.RemoteException: Remote stack trace:
  at com.android.server.wm.ActivityTaskSupervisor.checkStartAnyActivityPermission (ActivityTaskSupervisor.java:1295)
  at com.android.server.wm.ActivityStarter.executeRequest (ActivityStarter.java:1342)
  at com.android.server.wm.ActivityStarter.execute (ActivityStarter.java:1004)
  at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser (ActivityTaskManagerService.java:1933)
  at com.android.server.wm.ActivityTaskManagerService.startActivityAsUser (ActivityTaskManagerService.java:1806)

 

아래에 있는 checkStartAnyActivityPermission

이 부분이 마음에 걸리는데 이건 혹시 캡쳐화면으로 이동할 때 퍼미션 체크를 안해줘서 그런 걸까요??

아니면 그냥 deprecated 된 함수라 다소의 오류가 있는 걸까요?
ㅇㅇㅇㅇㅇㅇㅇㅇ (1,000 포인트) 님이 2023년 1월 13일 질문
ㅇㅇㅇㅇㅇㅇㅇㅇ님이 2023년 1월 13일 수정

1개의 답변

0 추천

혹시 에러메세지가 아래처럼 나오나요?

java.lang.SecurityException: Permission Denial:
with revoked permission android.permission.xxx

그렇다면, 퍼미션 핸들링을 안하셔서 그렇다고 봐야죠.

spark (227,510 포인트) 님이 2023년 1월 13일 답변
아닙니다. 딱 위에 상기한 메세지 대로 나옵니다.
그래서 너무 답답한 것 같습니다.

차라리 원인이라도 달려 있으면 알기 쉬울텐데 말이죠...
정확히는 에러 메세지가 있을 수도 있는데 적어도 구글 플레이 콘솔에서는 안 나오네요...
제가 테스트 할 때는 저 오류가 재현이 안돼서요...
...