2011-07-14 14 views
5

Android 3.1の内蔵SIPを使用してVOIPコールを実行しようとしています。私は物理的なタブレットデバイス(銀河タブ10.1)を持っています。Android VOIP SipException:SipSessionの作成に失敗しました

テスト目的のために、SipDemo exampleからプロジェクトを作成しました。うまくいきます! (私の資格情報が有効で、デバイス/ネットワークが正常であることを意味します)。

私たManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="modera.com.doorcontroller" android:versionCode="1" android:versionName="1.0"> 

    <application android:icon="@drawable/logoeditedsmall" android:label="@string/app_name" android:debuggable="true"> 
     <activity android:name="MainActivity" android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     </activity> 

     <activity android:name="CallActivity"></activity> 

</application> 

<uses-sdk android:minSdkVersion="11" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.USE_SIP" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

<uses-feature android:name="android.hardware.sip.voip" android:required="true" /> 
<uses-feature android:name="android.hardware.wifi" android:required="true" /> 
<uses-feature android:name="android.hardware.microphone" android:required="true" /> 

</manifest> 

私のバックエンドのコード:このコードを実行する

public void initializeManager() { 
    if (manager == null) { 
     manager = SipManager.newInstance(this); 
    } 

    if (me != null) { 
     closeLocalProfile(); 
    } 

    try { 
     SipProfile.Builder builder = new SipProfile.Builder(username, 
       domain); 
     builder.setPassword(password); 
     builder.setOutboundProxy(proxy); 
     me = builder.build(); 

     manager.open(me); 

     manager.setRegistrationListener(me.getUriString(), 
       new SipRegistrationListener() { 

        @Override 
        public void onRegistering(String localProfileUri) { 
         Log.i("MY", "onRegistering"); 

        } 

        @Override 
        public void onRegistrationDone(String localProfileUri, 
          long expiryTime) { 
         Log.i("MY", "onRegistrationDone"); 

        } 

        @Override 
        public void onRegistrationFailed(
          String localProfileUri, int errorCode, 
          String errorMessage) { 
         Log.i("MY", "onRegistrationFailed"); 

        } 
       }); 

    } catch (ParseException pe) { 
     Log.e("MY", pe.toString()); 
    } catch (SipException se) { 
     Log.e("MY", se.toString()); 
    } 
} 



public void initiateCall() { 

    try { 
     SipAudioCall.Listener listener = new SipAudioCall.Listener() { 

      @Override 
      public void onCallEstablished(SipAudioCall call) { 
       call.startAudio(); 
       call.setSpeakerMode(true); 
       call.toggleMute(); 
       Log.i("MY", "oonCallEstablished"); 
      } 

      @Override 
      public void onCallEnded(SipAudioCall call) { 
       Log.i("MY", "onCallEnded"); 
      } 
     }; 

     call = manager.makeAudioCall(me.getUriString(), sipAddress, 
       listener, 30); 

    } catch (Exception e) { 
     Log.e("MY", e.toString()); 
     if (me != null) { 
      try { 
       manager.close(me.getUriString()); 
      } catch (Exception ee) { 
       Log.e("MY", ee.toString()); 
      } 
     } 
     if (call != null) { 
      call.close(); 
     } 
    } 
} 

(最初に私はinitalizeManagerを使用して、initalizeた後、私はinitateCallを実行します)私が受け取ります例外:

android.net.sip.SipException: Failed to create SipSession; network unavailable? 

...とLogCatログ:ちょうどので、あなたが作るすべての提案は多くのことを私を助け、アンドロイド2.3以降SIP上の十分なデータがイマイチので

07-14 13:35:16.200: ERROR/SipService(364): openToMakeCalls() 
07-14 13:35:16.200: ERROR/SipService(364): javax.sip.SipException: only creator can access the profile 
07-14 13:35:16.200: ERROR/SipService(364):  at com.android.server.sip.SipService.createGroup(SipService.java:337) 
07-14 13:35:16.200: ERROR/SipService(364):  at com.android.server.sip.SipService.open(SipService.java:185) 
07-14 13:35:16.200: ERROR/SipService(364):  at android.net.sip.ISipService$Stub.onTransact(ISipService.java:58) 
07-14 13:35:16.200: ERROR/SipService(364):  at android.os.Binder.execTransact(Binder.java:320) 
07-14 13:35:16.200: ERROR/SipService(364):  at dalvik.system.NativeStart.run(Native Method) 
07-14 13:35:16.200: WARN/SipService(364): only creator can set listener on the profile 
07-14 13:35:16.230: WARN/SipService(364): only creator or radio can close this profile 

Googleは、任意の結果を与えていません!

+0

** NEW **:私はいくつかの(さらに)テストを行いましたが、この問題は毎回発生しません。私は1-2の呼び出しを行うことができ、その後、私はgettin SipException:SipSessionまたはonRegistrationFailedの作成に失敗しました。しばらくして(15分?)私はもう一度電話をかけることができます。何らかのVoIPサーバーの登録/タイムアウトの問題? –

+0

**注:**私たちの会社の電話機はすべて同じVoIPサーバーを使用しており、うまく動作しています。 –

+1

こんにちは、大学のプロジェクトとしてAndroidのsipを使ってvoipを割り当てられました。私はこれに関して多くの問題に直面しています。私はいくつかの助けを得ることができるように私にプロジェクトを送ることができますか?私は多くの仕事をしており、実際にはサンプルプロジェクトも機能していません。そして、あなたが私に非常に参考になる非常に基本的な例を与えれば、私は非常に感謝しています。 [email protected] –

答えて

4

問題が解決しました: initializeManager()の直後では、initiateCall()を呼び出すことはできません。 SIPコンポーネントが初期化されたら、約4秒待たなければなりません。

EDIT- SipManagerの登録にはまだ問題があるようです:Calling User Not registered(403)。アプリを再インストールしてデバイスを再起動すると、問題は解決します。

+0

あなたがチェックできるシグナルがあるか、またはマネージャが正しく初期化されたときに戻るブロッキングコールがありますか? –

+0

私のために働いていない... –

関連する問題