android - एंड्रॉइड: ब्लूटूथ खोज योग्यता सेट करें




bluetooth android-bluetooth (4)

मैंने पिछले कुछ दिनों में ऐसे ऐप बनाने की कोशिश की है जो मेरे सैमसंग गैलेक्सी एस 3 मिनी (एंड्रॉइड 2.1.4) को "अनंत" मात्रा के लिए खोजा जा सके। मेरा कोड वर्तमान में निम्नानुसार दिखता है:

package com.example.downtoone;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.content.LocalBroadcastManager;
import android.widget.Toast;

import com.example.downtoone.*;
import android.bluetooth.*;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

public class MainActivity extends Activity {

    private BluetoothAdapter mBluetoothAdapter = null;

    // Intent request codes
    private static final int REQUEST_CONNECT_DEVICE = 1;
    private static final int REQUEST_ENABLE_BT = 2;
    private static final int REQUEST_ENABLE_DSC = 3;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        if (mBluetoothAdapter == null) {
            Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
            finish();
            return;
        }
    }   
    @Override
    public void onStart() {
        super.onStart();

        if (!mBluetoothAdapter.isEnabled()) {
            Intent MDisc = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
            MDisc.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,0);
            startActivityForResult(MDisc, REQUEST_ENABLE_DSC);
        }
    }
    @Override
    public void onRestart(){
        super.onRestart();
    }
    @Override
    public void onResume() {
        super.onResume();
    }
    @Override
    public void onStop() {
        super.onStop();
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case REQUEST_CONNECT_DEVICE:
            if (resultCode == Activity.RESULT_OK) {

            }
            break;
        case REQUEST_ENABLE_BT:
            if (resultCode == Activity.RESULT_CANCELED) {
                Toast.makeText(this, "BLUETOOTH NEEDS TO BE ENABLED AND DISCOVERABLE", Toast.LENGTH_SHORT).show();
                finish();
            }
            break;
        case REQUEST_ENABLE_DSC:
            if (resultCode == Activity.RESULT_CANCELED) {
                Toast.makeText(this, "BLUETOOTH NEEDS TO BE ENABLED AND DISCOVERABLE", Toast.LENGTH_SHORT).show();
                //finish();
            }
            break;
        }
    }

    public void finishBTsetup(){

    }
}

इस तथ्य के बावजूद कि मैं '0' के लिए समय निर्धारित कर रहा हूं, खोज्यता केवल 2 मिनट के लिए चलती है यह बल्कि निराशाजनक है क्योंकि मुझे पता है कि डिवाइस को अनिश्चित समय के लिए खोजा जा सकता है! (मैं मैन्युअल रूप से ब्लूटूथ सेटिंग्स का उपयोग कर सकता हूं और ब्लूटूथ दृश्यता को 'कभी भी आउट आउट' करने के लिए सेट नहीं कर सकता!)

मैंने सफलता के बिना एक जवाब के लिए पूरी तरह से देखा है ... कई पद क्या देते हैं (जैसे कि किसी रिश्तेदार अकुशल प्रोग्रामर के लिए) जैसे वे रहस्यमय समाधान दिखते हैं जो या तो बहुत अस्पष्ट (*), भ्रामक (**) या सही गलत हैं इस मुद्दे को सुलझाने का एक सरल सरल जवाब (यदि यह निश्चित रूप से मौजूद है!) को बहुत सराहना की जाएगी!

(*) ब्लूटूथ को एंड्रॉइड 2.1 पर खोजो अनिश्चित समय तक

(**) एंड्रॉइड ब्लूटूथ डिस्प्लेबैरिटी एंड्रॉइड एप्लीकेशन बढ़ाएं ब्लूटूथ दृश्यता अवधि (उत्तर अनुभाग)

MANIFEST:

<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.downtoone"
        android:versionCode="1"
        android:versionName="1.0" >

        <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="14" />
        <uses-permission android:name="android.permission.BLUETOOTH"/>
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />  
        <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />


        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    </manifest>

संपादित करें: लोगों को थोड़ा संदर्भ देने के लिए, इस एप्लिकेशन के लक्ष्यों में से एक यह है कि सभी आस-पास के ब्लूटूथ डिवाइसों को अनदेखा करने का प्रयास करें ताकि यह सीधे उनसे बात कर सके। चूंकि अधिकांश स्मार्टफोन कम समय (2 मिनट आमतौर पर *) के लिए खोजा जा सकते हैं और जब उपयोगकर्ता सीधे खोजयोग्यता (= दृश्यता) को सक्षम करता है, तो ऐसे ऐप्स जो उपकरणों के लिए स्कैन करते हैं और स्वचालित रूप से डेटा विनिमय करते हैं, उन्हें कार्यान्वित करना असंभव है। (* उपयोगकर्ता आमतौर पर 'कोई टाइम आउट' पर दृश्यता सेट कर सकते हैं, लेकिन इसके लिए उपयोगकर्ता को अपने स्मार्टफोन की ब्लूटूथ सेटिंग के तहत सीधे उस विकल्प को सेट करने की आवश्यकता होती है, जो कि बहुत खूबसूरत समाधान नहीं है ...)


एंड्रॉइड प्रलेखन के मुताबिक, खोज करने योग्य होने के लिए अधिकतम समय 300seconds पर कैप किया गया है। आप बीटी हमेशा के लिए खोज योग्य नहीं बना सकते।

कृपया देखें: http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#ACTION_REQUEST_DISCOVERABLE

300 सेकंड की अधिकतम अवधि प्राप्त करने के लिए, आपको कोड की एक पंक्ति को बदलना होगा:

MDisc.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION,300)

मुझे यकीन नहीं है कि यह आपके आवेदन के अनुरूप होगा या यदि किसी अन्य कारण से आप यह नहीं करना चाहते हैं, तो क्यों नहीं, बल्कि डिफ़ॉल्ट समय के लिए खोज क्यों न करें, इसके बाद खोज को पुनरारंभ करें? इस तरह यह तकनीकी रूप से एक असीमित खोज होगी, जो केवल बीच में बहुत ही थोड़े से विराम को ट्रिगर करेगा, मैंने इस विधि को एक प्रसारण रिसीवर के उपयोग से उपयोग किया था

मैं गतिविधि प्रारंभ करने की खोज को ट्रिगर करने के लिए onStart () विधि में startDiscovery () डाल दिया है, फिर ACTION_DISCOVERY_FINISHED को अपने प्रसारण रिसीवर की रीसिव () विधि में सुनना, यहाँ startDiscovery () को एक और कॉल दें।

यह हमेशा के लिए खोज को पाशन देगा, अगर आप एक डिवाइस ढूंढने पर रोकना चाहते हैं तो आपको रिसीवर के ACTION_FOUND श्रोता में रद्द करें () को कॉल करें, आप यहां कुछ जांच कर सकते हैं यदि आपको किसी विशेष उपकरण को ढूंढना है - फिर भी मेरे मामले में मैं किसी विशेष उपकरण के मैक पते की जांच करना ताकि खोज तक यह तब तक जारी रहेगा जब तक यह पाया नहीं गया था।

यह निश्चित नहीं है कि यह कोई भी उपयोग है लेकिन यदि आपको अधिक विस्तार की आवश्यकता है तो मुझे बताएं


मेरे लिए काम करता है

Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
enableBtIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);
startActivityForResult(enableBtIntent, Utils.REQUEST_DEVICE_DISCOVERABLE);

अपने ब्लूटूथ को मैन्युअल रूप से अक्षम करें और फिर कोड चलाएं। यह काम करेगा, हाँ


मैं अपने पास तीन उपकरणों पर एक ही निष्कर्ष पर आया हूं

  • एंड्रॉइड v 4.3 और उच्च: EXTRA_DISCOVERABLE_DURATION 0 कोई सीमा नहीं काम करता है
  • एंड्रॉइड v 4.1: EXTRA_DISCOVERABLE_DURATION 0 अधिकतम 1 घंटा है मापदंडों में कोई सीमा नहीं मैन्युअल रूप से बदलना होगा






discoverability