Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何创建启动WiFi direct的按钮_Android_Wifi Direct_Wifip2p - Fatal编程技术网

Android 如何创建启动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;

我以前没有应用程序开发经验,现在应该在android studio中创建一个应用程序,通过WiFi直接连接到传感器。我读过WiFi direct,并试图遵循指南,但当使用他们的代码时,我仍然不知道如何前进。我还看过几个WiFi direct的演示应用程序

我的代码现在看起来像这样

广播接收器:

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(){})

我相信下面的内容足以让api正常工作


祝你好运。

谢谢!我应该在OnReceive方法中请求对等点列表,还是创建一个单独的方法,如“public void DiscoverPeers()”或其他什么?是的,在“OnReceive”中,注释为requestPeers-->else if(WifiP2pManager.WIFI_P2P_peers_CHANGED_ACTION.equals(ACTION)){//调用WifiP2pManager.requestPeers()要获取当前对等点的列表}