最近在做android源码Phone的定制,期间来电的时候会遇到一个异常,查了很久才解决,先上Log:
W/ResourceType( 163): Failure getting entry for 0x7f04000f (t=3 e=15) in package 0 (error -75)
D/AndroidRuntime( 163): Shutting down VM
W/dalvikvm( 163): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
D/dalvikvm( 163): GC_CONCURRENT freed 354K, 5% free 7679K/8071K, paused 3ms+18ms
E/AndroidRuntime( 163): FATAL EXCEPTION: main
E/AndroidRuntime( 163): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.phone/com.android.phone.InCallScreen}: android.content.res.Resources$NotFoundException: Resource ID #0x7f04000f
E/AndroidRuntime( 163): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955)
E/AndroidRuntime( 163): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
E/AndroidRuntime( 163): at android.app.ActivityThread.access$600(ActivityThread.java:122)
E/AndroidRuntime( 163): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
E/AndroidRuntime( 163): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 163): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime( 163): at android.app.ActivityThread.main(ActivityThread.java:4340)
E/AndroidRuntime( 163): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 163): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 163): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
E/AndroidRuntime( 163): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
E/AndroidRuntime( 163): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 163): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f04000f
E/AndroidRuntime( 163): at android.content.res.Resources.getValue(Resources.java:1019)
E/AndroidRuntime( 163): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2107)
E/AndroidRuntime( 163): at android.content.res.Resources.getLayout(Resources.java:858)
E/AndroidRuntime( 163): at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
E/AndroidRuntime( 163): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
E/AndroidRuntime( 163): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251)
E/AndroidRuntime( 163): at android.app.Activity.setContentView(Activity.java:1835)
E/AndroidRuntime( 163): at com.android.phone.InCallScreen.onCreate(InCallScreen.java:520)
E/AndroidRuntime( 163): at android.app.Activity.performCreate(Activity.java:4465)
E/AndroidRuntime( 163): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
E/AndroidRuntime( 163): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
E/AndroidRuntime( 163): ... 11 more
在网上找了很多类似LOG的解决办法,不过都不是我想要的,后来自己慢慢排查才发现是这个原因造成的:
在定制通话界面的时候,需要把固定的竖屏通话界面改为横屏通话界面,修改AndroidManifest.xml中的配置后,把和通话界面相关的
call_card.xml,
incall_screen.xml,
incall_touch_ui.xml,
dtmf_twelve_key_dialer_view.xml,
dialpad.xml等都移到了layout-land文件夹下,结果造成了InCallScreen中setContentView(R.layout.incall_screen);报错。
电话的处理逻辑非常复杂,具体为何会报错小弟也没弄清楚,但是把以上文件放到layout文件夹下,问题即可解决。