紧随上一篇,说一下创建ip拨号器过程中出现的一些问题。
1)在一开始监听外拨电话的时候会报这样一个警告:
Permission Denial: receiving Intent { act=android.intent.action.NEW_OUTGOING_CALL flg=0x10000010 (has extras) } to com.heng.ipdail/.OutCall requires android.permission.PROCESS_OUTGOING_CALLS due to sender com.android.phone (uid 1001)
从大概意思上可以看出,要想实现监听功能我们需要一个监听外拨电话的权限,找到清单文件,加入以下权限:android.permission.PROCESS_OUTGOING_CALLS,再加载一下就没问题了。
2)不显示LogCat。这个问题是昨晚刚发现的,要查看日志发现窗口没了,于是找了下资料,在一片博客里找到了答案,流程是这样的: Preferences->Android->LogCat 然后设置成VERBOSE,上图一张:
3)模拟器没有拨号功能。这个比较郁闷,找了很久都没找到,最后在短信里发现了拨号功能,但只能拨打已存在的电话,可能是我的软件有问题,还望大神指点一二。
4)模拟器桥接断开。这个应该属于系统问题,我之前建了两个模拟器,这几天主要用的5554,但昨晚加载程序时总是挂到5556上,试了好几次都不行,然后问了下组长,说需要重启adb,先进入ddms(在windows中能找到,前边也说过这个),找到Threads,直接上图吧:
5)最后补充一下上一篇提到的监听类(OutCall),它继承了BroadcastReceiver,实现了接收事件的功能,作为四大组件之一,我们需要在清单文件中对其进行配置:
<!-- 定义了一个广播接受者 ,它关心的事件为“新的外拨电话”--> <receiver android:name=".OutCall"> <intent-filter > <action android:name="android.intent.action.NEW_OUTGOING_CALL"/> </intent-filter> </receiver>
这个定义是在application节点下的,首先指定名称(".OutCall),‘.‘代表当前包名;<intent-filter >为对应的意图过滤器,它通过指定action来设置当前监听器所关心的广播事件,我们用的是NEW_OUTGOING_CALL,当然还可以设置其他的关心事件,在本例中只需要关心外拨电话就OK了。