반응형
크래시틱스에 아래와 같이 이슈가 올라왔습니다.
Fatal Exception: java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.VIEW dat=https://webdt.edunet.net/... cmp=com.mxtech.videoplayer.ad/com.mxtech.videoplayer.ActivityWebBrowser } from ProcessRecord{8de9fc0 1592:com.***.***.***/u0a269} (pid=1592, uid=10269) not exported from uid 10247
at android.os.Parcel.createExceptionOrNull(Parcel.java:2376)
at android.os.Parcel.createException(Parcel.java:2360)
at android.os.Parcel.readException(Parcel.java:2343)
at android.os.Parcel.readException(Parcel.java:2285)
at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3882)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1727)
at android.app.Activity.startActivityForResult(Activity.java:5389)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:574)
at android.app.Activity.startActivityForResult(Activity.java:5347)
at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:560)
at android.app.Activity.startActivity(Activity.java:5733)
at android.app.Activity.startActivity(Activity.java:5686)
at com.***.***.***.ui.common.activity.BaseDetailActivityV2$initViews$5$1$1.shouldOverrideUrlLoading(BaseDetailActivityV2.kt:552)
at org.chromium.android_webview.AwContentsClientBridge.shouldOverrideUrlLoading(:90)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:335)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:7861)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:600)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
소스의 해당 위치를 살펴보니 웹뷰의 shouldOverrideUrlLoading() 함수에서 Intent.ACTION_VIEW 로 외부 브라우저를 호출할때 발생하였습니다.
특별히 이상한 부분이 없어 에러 내용을 자세히 살펴보니 아래와같은 내용이 눈에 띄었습니다.
cmp=com.mxtech.videoplayer.ad/com.mxtech.videoplayer.ActivityWebBrowser
위의 패키지 네임을 구글링을 해보니, MX 플레이어가 나왔습니다.
MX 플레이어에 브라우저 기능을 하는 웹뷰 Activity가 있고, 이를 사용자가 선택하여 발생하는 이슈였습니다.
이를 해결하려면 MX 플레이어의 ActivityWebBrowser에 android:exported="true" 를 설정을 해야하는데, 다른 앱에 어떻게 설정을 하겠습니까?
그래서, 외부 부라우저 호출시에 exported 여부를 확인하도록 수정하였습니다.
Intent(Intent.ACTION_VIEW, url).also {
try {
val activityInfo = it.resolveActivityInfo(packageManager, it.flags)
if(activityInfo != null && activityInfo.exported) {
context.startActivity(it)
}
} catch (e: ActivityNotFoundException) {
Toast.makeText(context, "연결할수 있는 앱이 없습니다.", Toast.LENGTH_SHORT).show()
}
}
반응형
'Android + Kotlin' 카테고리의 다른 글
Koin + MVVM + Coroutine + Flow 를 이용한 상세화면 만들기 (1) | 2022.01.02 |
---|---|
Android 프로젝트에 Vector Image(SVG) 추가하기 (0) | 2021.12.30 |
DataBinding을 사용한 BaseFragment 만들기 (0) | 2021.12.28 |
DataBinding을 결합한 BaseActivity 만들기 (0) | 2021.12.28 |
[Android] Ripple Effect 라운드 버튼 만들기 (0) | 2021.12.27 |