“如何修复'注册失败.请使用示例演示 SIP 检查安卓中的设置错误



我正在使用的示例演示

https://github.com/aosp-mirror/platform_development/tree/master/samples/SipDemo

编程正常,它没有显示问题,但是当我配置它时,它显示消息注册失败。

我正在使用安卓工作室编程,服务器是星号。我尝试使用Soiper,它有效。

public class WalkieTalkieActivity extends Activity implements View.OnTouchListener {
    public String sipAddress = null;
    public SipManager manager = null;
    public SipProfile me = null;
    public SipAudioCall call = null;
    public IncomingCallReceiver callReceiver;
    private static final int CALL_ADDRESS = 1;
    private static final int SET_AUTH_INFO = 2;
    private static final int UPDATE_SETTINGS_DIALOG = 3;
    private static final int HANG_UP = 4;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_walkie_talkie);
        ToggleButton pushToTalkButton = (ToggleButton) findViewById(R.id.pushToTalk);
        pushToTalkButton.setOnTouchListener(this);
        // Set up the intent filter.  This will be used to fire an
        // IncomingCallReceiver when someone calls the SIP address used by this
        // application.
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.SipDemo.INCOMING_CALL");
        callReceiver = new IncomingCallReceiver();
        this.registerReceiver(callReceiver, filter);
        // "Push to talk" can be a serious pain when the screen keeps turning off.
        // Let's prevent that.
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        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(manager == null) {
            manager = SipManager.newInstance(this);
        }
        initializeLocalProfile();
    }
    /**
     * Logs you into your SIP provider, registering this device as the location to
     * send SIP calls to for your SIP address.
     */
    public void initializeLocalProfile() {
        if (manager == null) {
            return;
        }
        if (me != null) {
            closeLocalProfile();
        }
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
      /*  String username = prefs.getString("namePref", "");
        String domain = prefs.getString("domainPref", "");
        String password = prefs.getString("passPref", ""); */
        String username = "12";
        String domain = "192.168.1.37";
        String password = "1234";
        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.setAuthUserName("12");
            builder.setDisplayName("12");
            builder.setProfileName("12");
             builder.setPassword(password);
            me = builder.build();
            Intent i = new Intent();
            i.setAction("android.SipDemo.INCOMING_CALL");
            PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, Intent.FILL_IN_DATA);
            manager.open(me, pi, null);

            // This listener must be added AFTER manager.open is called,
            // Otherwise the methods aren't guaranteed to fire.
            manager.setRegistrationListener(me.getUriString(), new SipRegistrationListener() {
                public void onRegistering(String localProfileUri) {
                    updateStatus("Registering with SIP Server...");
                }
                public void onRegistrationDone(String localProfileUri, long expiryTime) {
                    updateStatus("Ready");
                }
                public void onRegistrationFailed(String localProfileUri, int errorCode,
                                                 String errorMessage) {
                    updateStatus("Registration failed.  Please check settings.");
                }
            });
        } catch (ParseException pe) {
            updateStatus("Connection Error.");
        } catch (SipException se) {
            updateStatus("Connection error.");
        }
    }
/**
 * Closes out your local profile, freeing associated objects into memory
 * and unregistering your device from the server.
 */
public void closeLocalProfile() {
    if (manager == null) {
        return;
    }
    try {
        if (me != null) {
            manager.close(me.getUriString());
        }
    } catch (Exception ee) {
       // Log.d("WalkieTalkieActivity/onDestroy", "Failed to close local profile.", ee);
    }
}
/**
 * Make an outgoing call.
 */
public void initiateCall() {
    updateStatus(sipAddress);
    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();
                updateStatus(call);
            }
            @Override
            public void onCallEnded(SipAudioCall call) {
                updateStatus("Ready.");
            }
        };
        call = manager.makeAudioCall(me.getUriString(), sipAddress, listener, 30);
    }
    catch (Exception e) {
       // Log.i("WalkieTalkieActivity/InitiateCall", "Error when trying to close manager.", e);
        if (me != null) {
            try {
                manager.close(me.getUriString());
            } catch (Exception ee) {
           //     Log.i("WalkieTalkieActivity/InitiateCall",
              //          "Error when trying to close manager.", ee);
                ee.printStackTrace();
            }
        }
        if (call != null) {
            call.close();
        }
    }
}
/**
 * Updates the status box at the top of the UI with a messege of your choice.
 * @param status The String to display in the status box.
 */
public void updateStatus(final String status) {
    // Be a good citizen.  Make sure UI changes fire on the UI thread.
    this.runOnUiThread(new Runnable() {
        public void run() {
            TextView labelView = (TextView) findViewById(R.id.sipLabel);
            labelView.setText(status);
        }
    });
}
/**
 * Updates the status box with the SIP address of the current call.
 * @param call The current, active call.
 */
public void updateStatus(SipAudioCall call) {
    String useName = call.getPeerProfile().getDisplayName();
    if(useName == null) {
        useName = call.getPeerProfile().getUserName();
    }
    updateStatus(useName + "@" + call.getPeerProfile().getSipDomain());
}
/**
 * Updates whether or not the user's voice is muted, depending on whether the button is pressed.
 * @param v The View where the touch event is being fired.
 * @param event The motion to act on.
 * @return boolean Returns false to indicate that the parent view should handle the touch event
 * as it normally would.
 */
public boolean onTouch(View v, MotionEvent event) {
    if (call == null) {
        return false;
    } else if (event.getAction() == MotionEvent.ACTION_DOWN && call != null && call.isMuted()) {
        call.toggleMute();
    } else if (event.getAction() == MotionEvent.ACTION_UP && !call.isMuted()) {
        call.toggleMute();
    }
    return false;
}
public boolean onCreateOptionsMenu(Menu menu) {
    menu.add(0, CALL_ADDRESS, 0, "Call someone");
    menu.add(0, SET_AUTH_INFO, 0, "Edit your SIP Info.");
    menu.add(0, HANG_UP, 0, "End Current Call.");
    return true;
}
}

认为这应该是user@domain...并且 IP 地址不是域。

最新更新