gpt4 book ai didi

android - 为什么我在使用 WifiP2pManager 时总是 BUSY?

转载 作者:太空狗 更新时间:2023-10-29 15:27:04 27 4
gpt4 key购买 nike

我正在尝试使用 Wi-Fi Direct 连接两台 Android 设备。

在我的 HTC 手机(一个 SV)上它似乎可以工作,但在我的第二个设备 LG Optimus 4xhd 上它不工作。

在我的 onResume() 函数中,我启动了以下线程:

new Thread(){
private int count=0;
public void run()
{
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {

@Override
public void onSuccess() {
Log.d(tag,"SUCCESS - started discovering peers");

}

@Override
public void onFailure(int reason) {
count++;

String err=new String();
if(reason==WifiP2pManager.BUSY) err="BUSY";
if(reason==WifiP2pManager.ERROR)err="ERROR";
if(reason==WifiP2pManager.P2P_UNSUPPORTED) err="P2P_UNSUPPORTED";
Log.d(tag,"FAIL - couldnt start to discover peers code: "+err+" ("+count+")");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(count>=20)return;
mManager.discoverPeers(mChannel, this);
}
});
}
}.start();

正如我之前所说:这在我的 HTC 上运行良好。但是对于 LG,我只是得到“失败 - 无法开始发现对等代码:忙碌”(20 次)。

我也试过 WifiP2pManager.createGroup() 得到了同样的结果。

我意识到的另一件事是,我的带有以下过滤器的 BroadcastReceiver 在我的 LG 上收不到任何东西(HTC 收到一些广播)。过滤器:

 filter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
// Indicates a change in the list of available peers.
filter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
// Indicates the state of Wi-Fi P2P connectivity has changed.
filter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
// Indicates this device's details have changed.
filter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);

我没有尝试任何花哨的东西。我只是在关注 http://developer.android.com/guide/topics/connectivity/wifip2p.html 上的 Wi-Fi Direct Api-Guides|

有什么我可以做的吗?我不明白为什么 LG 手机的工作方式会如此不同。

只是为了确定最后一件事:在我的 onCreate() 中,我得到并初始化我的管理器,如下所示:

 mManager = (WifiP2pManager) getSystemService(MainActivity.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), receiver);

它似乎适用于两种设备。 (我得到一个 channel )

最佳答案

您使用 mainLooper 所以不要创建任何线程并执行所有操作,并执行如下操作:

public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub

switch(item.getItemId()){
case R.id.search_devices:
if(!isWifiP2pEnabled){
Toast.makeText(this, "enable wifi p2p", Toast.LENGTH_LONG).show();
return true;
}
onInitiateDiscovery();
manager.discoverPeers(channel, MainActivity.this);

default:
return super.onOptionsItemSelected(item);

}

关于android - 为什么我在使用 WifiP2pManager 时总是 BUSY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com