फ़ोन नंबर ब्लॉक करने की सुविधा लागू करें

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

Android 7.0 से पहले, Android उपयोगकर्ताओं को परेशान करने वाले फ़ोन नंबर से आने वाले कॉल और मैसेज पर पाबंदी लगाने के लिए, डाउनलोड किए गए ऐप्लिकेशन का इस्तेमाल करना पड़ता था. इनमें से कई ऐप्लिकेशन ठीक से काम नहीं करते या कॉल और मैसेज को ब्लॉक करने के लिए सही एपीआई उपलब्ध न होने की वजह से, इनका अनुभव भी अच्छा नहीं होता.

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

सुविधाएं

Android 7.0 रिलीज़ में, BlockedNumberProvider कॉन्टेंट की सेवा देने वाली कंपनी की सुविधा जोड़ी गई है. यह उन फ़ोन नंबरों की सूची सेव करती है जिनसे उपयोगकर्ता ने कहा है कि वे उसे कॉल, एसएमएस, और एमएमएस के ज़रिए संपर्क न करें. सिस्टम, ब्लॉक की गई सूची में मौजूद नंबरों से आने वाले कॉल और मैसेज पर पाबंदी लगाकर, उन नंबरों को ब्लॉक कर देगा. Android 7.0, ब्लॉक किए गए नंबरों की सूची दिखाता है. साथ ही, उपयोगकर्ता को नंबर जोड़ने और हटाने की अनुमति देता है.

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

  • उपयोगकर्ता को यह पक्का किया जाएगा कि ब्लॉक करने की सुविधा, बिना किसी सेटअप के काम करेगी और ऐप्लिकेशन बदलने या नया फ़ोन मिलने पर, ब्लॉक की गई सूची नहीं मिटेगी. सिस्टम पर मौजूद सभी काम के ऐप्लिकेशन, एक ही सूची शेयर कर सकते हैं, ताकि उपयोगकर्ता को सबसे बेहतर अनुभव मिल सके.
  • ऐप्लिकेशन डेवलपर को ब्लॉक की गई सूची और आने वाले कॉल और मैसेज को मैनेज करने के लिए, खुद कोई तरीका बनाने की ज़रूरत नहीं है. वे प्लैटफ़ॉर्म की दी गई सुविधा का इस्तेमाल कर सकते हैं.
  • उपयोगकर्ता के डिफ़ॉल्ट तौर पर चुने गए डायलर / मैसेंजर ऐप्लिकेशन, सेवा देने वाली कंपनी के डेटा को पढ़ सकते हैं और उसमें डेटा जोड़ सकते हैं. दूसरे ऐप्लिकेशन, createManageBlockedNumbersIntent() का इस्तेमाल करके ब्लॉक की गई सूची के मैनेजमेंट यूज़र इंटरफ़ेस को लॉन्च कर सकते हैं
  • OEM, प्लैटफ़ॉर्म की दी गई सुविधा का इस्तेमाल करके, ब्लॉक करने की सुविधा को डिफ़ॉल्ट रूप से उपलब्ध करा सकते हैं. OEM इस बात को लेकर भरोसा रख सकते हैं कि जब उपयोगकर्ता किसी दूसरे OEM के डिवाइस से स्विच करेंगे, तो उन्हें बेहतर अनुभव मिलेगा. ऐसा इसलिए, क्योंकि ब्लॉक की गई सूची भी ट्रांसफ़र की जाएगी.
  • अगर कैरियर के पास अपना डायलर या मैसेंजर ऐप्लिकेशन है, तो वह उपयोगकर्ता को ब्लॉकलिस्ट मैनेज करने की अनुमति देने के लिए, प्लैटफ़ॉर्म की सुविधा का फिर से इस्तेमाल कर सकता है. उन्हें भरोसा हो सकता है कि उपयोगकर्ताओं की ब्लॉक सूची, उनके पास बनी रहेगी. भले ही, वे नया डिवाइस इस्तेमाल कर रहे हों. आखिर में, कैरियर की अनुमति वाले सभी ऐप्लिकेशन, ब्लॉक की गई सूची को पढ़ सकते हैं. इसलिए, अगर कैरियर को ब्लॉक की गई सूची के आधार पर, उपयोगकर्ता के लिए कुछ और ज़्यादा बेहतर ब्लॉकिंग की सुविधा देनी है, तो अब यह सुविधा उपलब्ध है.

डेटा फ़्लो

ब्लॉक किए गए नंबर का डेटा फ़्लो

पहली इमेज. फ़ोन नंबर का डेटा फ़्लो ब्लॉक करना

उदाहरण और सोर्स

यहां नंबर ब्लॉक करने की नई सुविधा का इस्तेमाल करके किए गए कॉल के उदाहरण दिए गए हैं:

ऐप्लिकेशन से ब्लॉक किए गए नंबर मैनेजर को लॉन्च करना

Context.startActivity(telecomManager.createManageBlockedNumbersIntent(), null);

ब्लॉक किए गए नंबरों के बारे में क्वेरी करना

Cursor c = getContentResolver().query(BlockedNumbers.CONTENT_URI,
         new String[]{BlockedNumbers.COLUMN_ID,
         BlockedNumbers.COLUMN_ORIGINAL_NUMBER,
         BlockedNumbers.COLUMN_E164_NUMBER}, null, null, null);

ब्लॉक किया गया नंबर डालें

ContentValues values = new ContentValues();
values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);

ब्लॉक किया गया नंबर मिटाना

ContentValues values = new ContentValues();
values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, "1234567890");
Uri uri = getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
getContentResolver().delete(uri, null, null);

लागू करना

नंबर ब्लॉक करने की सुविधा का इस्तेमाल करने के लिए, ये अहम टास्क पूरे करने होंगे:

  • OEM, अपने डिवाइसों पर कॉल/मैसेज पर पाबंदी लगाने की सुविधाएं लागू करते हैं. इसके लिए, वे BlockedNumberProvider का इस्तेमाल करते हैं
  • अगर मोबाइल और इंटरनेट सेवा देने वाली कंपनी के पास डायलर या मैसेंजर ऐप्लिकेशन है, तो BlockedNumberProvider का इस्तेमाल करके कॉल/मैसेज पर पाबंदी लगाने की सुविधाएं लागू करें
  • तीसरे पक्ष के डायलर और मैसेंजर ऐप्लिकेशन वेंडर, कॉल ब्लॉक करने की सुविधाओं के लिए BlockedNumberProvider का इस्तेमाल करते हैं

OEM के लिए सुझाव

अगर डिवाइस को पहले कभी कॉल/मैसेज पर पाबंदी लगाने की किसी अन्य सुविधा के साथ शिप नहीं किया गया था, तो ऐसे सभी डिवाइसों पर Android Open Source Project (AOSP) में नंबर ब्लॉक करने की सुविधा का इस्तेमाल करें. हमारा सुझाव है कि ब्लॉक करने के लिए, सही एंट्री पॉइंट उपलब्ध कराएं. जैसे, कॉल लॉग या मैसेज थ्रेड में जाकर किसी नंबर को ब्लॉक करना.

अगर डिवाइस पहले से ही कॉल/मैसेज पर पाबंदी लगाने की सुविधाओं के साथ शिप किया गया था, तो इन सुविधाओं को इस तरह से अडजस्ट करें कि BlockedNumberProvider, में, सटीक मैच वाले सभी फ़ोन नंबर ब्लॉक किए गए हों. साथ ही, सेवा देने वाली कंपनी के व्यवहार से, Android के साथ काम करने की जानकारी देने वाले दस्तावेज़ (सीडीडी) में बताई गई, इस सुविधा की ज़रूरी शर्तें पूरी होती हों.

कस्टम प्रोवाइडर और कस्टम यूज़र इंटरफ़ेस (यूआई)/ कंट्रोल की मदद से, कोई भी दूसरी बेहतर सुविधा लागू की जा सकती है. हालांकि, ऐसा तब ही किया जा सकता है, जब सटीक मैच वाले फ़ोन नंबर को ब्लॉक करने के लिए सीडीडी की ज़रूरी शर्तें पूरी की जा रही हों. हमारा सुझाव है कि इन अन्य सुविधाओं को “बेहतर” सुविधाओं के तौर पर लेबल करें, ताकि नंबर ब्लॉक करने की बुनियादी सुविधा से भ्रम की स्थिति न पैदा हो.

API

यहां इस्तेमाल किए जा रहे एपीआई दिए गए हैं:

  • TelecomManager API
    • Intent createManageBlockedNumbersIntent()
  • Carrier Config
    • KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
  • कृपया BlockedNumberContract
      देखें
    • BlockedNumberContract की ओर से उपलब्ध कराए गए एपीआई
    • boolean isBlocked(Context context, String phoneNumber)
    • int unblock(Context context, String phoneNumber)
    • boolean canCurrentUserBlockNumbers(Context context)

उपयोगकर्ता इंटरफ़ेस

AOSP में दिए गए BlockedNumbersActivity.java यूज़र इंटरफ़ेस का इस्तेमाल, वैसे ही किया जा सकता है जैसा है. डिवाइस लागू करने वाले लोग, यूज़र इंटरफ़ेस का अपना वर्शन भी लागू कर सकते हैं. हालांकि, इसके लिए ज़रूरी है कि वह सीडीडी से जुड़ी ज़रूरी शर्तों को पूरा करता हो.

कृपया ध्यान दें कि BlockedNumberProvider का इस्तेमाल करके, ब्लॉक की गई सूची को वापस लाने के लिए, पार्टनर के पास बैकअप लेने और डेटा वापस पाने की सुविधा वाला पीसी ऐप्लिकेशन होना चाहिए. AOSP में दिए गए, ब्लॉक किए गए नंबर के इंटरफ़ेस के लिए नीचे दी गई इमेज देखें.

नंबर ब्लॉक करने की सुविधा का यूज़र इंटरफ़ेस

दूसरी इमेज. फ़ोन नंबर ब्लॉक करने की सुविधा का यूज़र इंटरफ़ेस

पुष्टि करें

लागू करने वाले लोग, इन सीटीएस टेस्ट को चलाकर यह पक्का कर सकते हैं कि सुविधा का उनका वर्शन सही तरीके से काम कर रहा है:

android.provider.cts.BlockedNumberContractTest
com.android.cts.numberblocking.hostside.NumberBlockingTest
android.telecom.cts.ExtendedInCallServiceTest#testIncomingCallFromBlockedNumber_IsRejected
android.telephony.cts.SmsManagerTest#testSmsBlocking

$ adb root को चलाने के बाद, adb कमांड का इस्तेमाल करके BlockedNumberProvider में बदलाव किया जा सकता है. उदाहरण के लिए:

adb root
adb shell content query --uri content://com.android.blockednumber/blocked
adb shell content insert --uri / content://com.android.blockednumber/blocked --bind / original_number:s:'6501002000'
adb shell content delete --uri / content://com.android.blockednumber/blocked/1