Android Wi-Fi Direct:onPeers可用 [英] Android Wi-Fi Direct: onPeersAvailable

查看:95
本文介绍了Android Wi-Fi Direct:onPeers可用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个基于WiFi Direct for Android的简单应用程序,该应用程序必须连接两个设备.为此,我需要调用函数onPeersAvailable(myPeerListListener),但我不知道如何.

I'm developping a simple application based on WiFi Direct for Android that has to connect two devices. To do so I need to call to the función onPeersAvailable(myPeerListListener), but I don't know how.

我的应用程序具有以下两个元素:

My app has this two elements:

1-主要活动:

package android.nacho.WifiDirect;



import android.net.wifi.p2p.WifiP2pManager.Channel;

import android.net.wifi.p2p.WifiP2pManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class WifiDirect extends Activity {


    WifiP2pManager mManager;
    Channel mChannel;
    BroadcastReceiver mReceiver;

    IntentFilter mIntentFilter;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wifi_direct);


        //To register the BroadastReceiver
        mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
        mChannel =   mManager.initialize(this, getMainLooper(), null); //It was necessary to make a cast (Channel)
        mReceiver = new WiFiBroadcastReceiver(mManager, mChannel, this); //, this);

        //Layout
        final Button btnScan = (Button)findViewById(R.id.btnScan); 
        final TextView TextDebug=(TextView)findViewById(R.id.TextDebug);


        //To define the filter in the BroadcastReceiver
        mIntentFilter = new IntentFilter();
        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);




        final OnClickListener ScanListener=new OnClickListener() //Sacado de TEstPsycologico
        {
            public void onClick(View v){



                TextDebug.setText("Se intentan buscar Peers");

                mManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {


                    public void onSuccess() {

                        TextDebug.setText("Ha habido éxito buscando Peers");//DEBUG: Para ver si es posible encontrar Peers

                    }


                    public void onFailure(int reasonCode) {

                        TextDebug.setText("Algo ha salido mal buscando Peers"); //DEBUG: Para ver si pasó algo raro busando Peers
                    }
                });


                onPeersAvailable(myPeerListListener);

            }


        };

        btnScan.setOnClickListener(ScanListener);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_wifi_direct, menu);
        return true;
    }

    //


    @Override
    protected void onResume() {
        super.onResume();
        registerReceiver(mReceiver, mIntentFilter);
    }

   // unregister the broadcast receiver
    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(mReceiver);
    }

}

2类BroadcastReceiver:

2 Class BroadcastReceiver:

package android.nacho.WifiDirect;

import android.net.wifi.p2p.WifiP2pManager.Channel;
import android.net.wifi.p2p.WifiP2pManager.PeerListListener;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.p2p.WifiP2pManager;
import android.widget.Toast;



/**
 * A BroadcastReceiver that notifies of important Wi-Fi p2p events.
 */

public class WiFiBroadcastReceiver extends BroadcastReceiver {

    private WifiP2pManager manager;
    private Channel channel;
    private WifiDirect activity;
    private PeerListListener myPeerListListener;

    //For toast, add also context
    //private Context context;

    public WiFiBroadcastReceiver(WifiP2pManager manager, Channel channel, WifiDirect activity){//, Context context) {

        super();
        this.manager = manager;
        this.channel = channel;
        this.activity = activity;
       // this.context= context;
    }

    @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
             int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
             if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {

                //Toast.makeText(context, "Wi-Fi Direct is enable", Toast.LENGTH_LONG).show();

             } else {

                //Toast.makeText(context, "Wi-Fi Direct is not enable", Toast.LENGTH_LONG).show();
             }      

        } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
            // Call WifiP2pManager.requestPeers() to get a list of current peers

             // request available peers from the wifi p2p manager. This is an
            // asynchronous call and the calling activity is notified with a
            // callback on PeerListListener.onPeersAvailable()
            if (manager != null) {
                 manager.requestPeers(channel, myPeerListListener);
                 manager.onPeersAvailable(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
        }
    }
}

直到现在,我的代码应该能够检测正在运行该应用程序的设备周围的对等设备,该ID应该存储在变量 myPeerListListener 中.所有这些都发生在称为OnReceiv()的BroadcastReceiver方法的第二个意图中,方法是调用:

Until now my code should be able to detect peers around the device running the app, which ID should be stored in the variable myPeerListListener. All this take place in the second intend of the BroadcastReceiver method called OnReceiv(), by calling:

 manager.requestPeers(channel, myPeerListListener);

现在我要操作该列表.因此,按照API信息,它应该调用requestPeers,您可以在此处看到该API:

Now I want to manipulate that list. So following the API information it should be calling requestPeers, you can see the API on here:

http://developer.android.com/guide/topics/connectivity/wifip2p.html

*第发现对等点

所以我尝试的是在下面的调用中写:

So what I have tried was to write below a call to:

manager.onPeersAvailable(myPeerListListener); 

但我收到此错误:

未为类型WifiP2pManager定义onPeersAvailable(WifiP2pManager.PeerListListener)方法

有人可以告诉我如何将PeerListListener正确发送到主要活动吗?

Could anyone tell me how could I send the PeerListListener to the main activity properly?

非常感谢您的光临

推荐答案

您应在PeerListListener内部实现onPeersAvailable方法.

You should implement the onPeersAvailable method inside the PeerListListener.

请参阅 http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html 了解更多信息.

这篇关于Android Wi-Fi Direct:onPeers可用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆