Android 将设备名称重命名为 wifi-direct
Posted
技术标签:
【中文标题】Android 将设备名称重命名为 wifi-direct【英文标题】:Android rename device's name for wifi-direct 【发布时间】:2014-12-05 11:44:09 【问题描述】:我正在尝试使用 Wifi Direct 连接两个设备,但我想以编程方式实现,而不是由用户发起。
为此,我必须更改设备的 WifiDirect 名称,如下图所示:
现在使用以下方法发现对等点:
wifiP2pManager.discoverPeers(channel,
new WifiP2pManager.ActionListener()
@Override
public void onSuccess()
Log.d(TAG, "onSuccess");
@Override
public void onFailure(int reason)
Log.d(TAG, "onFailure");
);
通过以下代码连接到特定对等点:
public static void connectPeer(WifiP2pDevice device,
WifiP2pManager manager, Channel channel, final Handler handler)
WifiP2pConfig config = new WifiP2pConfig();
config.groupOwnerIntent = 15;
config.deviceAddress = device.deviceAddress;
config.wps.setup = WpsInfo.PBC;
manager.connect(channel, config, new ActionListener()
@Override
public void onSuccess()
@Override
public void onFailure(int reason)
);
但我不知道如何更改 Wi-Fi Direct 的设备名称?
【问题讨论】:
您找到解决方案了吗? 【参考方案1】:这对我有用,尽管我不建议使用反射来访问 WifiP2pManager 中的隐藏 API。
public void setDeviceName(String devName)
try
Class[] paramTypes = new Class[3];
paramTypes[0] = Channel.class;
paramTypes[1] = String.class;
paramTypes[2] = ActionListener.class;
Method setDeviceName = manager.getClass().getMethod(
"setDeviceName", paramTypes);
setDeviceName.setAccessible(true);
Object arglist[] = new Object[3];
arglist[0] = channel;
arglist[1] = devName;
arglist[2] = new ActionListener()
@Override
public void onSuccess()
LOG.debug("setDeviceName succeeded");
@Override
public void onFailure(int reason)
LOG.debug("setDeviceName failed");
;
setDeviceName.invoke(manager, arglist);
catch (NoSuchMethodException e)
e.printStackTrace();
catch (IllegalAccessException e)
e.printStackTrace();
catch (IllegalArgumentException e)
e.printStackTrace();
catch (InvocationTargetException e)
e.printStackTrace();
【讨论】:
manager 是 WifiP2pManager,channel 是 WifiP2pManager.Channel,我们使用它来将我们的应用程序连接到 Wifi p2p 框架。顺便说一句,如果您尝试了解有关 WifiP2p 的基础知识,甚至阅读有关如何开始的单个教程,您就会知道经理和频道是什么,请参考:developer.android.com/training/connect-devices-wirelessly/… @David 这两个可以定义如下WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); Channel channel = mManager.initialize(this, getMainLooper(), null);
,别忘了导入这些import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager.Channel;
以上是关于Android 将设备名称重命名为 wifi-direct的主要内容,如果未能解决你的问题,请参考以下文章
wget:: 如何将所有已下载的文件重命名为 wget --content-disposition 给出的名称?
计划批处理文件不将文件重命名为使用 %date% 和 %time% 变量指定的名称