使用Android的SIP的Andr​​oid音频呼叫 [英] Android audio calls using android's sip

查看:153
本文介绍了使用Android的SIP的Andr​​oid音频呼叫的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发了一个客户的互联网电话应用程序中使用sip.For,他给我提供了两个有效的SIP USER_ID和密码。正在使用的SIP SIP API implementation.customer说,呼叫没有going.he没有得到有关未接来电的任何通知,当他登录使用他account.i找不到在code.手电筒任何错误帮助我。在code如下。

I developed an application for a customer to internet calling using sip.For that he provided me two valid sip user_id and password. Am Using SIP API for SIP implementation.customer says that the call is not going.he don't get any notification about missed calls when he logged using his account.i cant find any mistakes in the code.please help me .the code is given below.

public class CallActivity extends Activity {
        public String sipAddress = null;
        public SipManager mSipManager = null;
        public SipProfile mSipProfile = null;
        public SipAudioCall call = null;
        Button b1;
        TextView sipadd;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.calling);
            sipAddress = (String) getIntent().getExtras().get("sipAddress");
            b1 = (Button) findViewById(R.id.sipcallbtnend);
            b1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    finish();
                }
            });

            sipadd = (TextView) findViewById(R.id.sipcalltvdialedaddress);

            sipadd.setText(sipAddress);
            b1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    if (call != null) {
                        call.close();
                    }
                    finish();
                }
            });
            initializeManager();
        }

        @Override
        public void onStart() {
            super.onStart();
            // When we get back from the preference setting Activity, assume
            // settings have changed, and re-login with new auth info.
            initializeManager();
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            if (call != null) {
                call.close();
            }

            closeLocalProfile();

            // if (callReceiver != null) {
            // this.unregisterReceiver(callReceiver);
            // }
        }

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

            initializeLocalProfile();
        }

        public void initializeLocalProfile() {
            if (mSipManager == null) {
                return;
            }

            if (mSipProfile != null) {
                closeLocalProfile();
            }
            SharedPreferences prefs = PreferenceManager
                    .getDefaultSharedPreferences(getBaseContext());
            String username = prefs.getString("namePref", "");
            String domain = prefs.getString("domainPref", "");
            String password = prefs.getString("passPref", "");

            if (username.length() == 0 || domain.length() == 0
                    || password.length() == 0) {
                // showDialog(UPDATE_SETTINGS_DIALOG);
                return;
            }

            try {
                SipProfile.Builder builder = new SipProfile.Builder(username,
                        domain);
                builder.setPassword(password);
                builder.setDisplayName(username);
                builder.setAuthUserName(username);
                mSipProfile = builder.build();

                Intent i = new Intent();
                i.setAction("android.SipDemo.INCOMING_CALL");
                PendingIntent pi = PendingIntent.getBroadcast(this, 0, i,
                        Intent.FILL_IN_DATA);
                mSipManager.open(mSipProfile, pi, null);
                //
                //
                // // This listener must be added AFTER manager.open is called,
                // // Otherwise the methods aren't guaranteed to fire.

                mSipManager.setRegistrationListener(mSipProfile.getUriString(),
                        new SipRegistrationListener() {
                            public void onRegistering(String localProfileUri) {
                                // updateStatus("Registering with SIP Server...");
                                Log.d("onRegistering",
                                        "Registering with SIP Server...");
                            }

                            public void onRegistrationDone(String localProfileUri,
                                    long expiryTime) {
                                // updateStatus("Ready");
                                Log.d("onRegistrationDone",
                                        "RegistrationDone..Ready");

                            }

                            public void onRegistrationFailed(
                                    String localProfileUri, int errorCode,
                                    String errorMessage) {
                                // updateStatus("Registration failed.  Please check settings.");
                                Log.d("onRegistrationFailed", "RegistrationFailed");

                            }
                        });
            } catch (ParseException pe) {
                // updateStatus("Connection Error.");
            } catch (SipException se) {
                // updateStatus("Connection error.");
            }

            initiateCall();
        }

        public void closeLocalProfile() {
            if (mSipManager == null) {
                return;
            }
            try {
                if (mSipProfile != null) {
                    mSipManager.close(mSipProfile.getUriString());
                }
            } catch (Exception ee) {
                Log.d("WalkieTalkieActivity/onDestroy",
                        "Failed to close local profile.", ee);
            }
        }

        public void initiateCall() {

            // updateStatus(sipAddress);
            Log.d("nzm", "initiatecall");

            try {
                SipAudioCall.Listener listener = new SipAudioCall.Listener() {
                    // Much of the client's interaction with the SIP Stack will
                    // happen via listeners. Even making an outgoing call, don't
                    // forget to set up a listener to set things up once the call is
                    // established.
                    @Override
                    public void onCallEstablished(SipAudioCall call) {
                        call.startAudio();
                        call.setSpeakerMode(true);
                        call.toggleMute();
                        Log.d("on call established", "on call established");
                        // updateStatus(call);
                    }

                    @Override
                    public void onCallEnded(SipAudioCall call) {
                        // updateStatus("Ready.");
                        // Intent i = new
                        // Intent(getBaseContext(),DialActivity.class);
                        // startActivity(i);
                        finish();
                    }
                };

                call = mSipManager.makeAudioCall(mSipProfile.getUriString(), sipAddress,
                        listener, 3000);
                Log.d("call", "" + call.getState());
            } catch (Exception e) {
                Log.i("WalkieTalkieActivity/InitiateCall",
                        "Error when trying to close manager.", e);
                if (mSipProfile != null) {
                    try {
                        mSipManager.close(mSipProfile.getUriString());
                    } catch (Exception ee) {
                        Log.i("WalkieTalkieActivity/InitiateCall",
                                "Error when trying to close manager.", ee);
                        ee.printStackTrace();
                    }
                }
                if (call != null) {
                    call.close();
                }
            }
        }

    }

在清单的权限下面给出

<uses-permission android:name="android.permission.USE_SIP" />
    <uses-permission android:name="android.permission.INTERNET" />
    <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" />

请帮我.Thanks提前。

please help me .Thanks in Advance.

推荐答案

也许添加这些

<uses-permission android:name="android.permission.CONFIGURE_SIP" />

<uses-feature android:name="android.software.sip" android:required="true" />
<uses-feature android:name="android.software.sip.voip" android:required="true" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />

您使用Android的例子吗?它应该工作在支持SIP设备。

Are you using the android's example? It should work on device that support SIP.

和中的onCreate增加接收器

And add receiver in onCreate

IntentFilter filter = new IntentFilter();
filter.addAction("android.SipDemo.INCOMING_CALL");
callReceiver = new IncomingCallReceiver();
this.registerReceiver(callReceiver, filter);

这篇关于使用Android的SIP的Andr​​oid音频呼叫的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆