wifi p2p本机设备名DeviceName设置

wifi p2p系统中本机名称WifiP2pDevice.deviceName是由系统指定的,直接修改并不能起作用。WifiP2pManager类中有设备名称设置方法setDeviceName,可以改变本设备名称。

    /**
     * Set p2p device name.
     * @hide
     * @param c is the channel created at {@link #initialize}
     * @param listener for callback when group info is available. Can be null.
     */
    @UnsupportedAppUsage
    public void setDeviceName(Channel c, String devName, ActionListener listener) {
        checkChannel(c);
        WifiP2pDevice d = new WifiP2pDevice();
        d.deviceName = devName;
        c.mAsyncChannel.sendMessage(SET_DEVICE_NAME, 0, c.putListener(listener), d);
    }

但是这个方法是 @UnsupportedAppUsage的,不能在app中直接使用。无奈只好用反射机制取得该方法,kotlin代码如下:

    private fun setDeviceName(deviceName: String) {
        try {
            val paramTypes0 = WifiP2pManager.Channel::class.java
            val paramTypes1 = String::class.java
            val paramTypes2 = WifiP2pManager.ActionListener::class.java

            val setDeviceName: Method = wifiP2pManager.javaClass.getMethod(
                "setDeviceName", paramTypes0, paramTypes1, paramTypes2
            )
            setDeviceName.isAccessible = true
            setDeviceName.invoke(wifiP2pManager, channel,
                deviceName,
                object : WifiP2pManager.ActionListener {
                    override fun onSuccess() {
                        Log.i(thisTag, "setDeviceName succeeded")
                    }

                    override fun onFailure(reason: Int) {
                        Log.i(thisTag, "setDeviceName failed")
                    }
                })
        } catch (e: NoSuchMethodException) {
            e.printStackTrace()
        } catch (e: IllegalAccessException) {
            e.printStackTrace()
        } catch (e: IllegalArgumentException) {
            e.printStackTrace()
        } catch (e: InvocationTargetException) {
            e.printStackTrace()
        }
    }

其中两个变量wifiP2pManager、channel是WifiP2pManager和WifiP2pManager.Channel的实例,需要在app中取得。

wifiP2pManager =  app.getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
channel = wifiP2pManager.initialize(app, Looper.getMainLooper(), this)

setDeviceName的时机通常是取得wifiP2pManager、channel之后。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值