首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发现服务是通过wifip2p传输数据所必需的

发现服务是通过wifip2p传输数据所必需的
EN

Stack Overflow用户
提问于 2014-05-27 08:10:49
回答 1查看 495关注 0票数 1

我已经实现了使用P2P将数据从一个安卓手机传输到另一个安卓手机的Wifi wifi.for。发现服务是必要的,.I不了解process.P2p本身,我们正在发现对等点和请求对等点,需要发现服务吗?

我发现发现是必要的,并且总是得到内部错误,失败的callback.Need协助。

代码语言:javascript
复制
import java.util.HashMap;
import java.util.Map;

import android.net.wifi.p2p.WifiP2pDevice;
import android.net.wifi.p2p.WifiP2pManager;
import android.net.wifi.p2p.WifiP2pManager.Channel;
import android.net.wifi.p2p.WifiP2pManager.DnsSdServiceResponseListener;
import android.net.wifi.p2p.WifiP2pManager.DnsSdTxtRecordListener;
import android.net.wifi.p2p.WifiP2pManager.ActionListener;
import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceRequest;
import android.net.wifi.p2p.nsd.WifiP2pServiceRequest;

import java.util.ArrayList;

import android.util.Log;
import android.widget.Toast;

public class WifiDiscoverservice {
    WifiP2pManager mManager;
    Channel mChannel;
    WifiAdapter wifiadapter;
    MainActivity activity;
    Map<String, String> record;
    final HashMap<String, String> buddies = new HashMap<String, String>();


    public WifiDiscoverservice(WifiP2pManager mManager, Channel mChannel,MainActivity activity) {
        this.activity = activity;
        this.mChannel = mChannel;
        this.mManager = mManager;
    }

    public void startRegistration() {
        // Create a string map containing information about your service.
         record = new HashMap<String, String>();
        record.put("listenport", String.valueOf(8988));
        record.put("buddyname", "John Doe" + (int) (Math.random() * 1000));
        record.put("available", "visible");

        WifiP2pDnsSdServiceInfo serviceInfo = WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);
        WifiP2pServiceRequest serviceRequest = WifiP2pDnsSdServiceRequest.newInstance();

        mManager.addLocalService(mChannel, serviceInfo, new ActionListener() {
            public void onSuccess() {
             System.out.println("success");
             Toast.makeText(activity, "Local service success", Toast.LENGTH_LONG).show();
            }

            public void onFailure(int arg0) {
                 System.out.println(arg0);
                 Toast.makeText(activity, " Local service  failure", Toast.LENGTH_LONG).show();

            }
        });

        mManager.setDnsSdResponseListeners(mChannel, servListener, txtListener);
        mManager.addServiceRequest(mChannel, serviceRequest,
                new ActionListener() {
                    public void onSuccess() {
                         System.out.println("success");
                         Toast.makeText(activity, " servicerequest success", Toast.LENGTH_LONG).show();

                    }

                    public void onFailure(int code) {
                         System.out.println(code);
                         Toast.makeText(activity, " servicerequest failure", Toast.LENGTH_LONG).show();


                    }
                });
        mManager.discoverServices(mChannel, new ActionListener() {

            @Override
            public void onSuccess() {
                 System.out.println("success");
                 Toast.makeText(activity, "discovering success ", Toast.LENGTH_LONG).show();

            }

            @Override
            public void onFailure(int code) {
                 System.out.println(code);
                 Toast.makeText(activity, " discovering  failure", Toast.LENGTH_LONG).show();


            }
        });
    }

        DnsSdTxtRecordListener txtListener = new DnsSdTxtRecordListener() {
            @Override
            public void onDnsSdTxtRecordAvailable(String fullDomain,
                    Map<String,String> record, WifiP2pDevice device) {
                buddies.put(device.deviceAddress,
                        (String) record.get("buddyname"));
            }
        };

        DnsSdServiceResponseListener servListener = new DnsSdServiceResponseListener() {
            @Override
            public void onDnsSdServiceAvailable(String instanceName,
                    String registrationType, WifiP2pDevice resourceType) {


                resourceType.deviceName = buddies
                        .containsKey(resourceType.deviceAddress) ? buddies
                        .get(resourceType.deviceAddress)
                        : resourceType.deviceName;
                ArrayList<WifiP2pDevice> list = new ArrayList<WifiP2pDevice>();
                list.add(resourceType);

                wifiadapter = new WifiAdapter(activity, list);
                wifiadapter.notifyDataSetChanged();
            }
        };





}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-06 12:04:29

我发现这对于listener.Or的发现是必要的,否则我们可以使用溴化接收器而不是发现服务侦听器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23884212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档