বাংলায় অ্যান্ড্রয়েড সহায়িকা - Bangla Android Guide

নিকটস্থ সার্ভিস উদঘাটন (ডিসকভার)

অ্যান্ড্রয়েড সহজপ্রাপ্য সার্ভিস সম্পর্কে আপনার অ্যাপলিকেশনকে অবহিত করতে কলব্যাক পদ্ধতি ব্যবহার করে, সুতরাং এটা করতে প্রথমে আপনাকে ঐগুলো সেটআপ করা। ইনকামিং রেকর্ড শুনতে একটি WifiP2pManager.DnsSdTxtRecordListener তৈরী করুন।

অ্যান্ড্রয়েড আপনার অ্যাপলিকেশনে বিদ্যমান সার্ভিসের বিষয়ে জানাতে কলব্যাক মেথড ব্যবহার করে, সুতরাং প্রথম কাজ হচ্ছে ঐ গুলো সেটআপ করা। ইনকামিং রেকর্ড শুনতে একটি WifiP2pManager.DnsSdTxtRecordListener তৈরী করুন। এই রেকর্ড ঐচ্ছিকভাবে অন্য ডিভাইস কর্তিৃক ব্রডকাস্ট হতে পারে। যখন একজন ভিতরে আসে, ডিভাইস এড্রেস এবং চলতি পদ্ধতির বাইরের একটি ডাটা কাঠামোতে আপনি যে কোন প্রসঙ্গিক তথ্য চান তা কপি করে, তাই আপনি এটাতে পরে প্রবেশ করতে পারবেন। নিম্নোক্ত উদাহরণ মনে করে যে রেকর্ড একটি "buddyname" ফিল্ড ধারন করে, ইউজারের আইডেনটিটির সাথে থাকে।

final HashMap<String, String> buddies = new HashMap<String, String>();
...
private void discoverService() {
    DnsSdTxtRecordListener txtListener = new DnsSdTxtRecordListener() {
        @Override
        /* Callback includes:
         * fullDomain: full domain name: e.g "printer._ipp._tcp.local."
         * record: TXT record dta as a map of key/value pairs.
         * device: The device running the advertised service.
         */

        public void onDnsSdTxtRecordAvailable(
                String fullDomain, Map record, WifiP2pDevice device) {
                Log.d(TAG, "DnsSdTxtRecord available -" + record.toString());
                buddies.put(device.deviceAddress, record.get("buddyname"));
            }
        };
    ...
}

সার্ভিস ইনফর্মেশন পেতে, একটি WifiP2pManager.DnsSdServiceResponseListener তৈরী করুন। এটা সঠিক বিবরণ এবং কানেকশন তথ্য গ্রহণ করে। পূর্ববর্তী কোড অংশটি একটি ডিভাইস এড্রেস এবং বাডি নেম এক করতে একটি Map অবজেক্ট বাস্তবায়ন করে । সার্ভিস রেসপন্স লিসেনার সমগোত্রিয় সার্ভিস তথ্যের সাথে DNS রেকর্ড লিংক করতে এটা ব্যবহার করে। যখনই উভয় লিসেনার বাস্তবায়িত হবে, setDnsSdResponseListeners()পদ্ধতি ব্যবহার করে তাদের WifiP2pManager এ যুক্ত করুন।

private void discoverService() {
...

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

                // Update the device name with the human-friendly version from
                // the DnsTxtRecord, assuming one arrived.
                resourceType.deviceName = buddies
                        .containsKey(resourceType.deviceAddress) ? buddies
                        .get(resourceType.deviceAddress) : resourceType.deviceName;

                // Add to the custom adapter defined specifically for showing
                // wifi devices.
                WiFiDirectServicesList fragment = (WiFiDirectServicesList) getFragmentManager()
                        .findFragmentById(R.id.frag_peerlist);
                WiFiDevicesAdapter adapter = ((WiFiDevicesAdapter) fragment
                        .getListAdapter());

                adapter.add(resourceType);
                adapter.notifyDataSetChanged();
                Log.d(TAG, "onBonjourServiceAvailable " + instanceName);
        }
    };

    mManager.setDnsSdResponseListeners(channel, servListener, txtListener);
    ...
}

এখন একটি সার্ভিস রিকোয়েস্ট তৈরী করুন এবং addServiceRequest()কল করুন। এই পদ্ধতিও সফলতা বা ব্যর্থতা রিপোর্ট করতে একটি লিসেনার নিয়ে থাকে।

serviceRequest = WifiP2pDnsSdServiceRequest.newInstance();
        mManager.addServiceRequest(channel,
                serviceRequest,
                new ActionListener() {
                    @Override
                    public void onSuccess() {
                        // Success!
                    }

                    @Override
                    public void onFailure(int code) {
                        // Command failed.  Check for P2P_UNSUPPORTED, ERROR, or BUSY
                    }
                });

চুড়ান্তভাবে, discoverServices() এ কল করুন।

mManager.discoverServices(channel, new ActionListener() {

            @Override
            public void onSuccess() {
                // Success!
            }

            @Override
            public void onFailure(int code) {
                // Command failed.  Check for P2P_UNSUPPORTED, ERROR, or BUSY
                if (code == WifiP2pManager.P2P_UNSUPPORTED) {
                    Log.d(TAG, "P2P isn't supported on this device.");
                else if(...)
                    ...
            }
        });

যদি সব কিছু ভালোভাবে হয়, আপনাকে অভিনন্দন আপনি এটা করতে পেরেছেন। আর আপনি যদি কোন সমস্যার মুখোমুখি হন, মনে রাখবেন যে আপনি যে আসিঙক্রোনাস কল তৈরী করেছেন তা একটি আরগুমেন্ট হিসাবে একটি WifiP2pManager.ActionListener নেয় এবং এটা আপনাকে কলব্যাক দিয়ে নির্দেশিত সফলতা বা ব্যর্থতা প্রদান করবে। পদ্ধতি দ্বারা প্রদত্ত এরর কোড প্রব্লেম সম্পর্কে আভাস দেয়। এখানে কিছু সম্ভাব্য এরর দেয়া হলো এবং তারা কি বোঝায় তা দেয়া হলো

P2P_UNSUPPORTED

ওয়াই-ফাই পিয়ার টু পিয়ার অ্যাপ রান করা ডিভাইস সাপোর্ট করে না। সিস্টেমটি রিকোয়েস্ট প্রসেস

BUSY

সিস্টেমটি ব্যাস্ত আছে রিকোয়েস্ট প্রসেস করার মতো যথেস্ট সময় নেই

ERROR

একটি আভ্যান্তরিন এররের কারনে অপারেশন ব্যর্থ হয়েছে।