Android 广播意图WifiP2pManager.WIFI\u P2P\u对等方\u已更改\u操作未调用,因此无法获取对等方列表
嘿,我正在根据developer.android.com上的培训样本制作一个android应用程序,以下是我的主要活动代码:Android 广播意图WifiP2pManager.WIFI\u P2P\u对等方\u已更改\u操作未调用,因此无法获取对等方列表,android,android-wifi,Android,Android Wifi,嘿,我正在根据developer.android.com上的培训样本制作一个android应用程序,以下是我的主要活动代码: package com.example.hellowifi; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity;
package com.example.hellowifi;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.net.wifi.WpsInfo;
import android.net.wifi.p2p.WifiP2pConfig;
import android.net.wifi.p2p.WifiP2pDevice;
import android.net.wifi.p2p.WifiP2pDeviceList;
import android.net.wifi.p2p.WifiP2pInfo;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private final IntentFilter mIntentFilter = new IntentFilter();
private WifiP2pManager mManager = null;
private WifiP2pManager.Channel mChannel = null;
private BroadcastReceiver mReciever;
private ListView mListView;
public static final String TAG = "wifidirectdemo";
// TXT RECORD properties
public static final String TXTRECORD_PROP_AVAILABLE = "available";
public static final String SERVICE_INSTANCE = "_wifidemotest";
public static final String SERVICE_REG_TYPE = "_presence._tcp";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listView);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), null);
mReciever = new WiFiBroadCastReciever(mManager, mChannel, this);
startRegistration();
}
@Override
protected void onResume() {
super.onResume();
mReciever = new WiFiBroadCastReciever(mManager, mChannel, this);
registerReceiver(mReciever, mIntentFilter);
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(mReciever);
}
public void OnDiscoverButtonClicked(View view) {
mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Toast.makeText(MainActivity.this, "Discovery Process Succeded", Toast.LENGTH_SHORT).show();
System.out.println("changed");
}
@Override
public void onFailure(int reason) {
Toast.makeText(MainActivity.this, "Discovery Process Failed", Toast.LENGTH_SHORT).show();
}
});
}
private static List peers = new ArrayList();/*
private ArrayAdapter listAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,peers);*/
static WifiP2pManager.PeerListListener peerListListener = new WifiP2pManager.PeerListListener() {
@Override
public void onPeersAvailable(WifiP2pDeviceList peerList) {
peers.clear();
peers.addAll(peerList.getDeviceList());
}
};
private void startRegistration() {
// Create a string map containing information about your service.
Map record = new HashMap();
record.put(TXTRECORD_PROP_AVAILABLE, "visible");
// Service information. Pass it an instance name, service type
// _protocol._transportlayer , and the map containing
// information other devices will want once they connect to this one.
WifiP2pDnsSdServiceInfo serviceInfo =
WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);
// Add the local service, sending the service info, network channel,
// and listener that will be used to indicate success or failure of
// the request.
mManager.addLocalService(mChannel, serviceInfo, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Toast.makeText(MainActivity.this, "Added Local Service", Toast.LENGTH_SHORT);
}
@Override
public void onFailure(int arg0) {
Toast.makeText(MainActivity.this,"Failed to add a service",Toast.LENGTH_SHORT);
}
});
}
}
我的广播接受者课程是:
package com.example.hellowifi;
import java.util.HashMap;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.NetworkInfo;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;
import android.util.Log;
import android.widget.Toast;
public class WiFiBroadCastReciever extends BroadcastReceiver {
private MainActivity activity;
private WifiP2pManager mManager=null;
private WifiP2pManager.Channel mChannel=null;
PeerListListener myPeerListListener = null;
public WiFiBroadCastReciever(WifiP2pManager manager, WifiP2pManager.Channel channel,
Activity activity) {
super();
this.mManager = manager;
this.mChannel = channel;
this.activity = (MainActivity) activity;
}
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)){
int state=intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE,-1);
if (WifiP2pManager.WIFI_P2P_STATE_ENABLED==state)
Log.d("WiFiBroadCastReciever", "WiFi enabled");
else
Log.d("WiFiBroadCastReciever", "WiFi disabled");
}
else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)){
Toast.makeText(activity, "in intent", Toast.LENGTH_LONG).show();
if (mManager != null) {
mManager.requestPeers(mChannel, myPeerListListener);
}
}
else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)){
if (mManager == null) {
return;
}
NetworkInfo networkInfo = (NetworkInfo) intent
.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
if (networkInfo.isConnected()) {
// We are connected with the other device, request connection
// info to find group owner IP
/*mManager.requestConnectionInfo(mChannel, connectionListener);*/
}
}
else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)){
}
}
final HashMap<String, String> buddies = new HashMap<String, String>();
package com.example.hellowifi;
导入java.util.HashMap;
导入android.app.Activity;
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.net.NetworkInfo;
导入android.net.wifi.p2p.WifiP2pManager;
导入android.net.wifi.p2p.WifiP2pManager.peerListener;
导入android.util.Log;
导入android.widget.Toast;
公共类WiFiBroadCastReciever扩展广播接收器{
私人活动;
私有WifiP2pManager mManager=null;
私有WifiP2pManager.Channel mcchannel=null;
PeerListener MyPeerListener=null;
公共WiFiBroadCastReciever(WifiP2pManager管理器、WifiP2pManager.Channel、,
活动(活动){
超级();
this.mManager=manager;
this.mcchannel=通道;
this.activity=(MainActivity)活动;
}
@凌驾
公共void onReceive(上下文、意图){
String action=intent.getAction();
if(WifiP2pManager.WIFI\u P2P\u STATE\u CHANGED\u ACTION.equals(ACTION)){
int state=intent.getIntExtra(WifiP2pManager.EXTRA\u WIFI\u state,-1);
if(WifiP2pManager.WIFI\u P2P\u STATE\u ENABLED==状态)
Log.d(“WiFiBroadCastReciever”,“启用WiFi”);
其他的
Log.d(“WiFiBroadCastReciever”、“WiFi禁用”);
}
else if(WifiP2pManager.WIFI\u P2P\u PEERS\u CHANGED\u ACTION.equals(ACTION)){
Toast.makeText(活动“in intent”,Toast.LENGTH_LONG).show();
if(mManager!=null){
requestPeers(McChannel、MyPeerListener);
}
}
else if(WifiP2pManager.WIFI\u P2P\u CONNECTION\u CHANGED\u ACTION.equals(ACTION)){
if(mManager==null){
返回;
}
NetworkInfo NetworkInfo=(NetworkInfo)意图
.getParcelableExtra(WifiP2pManager.EXTRA\u网络信息);
if(networkInfo.isConnected()){
//我们已与其他设备连接,请求连接
//查找组所有者IP的信息
/*mManager.requestConnectionInfo(mChannel,connectionListener)*/
}
}
else if(WifiP2pManager.WIFI\u P2P\u此设备\u已更改\u ACTION.equals(ACTION)){
}
}
final HashMap buddies=new HashMap();
}
我接到成功的广播电话,打算WIFI\u P2P\u状态\u更改\u操作,WIFI\u P2P\u连接\u更改\u操作,WIFI\u P2P\u此设备\u更改\u操作,但未更改WIFI\u P2P\u操作
当我在其他设备上进行连接和便携式热点,并试图在我的设备上进行发现时
请注意:WiFi已启用,我也为Discovery successful干杯。之后,WIFI\u P2P\u PEERS\u改变了\u行动意图,不再呼叫。
我试着搜索每一条线。
请帮我找个人。提前谢谢 您还需要在其他设备上运行discoverPeers()。
现在您将收到WIFI\u P2P\u PEERS\u CHANGED\u ACTION intent我以前也遇到过同样的问题。请检查下面的场景我是如何解决这个问题的
首先,我在服务器和客户端android设备中实现了相同的代码,只是做了一些小改动。我在服务器应用程序中放置了一个按钮来调用discoverPeers()方法。同时,我的客户端应用程序正在运行并连接到同一个WI-FI网络。然后,它会从服务器应用程序中的广播触发WIFI\u P2P\u对等点\u更改\u操作事件。在那里,我得到了附近同龄人的名单 我也在做同样的事情,但仍然
WIFI\u P2P\u PEERS\u CHANGED\u ACTION
没有广播@吉图