我正在尝试在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代码段中使用之前已定义了mManager
和mChannel
,但我无法找到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
来做错,这实际上是在其mManager
和mChannel
对象中初始化的活动{1}}方法。
注意:虽然我在Kotlin编写代码,但Kotlin和Android对我来说都是新手。所以,如果你使用Kotlin作为答案,那就太好了,这样我就可以轻松跟进。