Android2.3 Sip简单分析( 六 )


//实现其接口方法,在.java中是实现了一个名为start()的方法 , 里面有句是.("sip",());表示已经交给统一管理了

一(以为例)
1、而在需要用到时 , 也就是我们构造的时候 , 就通过.(.)获得SIP的服务(类型为)
2、并调用 .Stub.();去获取一个实例(前提是该一定是通过.的方式添加进去管理的 , 这样才能找到此)
二(以普通为例)
1、利用= new (.this,.class);-->(, , .);来绑定 , 在的方法中 , 使用.stub.();来获取实例 。
B、创建好后 , 先从中获取,及pwd , 如果第一次进来没有设置这些的话则需要先创建账户 , 这里用来保存用户信息 , 好处是当填写信息并返回后 , 会自动将值放入中 。我们假设="woody";="192.168.12.30";pwd="" 。
C、这时 , 我们的以及用户信息已经设定好了 , 接下来使用了这句.= new .(, );我们去看看.中做了些什么:
mUri =.(,);
.=; //设置
(在.方法中 , 我选取了一些核心代码)
=new ("sip:");
.(user);
.("@");
//if host is an IPv6weit in sq
if(host.(':') !=host.(':')&&host.trim().(0) !='[')
host='['+host+']';
.(host);
smp=new ();
=smp.(.());
;
从以上代码可以看出其实就是在 罢了 , 里面多加了个if host为IPV6的判断(IPv4为为32位 , 十进制;IPv6为128位 , 16进制) 。最后为"sip:woody@192.168.12.30" , smp.()方法中 , 有关于是如何parse的就不做阐述了,总之最后返回了一个
D、接下来就是= ..build(); //返回一个
在..build()中 , 设置了的pwd值 , 删除了之前对象里的(mUri.(null);)、将的属性设置为类型的对象值、调用.返回一个,并.=.();
E、创建对象:(与区别在于是及时启动 , 而是不立刻反应 , 在特定的情况或通知下才启动 , 适用于等)
i = new ();
i.("..");
pi = .(this, 0, i, .);
F、.open(,,null); //(实际是在做操作)设置的-->建立SIP连接(算是注册至SIP )-->打开
其中建立SIP连接 , 最后能追溯到是在.java的reset()方法中通过是注册服务器实现的 , 
注册服务器的步骤为:
(1)设置服务器的属性,例如服务器的地址()、栈名(javax.sip.)、发出去的路径(中的javax.sip.)、线程池的大小(gov.nist.javax.sip.)等,并且将这些属性加载到服务器中.
(2)通过的静态方法取得一个实例,然后通过实例
(3)创建一个实例(这一步获得,= .("javax.sip.");)
(4)用创建一个实例
(5)注册
G、A~F步骤都是在做准备工作 , 大致的步骤如下:new -->new -->设定用户信息-->new -->new -->new -->set-->(.)open --> 现在是call ~呼叫的工作是类来完成(可用.或来实例化,.时需要 , , , () 时需要S )
【1】当需要呼叫时 , 使用.( ,, .,int );来创建一个,其中以为单位 , 过了表示打电话超时 。需要打给别人时使用创建 , 接听电话用来创建
【2】中有一个嵌套的class:.(此类主要用于监听SIP CALL , when[呼叫电话 or 接听电话])
.= new .() {
@
void ( call) { //呼叫建立
call.(); //启动音频
call.(true); //调整为可讲话模式
call.(); //触发无声
(call);
};
call = .(me.(), , , 30);
(以上例子为)
【3】我们看看()方法(2 ):
call =new (, );
call.(); //这两句很简单就是创建一个local的
s = (, null); -->.(, null);// 来创建 , 并保存在中