ब्लूटूथ से जुड़ी अनुमतियां

अपने ऐप्लिकेशन में ब्लूटूथ की सुविधाओं का इस्तेमाल करने के लिए, आपको एलान करना होगा कि आपको कई सुविधाएं मिलें अनुमतियां हैं. आपको यह भी बताना चाहिए कि क्या आपके ऐप्लिकेशन के लिए ज़रूरी है ब्लूटूथ क्लासिक या ब्लूटूथ कम ऊर्जा (BLE) के लिए सहायता. अगर आपके ऐप्लिकेशन को ब्लूटूथ क्लासिक या BLE की ज़रूरत नहीं है, लेकिन ये अब भी इनका फ़ायदा उठा सकते हैं टेक्नोलॉजी का इस्तेमाल करने के लिए, रनटाइम के समय उपलब्धता देखी जा सकती है.

अनुमतियों का एलान करना

आपके ऐप्लिकेशन में जिन अनुमतियों का एलान किया जाता है वे आपके ऐप्लिकेशन के टारगेट पर निर्भर करते हैं SDK टूल का वर्शन.

Android 12 या उसके बाद के वर्शन को टारगेट करता है

ध्यान दें: Android 8.0 (एपीआई लेवल 26) और उसके बाद वाले वर्शन पर, कंपैनियन डिवाइस मैनेजर (सीडीएम) इस सेक्शन में बताई गई अनुमतियों के मुकाबले, कंपैनियन डिवाइस पर काम करता है. कॉन्टेंट बनाने सीडीएम सिस्टम, आपके ऐप्लिकेशन की ओर से दूसरे डिवाइस से जोड़ने वाला यूआई उपलब्ध कराता है. इसे इस्तेमाल करने की ज़रूरत नहीं होती जगह की जानकारी की अनुमतियां.

अगर आपको दूसरे डिवाइस से जोड़ने और कनेक्ट करने के अनुभव पर ज़्यादा कंट्रोल चाहिए, तो अनुमतियों के बारे में ज़्यादा जानें.

ब्लूटूथ की अनुमतियों वाला डायलॉग बॉक्स
सिस्टम की अनुमतियों वाला डायलॉग बॉक्स, जिसमें उपयोगकर्ता को ऐसा करने के लिए कहा गया किसी ऐप्लिकेशन को आस-पास मौजूद डिवाइसों को खोजने, उनके विज्ञापन दिखाने, और उनसे जुड़ने की अनुमति दें डिवाइस.

अगर आपका ऐप्लिकेशन, Android 12 (एपीआई लेवल 31) या उसके बाद के वर्शन को टारगेट करता है, तो इनके बारे में एलान करें अनुमतियां दी हैं:

  1. अगर आपका ऐप्लिकेशन ब्लूटूथ का इस्तेमाल करता है डिवाइसों, जैसे कि BLE वाले सहायक डिवाइस (जैसे, कीबोर्ड, माउस, मॉनिटर, वेबकैम वगैरह) BLUETOOTH_SCAN अनुमति.
  2. अगर आपका ऐप्लिकेशन मौजूदा डिवाइस को दूसरे ब्लूटूथ से खोजने लायक बनाता है डिवाइस, एलान करें BLUETOOTH_ADVERTISE अनुमति.
  3. अगर आपका ऐप्लिकेशन पहले से जुड़े हुए ब्लूटूथ से बातचीत करता है डिवाइसों के साथ काम करते हैं, तो BLUETOOTH_CONNECT अनुमति.
  4. ब्लूटूथ से जुड़ी लेगसी अनुमतियों के एलान के लिए, इस नीति को सेट करें 30 के लिए android:maxSdkVersion. साथ काम करने से जुड़े इस चरण से सिस्टम को मदद मिलती है अपने ऐप्लिकेशन को सिर्फ़ ब्लूटूथ की वे अनुमतियां दें जिनकी ज़रूरत उसे इंस्टॉल करते समय होती है Android 12 या इसके बाद के वर्शन पर चलने वाले डिवाइस.
  5. अगर आपका ऐप्लिकेशन जगह की जानकारी का पता लगाने के लिए, ब्लूटूथ स्कैन के नतीजों का इस्तेमाल करता है, तो यह ACCESS_FINE_LOCATION अनुमति. इसके अलावा, यह दावा किया जा सकता है कि आपका ऐप्लिकेशन, भौतिक स्थान.

BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT, और BLUETOOTH_SCAN की अनुमतियां रनटाइम की अनुमतियां हैं. इसलिए, आपको स्पष्ट रूप से उपयोगकर्ता से अनुमति मिल जाएगी. ब्लूटूथ डिवाइस, डिवाइस को अन्य डिवाइसों से खोजे जाने लायक बनाएं या बातचीत करें पहले से जुड़े ब्लूटूथ डिवाइसों के साथ. जब आपका ऐप्लिकेशन इनमें से किसी एक विकल्प का अनुरोध करता है तो सिस्टम, उपयोगकर्ता को इन अनुमतियों को ऐक्सेस करने की अनुमति देने के लिए कहता है आस-पास मौजूद डिवाइस, जैसा कि पहली इमेज में दिखाया गया है.

नीचे दिया गया कोड स्निपेट, ब्लूटूथ से जुड़े एलान करने का तरीका बताता है Android 12 या उसके बाद के वर्शन को टारगेट करने पर, आपको अपने ऐप्लिकेशन की अनुमतियों की ज़रूरत पड़ेगी:

<manifest>
    <!-- Request legacy Bluetooth permissions on older devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH"
                     android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
                     android:maxSdkVersion="30" />

    <!-- Needed only if your app looks for Bluetooth devices.
         If your app doesn't use Bluetooth scan results to derive physical
         location information, you can
         <a href="#assert-never-for-location">strongly assert that your app
         doesn't derive physical location</a>. -->
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />

    <!-- Needed only if your app makes the device discoverable to Bluetooth
         devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />

    <!-- Needed only if your app communicates with already-paired Bluetooth
         devices. -->
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

    <!-- Needed only if your app uses Bluetooth scan results to derive physical location. -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    ...
</manifest>

इस बात पर ज़ोर दें कि आपके ऐप्लिकेशन को किसी जगह की जानकारी नहीं मिलती

अगर आपका ऐप्लिकेशन जगह की जानकारी पाने के लिए, ब्लूटूथ स्कैन के नतीजों का इस्तेमाल नहीं करता है, तो यह पक्का करें कि आपका ऐप्लिकेशन, ब्लूटूथ ऐक्सेस करने की अनुमतियों का कभी इस्तेमाल नहीं करता व्यक्ति की जगह का पता लगाने के लिए किया जाता है. इसके लिए, नीचे दिया गया तरीका अपनाएं:

  1. अपने BLUETOOTH_SCAN में android:usesPermissionFlags एट्रिब्यूट जोड़ें अनुमति का एलान करें और इस विशेषता का मान neverForLocation पर सेट करें.

  2. अगर आपके ऐप्लिकेशन के लिए जगह की जानकारी की ज़रूरत न हो, तो ACCESS_FINE_LOCATION अनुमति मिलना बाकी है.

नीचे दिया गया कोड स्निपेट आपके ऐप्लिकेशन की मेनिफ़ेस्ट फ़ाइल को अपडेट करने का तरीका बताता है:

<manifest>
    <!-- Include "neverForLocation" only if you can strongly assert that
         your app never derives physical location from Bluetooth scan results. -->
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN"
                     android:usesPermissionFlags="neverForLocation" />

    <!-- Not needed if you can strongly assert that your app never derives
         physical location from Bluetooth scan results and doesn't need location
         access for any other purpose. -->
    <strike><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /></strike>
    ...
</manifest>

Android 11 या उससे पहले के वर्शन को टारगेट करें

अगर आपका ऐप्लिकेशन, Android 11 (एपीआई लेवल 30) या इससे पहले के वर्शन को टारगेट करता है, तो इनके बारे में एलान करें अनुमतियां दी हैं:

  • BLUETOOTH ज़रूरी है कोई ब्लूटूथ क्लासिक या BLE कम्यूनिकेशन करने के लिए, जैसे कि कनेक्शन बनाने, कनेक्शन स्वीकार करने, और डेटा ट्रांसफ़र करने की सुविधा मिलती है.
  • ACCESS_FINE_LOCATION यह ज़रूरी है, क्योंकि Android 11 और इससे पहले के वर्शन वाले डिवाइसों पर ब्लूटूथ स्कैन किया जा सकता है का उपयोग संभावित रूप से इसकी जगह की जानकारी इकट्ठा करने के लिए किया जा सकता है उपयोगकर्ता.

जगह की जानकारी की अनुमतियां रनटाइम की अनुमतियां होती हैं. रनटाइम के दौरान इन अनुमतियों का अनुरोध करना ज़रूरी है साथ ही, इनके बारे में अपने मेनिफ़ेस्ट में बता दें.

आस-पास मौजूद ब्लूटूथ डिवाइसों के बारे में जानें

अगर आप चाहते हैं कि आपका ऐप्लिकेशन, डिवाइस को खोजने की सुविधा शुरू करे या ब्लूटूथ में बदलाव करने की अनुमति दे सेटिंग है, तो आपको BLUETOOTH_ADMIN अनुमति. ज़्यादातर ऐप्लिकेशन को इस अनुमति की ज़रूरत सिर्फ़ तब होती है, जब वे स्थानीय ब्लूटूथ डिवाइस इसके ज़रिए दी गई अन्य क्षमताओं का इस्तेमाल न करें अनुमति दें, जब तक कि ऐप्लिकेशन "पावर मैनेजर" न हो जो ब्लूटूथ सेटिंग को संशोधित करती है उपयोगकर्ता के अनुरोध पर. अपनी ऐप्लिकेशन मेनिफ़ेस्ट फ़ाइल में अनुमति का एलान करें. इसके लिए उदाहरण:

<manifest>
...
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
...
</manifest>

अगर आपका ऐप्लिकेशन किसी सेवा के साथ काम करता है और Android 10 (एपीआई लेवल 29) पर चल सकता है या Android 11 के लिए, आपको ACCESS_BACKGROUND_LOCATION ब्लूटूथ डिवाइस खोजने की अनुमति. इस बारे में ज़्यादा जानकारी पाने के लिए, ज़रूरी जानकारी देखने के लिए, यहां दिए गए लिंक पर जाकर जगह की जानकारी ऐक्सेस करें बैकग्राउंड.

नीचे दिया गया कोड स्निपेट, ACCESS_BACKGROUND_LOCATION का एलान करने का तरीका बताता है अनुमति:

<manifest>
...
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
...
</manifest>

<uses-permission> देखें का इस्तेमाल करें.

ब्लूटूथ सुविधा के इस्तेमाल की जानकारी देना

अगर ब्लूटूथ आपके ऐप्लिकेशन का बहुत ज़रूरी हिस्सा है, तो आपके पास अपने मेनिफ़ेस्ट में फ़्लैग जोड़ने का विकल्प होता है फ़ाइल में दी गई जानकारी मौजूद है. कॉन्टेंट बनाने <uses-feature> एलिमेंट अनुमति देता है आपको यह बताना होगा कि आपका ऐप्लिकेशन किस तरह का हार्डवेयर इस्तेमाल करता है और यह ज़रूरी है कि वह किस तरह का है आवश्यक.

इस उदाहरण में यह बताने का तरीका बताया गया है कि आपके डिवाइस के लिए ब्लूटूथ क्लासिक ज़रूरी है है.

<uses-feature android:name="android.hardware.bluetooth" android:required="true"/>

अगर आपका ऐप्लिकेशन ब्लूटूथ कम ऊर्जा पर निर्भर है, तो आप इनका इस्तेमाल कर सकते हैं:

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

अगर आपने यह कहा कि आपके ऐप्लिकेशन के लिए इस सुविधा की ज़रूरत है, तो Google Play Store अपने ऐप्लिकेशन को उन उपयोगकर्ताओं से छिपाना होगा जिनमें वे सुविधाएं नहीं हैं. इस वजह से, आपको को ज़रूरी एट्रिब्यूट को true पर सिर्फ़ तब सेट करना चाहिए, जब आपका ऐप्लिकेशन बिना किसी रुकावट के काम न करे सुविधा.

रनटाइम के दौरान सुविधा की उपलब्धता देखना

ऐसे डिवाइसों पर ऐप्लिकेशन उपलब्ध कराने के लिए जो ब्लूटूथ क्लासिक या BLE, आपको अब भी अपने ऐप्लिकेशन के<uses-feature> मेनिफ़ेस्ट, लेकिन required="false" सेट करें. इसके बाद, रन-टाइम पर यह तय किया जा सकता है कि सुविधा की उपलब्धता PackageManager.hasSystemFeature():

Kotlin

// Check to see if the Bluetooth classic feature is available.
val bluetoothAvailable = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH)

// Check to see if the BLE feature is available.
val bluetoothLEAvailable = packageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)

Java

// Use this check to determine whether Bluetooth classic is supported on the device.
// Then you can selectively disable BLE-related features.
boolean bluetoothAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);

// Use this check to determine whether BLE is supported on the device. Then
// you can selectively disable BLE-related features.
boolean bluetoothLEAvailable = getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE);