在Android上使用Wi-Fi创建P2P连接:创建BroadcastReceiver类

时间:2017-12-17 06:46:34

标签: java android kotlin broadcastreceiver wifip2p

我正在尝试在Android上创建Wi-Fi P2P连接。我指的是API https://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html但我仍然坚持创建BroadcastReceiver类。

它说:"现在创建一个新的BroadcastReceiver类,您将用它来监听系统的Wi-Fi P2P状态的变化。在onReceive()方法中,添加一个条件来处理上面列出的每个P2P状态更改。"

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
        // Determine if Wifi P2P mode is enabled or not, alert
        // the Activity.
        int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
        if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
            activity.setIsWifiP2pEnabled(true);
        } else {
            activity.setIsWifiP2pEnabled(false);
        }
    } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {

        // The peer list has changed! We should probably do something about
        // that.

    } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {

        // Connection state changed! We should probably do something about
        // that.

    } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
        DeviceListFragment fragment = (DeviceListFragment) activity.getFragmentManager()
                .findFragmentById(R.id.frag_list);
        fragment.updateThisDevice((WifiP2pDevice) intent.getParcelableExtra(
                WifiP2pManager.EXTRA_WIFI_P2P_DEVICE));

    }
}

现在,我对此API代码段有以下问题: -

1)上述代码中使用的activity是什么。在API代码段中使用之前已定义了mManagermChannel,但我无法找到activity已经定义了1}}。

2)为了解决上述问题,我有一个类描述如下

class MyBroadcastReceiver(
        val manager: WifiP2pManager,
        val channel: WifiP2pManager.Channel,
        val activity: PlayOverNetworkActivity
): BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        val action = intent.action

        when(action) {
            WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION -> {
                // Determine if Wifi P2P mode is enabled or not, alert the activity
                val state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1)
                if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
                    activity.setIsWifiP2pEnabled(true)
                } else {
                    activity.setIsWifiP2pEnabled(false)
                }
            }
        }
    }
}

在上面的代码中,我找不到任何方法setIsWifiP2pEnabled()。那么,我是否需要定义此方法,或者我首先通过传递活动PlayOverNetworkActivity来做错,这实际上是在其mManagermChannel对象中初始化的活动{1}}方法。

注意:虽然我在Kotlin编写代码,但Kotlin和Android对我来说都是新手。所以,如果你使用Kotlin作为答案,那就太好了,这样我就可以轻松跟进。

0 个答案:

没有答案