我有一个原型Android应用程序正在侦听多播数据包以"发现"客户端进行通信.套接字设置类似于:
InetAddress group = InetAddress.getByName("228.1.2.3");
MulticastSocket s = new MulticastSocket(4000);
s.joinGroup(group);
Run Code Online (Sandbox Code Playgroud)
当所有设备通过WiFi连接时,这非常有效.我想用手机充当便携式热点来支持这一点.但是,虽然我的所有设备似乎都正确连接到热点,但我不再收到组播数据.我想知道是否存在禁止在热点模式下进行此类通信的限制,或者是否需要任何其他网络配置才能启用此功能?我在运行Gingerbread和Froyo的几个不同的设备上试过这个没有运气.
使用Android设备创建一个接入点(在我的情况下为Nexus 7).最终目的是将WiFly卡连接到此创建的网络,并在这些设备之间交换数据.
我知道Android版本4.2.2不允许创建一个访问点(该服务是以编程方式禁用的).这就是为什么我用CyanogenMod的ROM植入我的设备.此ROM启用此服务.
谷歌隐藏了一些类的方法WifiManager
.具体来说,该方法setWifiApEnabled
.这就是为什么我使用反射来调用下面代码的方法.
源代码很大!专注于方法createAccessPoint()
.我选择整个源代码来帮助那些想知道我是如何完成这一切的人.
public class TestAccessPoint extends Activity {
static final String TAG = "AP_TEST";
static final String SSID = "\"Awesome Access Point\"";
static final String PSK = "\"helloworld\"";
String numberOfClientsConnected;
String wifiApEnable;
String wifiApState;
WifiConfiguration wifiApConfig;
WifiManager wifiManager;
WifiConfiguration wifiConfiguration;
BroadcastReceiver receiver;
BroadcastReceiver receiverWifiDisabled;
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.accesspoint_test);
textView = (TextView) findViewById(R.id.textView); …
Run Code Online (Sandbox Code Playgroud)