java– 如何解决通过Wi-Fi(android API)发现其他设备?

java– 如何解决通过Wi-Fi(android API)发现其他设备?,第1张

概述最近我按照Developer.Android.Com给出的步骤但似乎我在那里有一些运气.我试图发现附近可用的同伴,把他们放进arraylist但似乎没有运气.我没有得到任何东西.我的实际2设备实际上是android4.1和4.2由于WifiDirect基于APILevel14,因此它是android4.0我认为我的真实设备不是问

最近我按照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)发现其他设备?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1102359.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存