Мне нужно разработать приложение VOIP между двумя устройствами Android.
Как я знаю, для этой цели используется протокол SIP, но для регистрации SIP требуется регистрация на SIP-сервер и доступ к Интернету для сигнализации SIP.
Можно ли создать приложение VOIP в андроиде без доступа в Интернет?Приложение VOIP для Android без доступа в Интернет
ответ
Конечно, это возможно! Зачем вам нужен интернет? Пока вы оба подключены к одной и той же сети, это нормально! Ниже приведена java и xml для рабочего приложения.
При запуске он предоставит вам собственный локальный порт, например «52022» .. это случайный каждый раз и, к сожалению, это не поможет. Затем мы вводим IP-адрес другого телефона и их произвольно сгенерированный номер порта и нажимаем connect. Они делают точно то же самое и BAM вы подключены :) Это тестовое приложение, очевидно, требует, чтобы вы были рядом, чтобы обмениваться номерами портов, но в моем правильном приложении я мог легко запросить каждый номер порта перед подключением. Надеюсь это поможет!
public class MainActivity extends Activity {
AudioGroup m_AudioGroup;
AudioStream m_AudioStream;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio.setMode(AudioManager.MODE_IN_COMMUNICATION);
m_AudioGroup = new AudioGroup();
m_AudioGroup.setMode(AudioGroup.MODE_NORMAL);
m_AudioStream = new AudioStream(InetAddress.getByAddress(getLocalIPAddress()));
int localPort = m_AudioStream.getLocalPort();
m_AudioStream.setCodec(AudioCodec.PCMU);
m_AudioStream.setMode(RtpStream.MODE_NORMAL);
((TextView)findViewById(R.id.lblLocalPort)).setText(String.valueOf(localPort));
((Button) findViewById(R.id.button1)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String remoteAddress = ((EditText)findViewById(R.id.editText2)).getText().toString();
String remotePort = ((EditText)findViewById(R.id.editText1)).getText().toString();
try {
m_AudioStream.associate(InetAddress.getByName(remoteAddress), Integer.parseInt(remotePort));
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
m_AudioStream.join(m_AudioGroup);
}
});
((Button) findViewById(R.id.button2)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
m_AudioStream.release();
}
});
} catch (Exception e) {
Log.e("----------------------", e.toString());
e.printStackTrace();
}
}
public static byte[] getLocalIPAddress() {
byte ip[]=null;
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
ip= inetAddress.getAddress();
}
}
}
} catch (SocketException ex) {
Log.i("SocketException ", ex.toString());
}
return ip;
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/lblLocalPort"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/localPort" />
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:ems="10"
android:hint="@string/iPHint"
android:inputType="phone" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:ems="10"
android:hint="@string/portHint"
android:inputType="number" >
<requestFocus />
</EditText>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/connect" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/Disconnect" />
</LinearLayout>
EDIT: Метод IP-адрес перестал работать на API 22, используйте код ниже:
private byte[] getLocalIPAddress() {
byte[] bytes = null;
try {
// get the string ip
WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
// convert to bytes
InetAddress inetAddress = null;
try {
inetAddress = InetAddress.getByName(ip);
} catch (UnknownHostException e) {
e.printStackTrace();
}
bytes = new byte[0];
if (inetAddress != null) {
bytes = inetAddress.getAddress();
}
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, R.string.phone_voip_incompatible, Toast.LENGTH_SHORT).show();
}
return bytes;
}
Я получаю это исключение E/----------------------: java.net.SocketException: Недопустимый аргумент –
Это был в то время как я использовал это, и я знаю, что способ получить IP-адрес изменился в последних обновлениях Android. – Murphybro2
Можете ли вы посоветовать мне, как сделать голосовое вызов через локальный Wi-Fi от одного устройства Android до другого? –
Это невозможно, потому что вызов VOIP проходит через Интернет и через сервер sip.
для примера. если вы хотите позвонить за границу из своей страны с помощью VOIP dailer, вам необходим интернет-доступ, потому что невозможно общаться через Bluetooth.
Спасибо.
Но если я просто хочу, чтобы 2 телефона подключались через WIFI, разговаривали друг с другом без подключения к Интернету? –
невозможно, потому что вам нужен сервер для общения друг с другом ..... –
Но это только для SIP. Может быть, есть способ создать приложение VOIP в Java vithout SIP? –
Фактически клиенты SIP могут разговаривать одноранговыми, они просто должны знать свои IP-адреса и порты UDP, где они прослушивают сообщения SIP.
Вы можете поиграть с обычными SIP-клиентами на двух компьютерах (X-Lite для Windows, Twinkle для Linux и некоторые другие существуют) и попытаться установить вызов между ними без регистрации сервера. Это вполне возможно.
Также вы можете запустить минималистичный SIP-сервер в локальной локальной сети. Например, FreeSWITCH можно свести к минимуму до небольшого размера.
FreeSWITCH может быть установлен на Android? –
нет, я так не считаю. Это написано на C, а андроид - на основе java –
Android основан на LINUX C, Java добавлен ontop из C –
ОК, поэтому, если вы ищете некоторые сообщения peer-2-peer, я думаю, что Wi-Fi - это путь (лучшее расстояние и скорость). Если вы можете разрабатывать только новые версии Android, то WI-FI Direct - это путь, но это будет работать только на Android 4.0 и выше.
Для того, чтобы что-то работало ниже 4.0, вам придется идти с Сторонняя библиотека. Я знаю, что Qualcomm имеет библиотеку под названием alljoyn, но не уверен, насколько она хороша.
Это здорово, но мне нужно приложение VOIP :) –
, как только у вас есть соединение, вы можете запускать любую услугу, которую вы хотите по ней. Если вы ищете voip с уже встроенной возможностью p2p, то я не думаю, что вы ее найдете. – MikeIsrael
На самом деле мне нужна функция Point To Multi Points :) –
Я думаю, вы можете использовать JITSI для службы p2p voip на нескольких платформах, включая Andriod.
Это мои выводы об этом проекте: -
- Не нужно никакого сервера или интернет-подключение.
- Пользователи должны находиться в одной сети.
- Открытый исходный код.
- Android apk доступен, скорее всего, вы можете найти его на веб-сайте или его можно скомпилировать.
- 1. Интернет-телефония (VoIP) в android
- 2. Parse.com без доступа в интернет в Android
- 3. Создайте приложение VoIP в android
- 4. приемник радиопередатчика для Android без доступа в Интернет
- 5. Приложение для Point-To-Point Voip Call over Wifi
- 6. Как сделать приложение VOIP для Android-телефона?
- 7. Разверните приложение ROR на машине без доступа в Интернет
- 8. Как построить приложение SIP & VOIP для Android?
- 9. Приложение для чата и VOIP
- 10. Ionic Android apk нет доступа в интернет
- 11. Отправка оповещений/уведомлений с сервера на приложение для Android без доступа в Интернет
- 12. Студия VoIP android
- 13. Как интегрировать VoIP в приложение Android?
- 14. Как получить статус интернет-доступа в Android?
- 15. Установите плагин eclipse без доступа в Интернет
- 16. Android TV Emulator: нет доступа в Интернет
- 17. Как использовать град без доступа в Интернет?
- 18. Приложение Voip в состояниях сна
- 19. установить программу unix без доступа в Интернет
- 20. Отображение MKMapView без доступа в Интернет
- 21. Создание веб-страницы без доступа в Интернет
- 22. Как настроить Maven без доступа в Интернет
- 23. Пользовательские Диалог без доступа в Интернет
- 24. Голос через интернет-протокол (VoIP) Цель C
- 25. Реализация вызова VoIP для VoIP
- 26. Поместите некоторые значения в Интернет для доступа с android
- 27. Приложение для Android отключается, если интернет недоступен
- 28. Android-приложение для интернет-телевидения Потоки
- 29. «Интернет-соединение отсутствует» при подключении к точке доступа без доступа в Интернет - Wi-Fi/выключают исправлений
- 30. Я хочу интегрировать звуковой вызов VOIP в приложение для Android
ли вы имеете в виду как своего рода рация? Есть ли способы сделать peer to peer с Wi-Fi и Bluetooth, это удовлетворит ваши потребности? – MikeIsrael
Да. На самом деле мне нужно ОДНО, чтобы МНОГО рации, с Wi-Fi. Вид конференции без доступа в Интернет –
SIP не требует доступа в Интернет и не требует ничего большего, чем сами пользовательские агенты. (Эти вещи _useful_, но не _required_.) –