Android 如何创建启动WiFi direct的按钮
我以前没有应用程序开发经验,现在应该在android studio中创建一个应用程序,通过WiFi直接连接到传感器。我读过WiFi direct,并试图遵循指南,但当使用他们的代码时,我仍然不知道如何前进。我还看过几个WiFi direct的演示应用程序 我的代码现在看起来像这样 广播接收器:Android 如何创建启动WiFi direct的按钮,android,wifi-direct,wifip2p,Android,Wifi Direct,Wifip2p,我以前没有应用程序开发经验,现在应该在android studio中创建一个应用程序,通过WiFi直接连接到传感器。我读过WiFi direct,并试图遵循指南,但当使用他们的代码时,我仍然不知道如何前进。我还看过几个WiFi direct的演示应用程序 我的代码现在看起来像这样 广播接收器: public class WiFiDirectBroadcastReceiver extends BroadcastReceiver { private WifiP2pManager mManager;
public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {
private WifiP2pManager mManager;
private WifiP2pManager.Channel mChannel;
private MainActivity mActivity;
public WiFiDirectBroadcastReceiver(WifiP2pManager manager, WifiP2pManager.Channel channel,
MainActivity activity) {
super();
this.mManager = manager;
this.mChannel = channel;
this.mActivity = activity;
}
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
// Check to see if Wi-Fi is enabled and notify appropriate activity
int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
mActivity.setIsWifiP2pEnabled(true);
} else {
mActivity.setIsWifiP2pEnabled(false);
}
} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
// Call WifiP2pManager.requestPeers() to get a list of current peers
} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
// Respond to new connection or disconnections
} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
// Respond to this device's wifi state changing
}
}
}
主要活动:
public class MainActivity extends AppCompatActivity {
WifiP2pManager mManager;
WifiP2pManager.Channel mChannel;
private boolean isWifiP2pEnabled = false;
BroadcastReceiver mReceiver;
IntentFilter mIntentFilter;
public void setIsWifiP2pEnabled(boolean isWifiP2pEnabled) {
this.isWifiP2pEnabled = isWifiP2pEnabled;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mIntentFilter = new IntentFilter();
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), null);
mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this);
}
/* register the broadcast receiver with the intent values to be matched */
@Override
protected void onResume() {
super.onResume();
mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this);
registerReceiver(mReceiver, mIntentFilter);
}
/* unregister the broadcast receiver */
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReceiver);
}
}
指南的下一部分是,我应该尝试发现同龄人。我应该在哪里实现此代码
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
// Code for when the discovery initiation is successful goes here.
// No services have actually been discovered yet, so this method
// can often be left blank. Code for peer discovery goes in the
// onReceive method, detailed below.
}
@Override
public void onFailure(int reasonCode) {
// Code for when the discovery initiation fails goes here.
// Alert the user that something went wrong.
}
});
我的最终产品应该是一个按钮,当我按下它,我应该搜索同行,并能够连接到一个。传感器将直接在WiFi中启动。有人知道我在哪里可以找到更多关于如何继续的信息,或者有关于我需要什么课程等的提示吗
谢谢大家! 它的工作方式是:
- 点击按钮时调用
discoverPeers
- 接下来,在您的
->WiFiDirectBroadcastReceiver
条件下,请求可用对等点列表,如下所示:WIFI\u P2P\u PEERS\u CHANGED\u ACTION
mManager.requestPeers(mcchannel,peerlistener)代码>
- 然后,您必须在活动或片段中实现
,因为发现的对等点将返回到此方法:WifiP2pManager.peerListener
@覆盖 PeersAvailable上的public void(WifiP2pDeviceList peerList){}
- 一旦有了对等点列表,您就可以使用
connect(mChannel,config,new ActionListener(){})代码>
祝你好运。谢谢!我应该在OnReceive方法中请求对等点列表,还是创建一个单独的方法,如“public void DiscoverPeers()”或其他什么?是的,在“OnReceive”中,注释为requestPeers-->else if(WifiP2pManager.WIFI_P2P_peers_CHANGED_ACTION.equals(ACTION)){//调用WifiP2pManager.requestPeers()要获取当前对等点的列表}