A. android:udp广播
首先手机作为终端 可以不必要知道终端的数量、 还有就是我建议你多学习下基础,android的广播机制不是把广播在终端之间传输,广播是在应用程序里面发送,在应用程序进行接收。个人建议基础才是王道。 对于你现在这个问题,不妨采用发送消息的方式 实现该功能。一个终端发送消息 其他终端接收消息,当然也相当于写一个socket通信。通信建立之后 ,可以取得各个连接的终端的IP 然后怎么逻辑就看你怎么写算法了。还有就是,这个功能也可以用消息推送的方式(建议采用此方法)、android系统内置有消息推送,逻辑都和上述的差不多,至于具体用那些方法 那些内置类,个人建议多查API。软件开发必须靠自学。。。。
B. android中的广播怎么使用
广播操作有两种
1、发送广播,就是你自己发送出去一个广播,让别人接收
2、接收广播,这个是自己实现一个广播接收器,接收那些你自己过滤的广播,然后处理
具体的代码实现,可以在网上找找
C. 怎样实现局域网发送广播
只要网络是通你与要接收内容的电脑是物理上联通的可以使用net send 命令来处理。你可以在运行里面输入CMD敲回车再输入NET SEND /? 就能查看到相关命令的使用说明大致内容如下:Net send {name | * | /domain[:name] | /users} message
有关参数说明: ·name要接收发送消息的用户名、计算机名或通信名
·* 将消息发送到组中所有名称
·/domain[:name]将消息发送到计算机域中的所有名称
·/users将消息发送到与服务器连接的所有用户
·message作为消息发送的文本
net send 机器名 内容
net send ip地址 内容 例如:Net send /users server will shutdown in 10 minutes.给所有连接到服务器的用户发送消息。
D. 请教如何搜索周边的android设备,并发送消息
局域网,例如同一个路由器下,利用socket编程,向255.255.255.255以及指定端口发送广播,然后所有该局域网内,设置了指定端口监听的手机应用都可以收到广播,收到广播后,就可以获取到发送广播的手机的IP地址,然后通过该IP地址向主机监听的端口发送信息,这样主机就知道附近有哪些其他的安卓手机了;
不同的局域网,需要借助有公网IP地址的服务器进行转发,才可以实现,这个叫云穿透,所有手机连接到网络后要向服务器注册,然后服务器就知道有哪些手机,然后其他手机只要通过服务器的公网IP提出请求,就可以通过服务器间接的进行通讯。
E. android 局域网对讲机怎么用
本对讲机集实时语音对讲、文字、表情和文件传输与一身。使用IP广播机制,实现同一局域网段内的语音广播。使用本对讲机,只使用本地wifi即可以实现办公室内的语音会议,不用打电话,无需话费和流量。适合办公室通讯、学校寝室间沟通等。
F. android wifi能进行udp的局域网广播吗,使用255.255.255.255这个地址~~~~
可以的,可以使用255.255.255.255进行广播
G. (三)Android局域网内语音对讲 基于UDP语音传输
之前研究了基于UDP的文字传输 点击打开链接 ,以及Android端的语音录制 点击打开链接 ,这篇文章就记录一下Android端局域网内的语音传输,简单的实现语音对讲,当然里面还存在着很多问题,包括语音不清晰啊、杂音多啊,不管了,先听见声音就行了。测试的时候两部手机,上图:
程序写了两个线程,一个用于录制AudioRecordThread,一个用于播放AudioTrackThread.
(一)录制与发送
@Override
public void run() {
if (mSocket == null)
return;
try {
mStartTime = System.currentTimeMillis();
audioRec.startRecording();
while (flag) {
try {
byte[] bytes_pkg = buffer.clone();
if (mRecordQueue.size() >= 2) {
int length = audioRec.read(buffer, 0, minBufferSize);
//获取音量大小
mVolume = getAudioColum(buffer);
System.out.println(TAG + "= " + mVolume);
Message message = mHandler.obtainMessage();
message.arg1 = (int) mVolume;
mHandler.sendMessage(message);
DatagramPacket writePacket;
InetAddress inet = InetAddress.getByName(inetAddressName);
writePacket = new DatagramPacket(buffer, length, inet, PORT);
writePacket.setLength(length);
System.out.println("AudioRTwritePacket = " + writePacket.getData().toString());
mSocket.send(writePacket);
}
mRecordQueue.add(bytes_pkg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
audioRec.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
里面包含了获取音量大小,便于在页面上面展示,方法参考了 点击打开链接
private double getAudioColum(byte[] buffer) {
double sumVolume = 0.0;
double avgVolume = 0.0;
double volume = 0.0;
for (int i = 0; i < buffer.length; i += 2) {
int v1 = buffer[i] & 0xFF;
int v2 = buffer[i + 1] & 0xFF;
int temp = v1 + (v2 << 8);// 小端
if (temp >= 0x8000) {
temp = 0xffff - temp;
}
sumVolume += Math.abs(temp);
}
avgVolume = sumVolume / buffer.length / 2;
volume = Math.log10(1 + avgVolume) * 10;
return volume;
}
(二)接收与播放
@Override
public void run() {
if (mSocket == null)
return;
//从文件流读数据
audioTrk.play();
while (flag) {
DatagramPacket recevPacket;
try {
recevPacket = new DatagramPacket(buffer, 0, buffer.length);
mSocket.receive(recevPacket);
audioTrk.write(recevPacket.getData(), 0, recevPacket.getLength());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
audioTrk.stop();
}
(三)主页面 接收按钮事件
@OnClick({R.id.btn_receive})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btn_receive:
if (btnReceive.getText().toString().equals("开始接收")) {
btnReceive.setText("停止接收");
try {
if (audioTrackThread == null) {
audioTrackThread = new AudioTrackThread();
}
new Thread(audioTrackThread).start();
} catch (SocketException e) {
e.printStackTrace();
}
} else {
btnReceive.setText("开始接收");
audioTrackThread.setFlag(false);
}
break;
}
}
(四)发送按钮事件
ivSpeak.setOnTouchListener(new View.OnTouchListener() {
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//按下按钮开始录制
ivSpeak.setText("正在说话");
//显示录音提示
relativeLayout.setVisibility(View.VISIBLE);
try {
if (audioRecordThread == null) {
audioRecordThread = new AudioRecordThread(handler);
}
audioRecordThread.setInetAddressName(tvReceiveIp.getText().toString());
audioRecordThread.setFlag(true);
new Thread(audioRecordThread).start();
} catch (SocketException e) {
e.printStackTrace();
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
//松开按钮结束录制
ivSpeak.setText("按住说话");
relativeLayout.setVisibility(View.GONE);
audioRecordThread.setFlag(false);
mStopTime = audioRecordThread.getmStopTime();
mStartTime = audioRecordThread.getmStartTime();
creatMessageBean((mStopTime - mStartTime) / 1000, true);
break;
}
return true;
}
});