
最近我按照Developer.Android.Com给出的步骤
但似乎我在那里有一些运气.
我试图发现附近可用的同伴,
把他们放进arrayList但似乎没有运气.我没有得到任何东西.
我的实际2设备实际上是androID 4.1和4.2
由于Wifi Direct基于API Level 14,因此它是androID 4.0
我认为我的真实设备不是问题.
我使用的概念是
使用1个活动和1个broadCast接收器.
请看看我的代码,我说错了还是我忘了?
Chat1Activity.java
package com.example.androtut;import java.util.ArrayList;import others.MybroadcastReceiver;import androID.app.Activity;import androID.content.broadcastReceiver;import androID.content.Context;import androID.content.IntentFilter;import androID.net.wifi.p2p.wifip2pDeviceList;import androID.net.wifi.p2p.wifip2pManager;import androID.net.wifi.p2p.wifip2pManager.Channel;import androID.net.wifi.p2p.wifip2pManager.PeerListListener;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.Widget.button;import androID.Widget.Toast;public class Chat1Activity extends Activity { private final IntentFilter mintentFilter = new IntentFilter(); private Channel mChannel; private wifip2pManager mManager; private broadcastReceiver mReceiver; private ArrayList peers = new ArrayList(); private PeerListListener myPeerListListener = new PeerListListener() { @OverrIDe public voID onPeersAvailable(wifip2pDeviceList peerList) { // Out with the old, in with the new. peers.clear(); peers.addAll(peerList.getDeviceList()); // If an AdapterVIEw is backed by this data, notify it // of the change. For instance, if you have a ListVIEw of available // peers, trigger an update. if (peers.size() == 0) { Toast.makeText(getApplicationContext(),"nothing found!", Toast.LENGTH_LONG).show(); return; } else { Toast.makeText(getApplicationContext(),"We've found " + peers.size() + " users", Toast.LENGTH_LONG).show(); } } }; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_chat1); //Toast.makeText(getApplicationContext(), "Wifi is okay", Toast.LENGTH_LONG).show(); prepareIntentFilter(); button btn_startchat = (button) findVIEwByID(R.ID.btn_startchat); // Listening to News Feed button click btn_startchat.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw vIEw) { // Launching News Feed Screen detectPeers(); } }); mManager = (wifip2pManager) getSystemService(Context.WIFI_P2P_SERVICE); mChannel = mManager.initialize(this, getMainLooper(), null); } private voID detectPeers(){ mManager.discoverPeers(mChannel, new wifip2pManager.ActionListener() { @OverrIDe public voID onSuccess() { // Code for when the discovery initiation is successful goes here. // No services have actually been discovered yet, so this method // can often be left blank. Code for peer discovery goes in the // onReceive method, detailed below. } @OverrIDe public voID onFailure(int reasonCode) { // Code for when the discovery initiation fails goes here. // Alert the user that something went wrong. } }); } @OverrIDe protected voID onResume() { super.onResume(); mReceiver = new MybroadcastReceiver(mManager, mChannel, this, myPeerListListener); registerReceiver(mReceiver, mintentFilter); } /* unregister the broadcast receiver */ @OverrIDe protected voID onPause() { super.onPause(); unregisterReceiver(mReceiver); } private voID prepareIntentFilter() { mintentFilter.addAction(wifip2pManager.WIFI_P2P_STATE_CHANGED_ACTION); // Indicates a change in the List of available peers. mintentFilter.addAction(wifip2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); // Indicates the state of Wi-Fi P2P connectivity has changed. mintentFilter.addAction(wifip2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); // Indicates this device's details have changed. mintentFilter.addAction(wifip2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION); }}和MybroadcastReceiver.java
package others;import java.util.ArrayList;import com.example.androtut.Chat1Activity;import androID.content.broadcastReceiver;import androID.content.Context;import androID.content.Intent;import androID.net.wifi.p2p.wifip2pDevice;import androID.net.wifi.p2p.wifip2pDeviceList;import androID.net.wifi.p2p.wifip2pManager;import androID.net.wifi.p2p.wifip2pManager.Channel;import androID.net.wifi.p2p.wifip2pManager.PeerListListener;import androID.Widget.Toast;public class MybroadcastReceiver extends broadcastReceiver { private wifip2pManager mManager; private Channel mChannel; private Chat1Activity mActivity; private PeerListListener myPeerListListener; public MybroadcastReceiver(wifip2pManager manager, Channel channel, Chat1Activity activity, PeerListListener obPeerList) { super(); this.mManager = manager; this.mChannel = channel; this.mActivity = activity; this.myPeerListListener = obPeerList; } @OverrIDe public voID onReceive(Context context, Intent intent) { String action = intent.getAction(); if (wifip2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { // Check to see if Wi-Fi is enabled and notify appropriate activity } else if (wifip2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { // Call wifip2pManager.requestPeers() to get a List of current peers if (mManager != null) { mManager.requestPeers(mChannel, myPeerListListener); } } else if (wifip2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION .equals(action)) { // Respond to new connection or disconnections } else if (wifip2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION .equals(action)) { // Respond to this device's wifi state changing } if (wifip2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { int state = intent.getIntExtra(wifip2pManager.EXTRA_WIFI_STATE, -1); if (state == wifip2pManager.WIFI_P2P_STATE_ENABLED) { // Wifi P2P is enabled Toast.makeText(mActivity.getApplicationContext(),"Wifi is okay", Toast.LENGTH_LONG).show(); } else { // Wi-Fi P2P is not enabled Toast.makeText(mActivity.getApplicationContext(), "Wifi is not okay", Toast.LENGTH_LONG).show(); } } }}解决方法:
我猜你没有将PeerListListener添加到你的活动中.所以它不会回复.
您可以尝试在活动中实现PeerListListener
public class Chat1Activity extends Activity implements wifip2pManager.PeerListListener并覆盖活动中的onPeerAvailable方法
@OverrIDe public voID onPeersAvailable(wifip2pDeviceList peers) { //put your code here }并在您的Receiver中更改requestPeers方法
if (mManager != null) { mManager.requestPeers(mChannel, mActivity); }希望这有帮助!!
总结以上是内存溢出为你收集整理的java – 如何解决通过Wi-Fi(android API)发现其他设备?全部内容,希望文章能够帮你解决java – 如何解决通过Wi-Fi(android API)发现其他设备?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)