【Android应用开发】-(23)Android SIP 支持

一、什么是sip

请移步SIP

二、Android中如何使用sip

目前比较完善的Sip应用:Sipdroid, Demo: android-sdk-windows\samples\android-9\ SipDemo

三、系统不支持sip

Android2.3之后就提供了SIP功能,SIP相关的API在目录frameworks/base/voip/java/android/net/sip中,存在android.net.sip包中。这里是解决不支持SIP的整个过程, 要看结果的直接移步文章最后。

在操作SIP之前必须获得SipManager的实例:

SipManager.newInstance(Context);

这里,发现有些设备得到的instance为空。找到SipManager.java中的newInstance方法

     
       /**
        * Creates a manager instance. Returns null if SIP API is not supported.
        *
        * @param context application context for creating the manager object
        * @return the manager instance or null if SIP API is not supported
        */
       public static SipManager newInstance(Context context) {
           return (isApiSupported(context) ? new SipManager(context) : null);
       }
    
       /**
        * Returns true if the SIP API is supported by the system.
        */
       public static boolean isApiSupported(Context context) {
           return context.getPackageManager().hasSystemFeature(
                   PackageManager.FEATURE_SIP);
       }

通过调试,发现hasSystemFeature为空。继续深入,查看在PackageManager.java的方法hasSystemFeature,尽然是抽象的。

      /**
        * Check whether the given feature name is one of the available
        * features as returned by {@link #getSystemAvailableFeatures()}.
        *
        * @return Returns true if the devices supports the feature, else
        * false.
        */
       public abstract boolean hasSystemFeature(String name);

其中这个方法在services/java/com/android/server/pm/ PackageManagerService.java中实现了。

 public boolean hasSystemFeature(String name) {
        synchronized (mPackages) {
            return mAvailableFeatures.containsKey(name);
        }
    }

在成员mAvailableFeatures中没有查找到PackageManager.FEATURE_SIP,返回flase。所以无法创建SipManager对象。在PackageManagerService类中,成员变量mAvailableFeatures的值是通过读取/system/permissions下的xml文件进行设置的。通过查找常量PackageManager.FEATURE_SIP很容易找到两个和SIP相关的xml文件,在目录frameworks/base/data/etc/下。根据以往的经验,这两个文件既然存在,但/system/permissions目录下没有。肯定是没有拷贝。

继续查找,发现在device目录下的Vending.mk文件中。将frameworks/base/data/etc/下的两个和sip相关的文件拷贝添加进去make即可。

   PRODUCT_COPY_FILES += \
       device/amlogic/g04ref/tablet_core_hardware.xml:system/etc/permissions/tablet_core_hardware.xml \
       frameworks/base/data/etc/android.hardware.camera.front.xml:system/etc/permissions/android.hardware.camera.front.xml \
       ...
       frameworks/base/data/etc/android.software.sip.voip.xml:system/etc/permissions/android.software.sip.voip.xml \
       frameworks/base/data/etc/android.software.sip.xml:system/etc/permissions/android.software.sip.xml

如果不编译系统,直接将两个文件拷贝到/system/permissions目录下也是可以的。

原创文章,转载请注明出处:http://blog.csdn.net/tangcheng_ok



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值