안드로이드 웹뷰 메소드 호출이 안될 때 (android.permission.INTERACT_ACROSS_USERS_FULL)
웹뷰(Javascript)와 안드로이드간 메소드를 호출하려고 하는데 ,
안드로이드 > 자바스크립트로는 메소드 호출이 되지만
자바스크립트 > 안드로이드로는 메소드 호출이 안되는 경우가 있다.
오늘 이 현상때문에 개고생을 하다가 결국 원인을 찾아냈다.
수없이 올라오는 로그를 자세히 보니 웹뷰에서 안드로이드의 메소드를 호출 할 때
Writing exception to parcel
java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13192)
at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2044)
at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:615)
at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
at android.os.Binder.execTransact(Binder.java:388)
at dalvik.system.NativeStart.run(Native Method)
소스코드를 아무리 변경해봐도 안되고, 퍼미션에 찾아봐도 저런 퍼미션은 없었다.
원인은 AndroidManifest.xml 파일의 android:targetSdkVersion="18" 이 문제였다.
웹뷰 > 안드로이드는 4.2버전부터 호출이 막혔다고 한다.
(http://ttorr.blogspot.kr/2014/03/kitkat44-loadurl.html)
android:targetSdkVersion을 16 이하로 설정하거나, 아예 없어버린 뒤 해결되었다.
==================================================================================
14/10/14 추가 : import android.webkit.JavascriptInterface; + 메소드에 @JavascriptInterface 어노테이션을 추가하면 api level 17 이상에서도 작동한다.
(http://stackoverflow.com/questions/16353430/appview-addjavascriptinterface-does-not-work-on-api-17)