prakash
prakash

Reputation: 109

discover service is necessary for data transferring through wifip2p

I have implemented Wifi P2P for transferring data from one android mobile to other using wifi.for this,discover service is necessary .I am not understanding about the process.P2p itself,We are discovering peers and requesting peers and need for discovering service?

I found discovering is necessary and always getting internal error ,failure callback.Need Assistance.

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();
            }
        };





}

Upvotes: 1

Views: 508

Answers (1)

prakash
prakash

Reputation: 109

I found that is necessary for discovering by a listener.Or otherwise we can use broacast receiver instead of discover service listener

Upvotes: 2

Related Questions