پیاده‌سازی مسدود کردن شماره تلفن

ازآنجایی‌که تلفن یک کانال ارتباطی باز است - هرکسی می‌تواند در هر زمانی با هر شماره‌ای تماس بگیرد یا به آن پیامک ارسال کند - کاربران Android باید بتوانند به‌راحتی تماس‌ها و پیامک‌های ناخواسته را مسدود کنند.

قبل‌از Android 7.0، کاربران Android برای محدود کردن تماس‌ها و پیامک‌های شماره‌های تلفن مزاحم باید به برنامه‌های بارگیری‌شده متکی بودند. بسیاری از این برنامه‌ها یا آن‌طور که موردنظر است کار نمی‌کنند یا تجربه کمتر از ایده‌آلی ارائه می‌دهند زیرا هیچ میانای برنامه‌سازی کاربردی مناسبی برای مسدود کردن تماس‌ها و پیام‌ها وجود ندارد.

برخی‌از سازندگان ممکن است راه‌حل‌های مسدودسازی خودشان را به‌صورت پیش‌فرض در دستگاه‌هایشان ارائه دهند، اما اگر کاربران دستگاه‌هایشان را عوض کنند، ممکن است به‌دلیل عدم قابلیت همکاری، فهرست مسدودشده را به‌طور کامل ازدست بدهند. در نهایت، حتی اگر کاربران از برنامه‌های شماره‌گیری و کاربران پیام‌رسانی که چنین عملکردی را ارائه می‌دهند استفاده کنند، احتمالاً همچنان باید عمل مسدود کردن را در هر برنامه انجام دهند تا مسدود کردن برای هر دو تماس و پیامک اعمال شود.

ویژگی‌ها

نسخه Android 7.0 ارائه‌دهنده محتوای BlockedNumberProvider را معرفی می‌کند که فهرستی از شماره تلفن‌هایی را ذخیره می‌کند که کاربر مشخص کرده است نباید بتوانند ازطریق ارتباطات تلفنی (تماس، پیامک، پیام چندرسانه‌ای) با او تماس بگیرند. سیستم با محدود کردن تماس‌ها و پیامک‌های این شماره‌ها، به شماره‌های موجود در فهرست مسدودشده احترام می‌گذارد. ‫Android 7.0 فهرست شماره‌های مسدودشده را نمایش می‌دهد و به کاربر اجازه می‌دهد شماره اضافه یا حذف کند.

علاوه‌براین، ویژگی مسدود کردن شماره به سیستم و برنامه‌های مربوطه در پلتفرم امکان می‌دهد با یکدیگر همکاری کنند تا به محافظت از کاربر کمک کنند و تجربه را ساده‌تر کنند. شماره‌گیر پیش‌فرض، کارخواه پیام‌رسانی پیش‌فرض، برنامه دارای امتیاز UICC، و برنامه‌هایی که امضای یکسانی با سیستم دارند می‌توانند مستقیماً از فهرست مسدودشده بخوانند و در آن بنویسند. چون شماره‌های مسدودشده در سیستم ذخیره می‌شوند، مهم نیست کاربر از چه برنامه شماره‌گیری یا پیام‌رسانی استفاده می‌کند، شماره‌ها مسدود می‌مانند. درنهایت، فهرست شماره‌های مسدودشده ممکن است در هر دستگاه جدیدی، صرف‌نظر از سازنده آن، بازیابی شود.

  • کاربر مطمئن خواهد بود که ویژگی مسدود کردن دارد که از همان ابتدا کار می‌کند و وقتی برنامه‌ها را عوض می‌کند یا تلفن جدیدی می‌گیرد فهرست مسدودشده خود را ازدست نخواهد داد. همه برنامه‌های مربوط در سیستم می‌توانند فهرست یکسانی را هم‌رسانی کنند تا ساده‌ترین تجربه را به کاربر ارائه دهند.
  • توسعه‌دهندگان برنامه نیازی ندارند روش خودشان را برای مدیریت فهرست مسدودشده و تماس‌ها و پیام‌هایی که دریافت می‌شود توسعه دهند. آن‌ها می‌توانند به‌راحتی از ویژگی ارائه‌شده توسط پلاتفرم استفاده کنند.
  • برنامه‌های شماره‌گیر / پیام‌رسان که توسط کاربر به‌عنوان پیش‌فرض انتخاب شده‌اند می‌توانند از ارائه‌دهنده بخوانند و در آن بنویسند. برنامه‌های دیگر می‌توانند بااستفاده از createManageBlockedNumbersIntent() واسط کاربر مدیریت فهرست مسدودشده را راه‌اندازی کنند
  • تولیدکنندگان تجهیزات اصلی می‌توانند از ویژگی ارائه‌شده توسط پلاتفرم برای ارائه ویژگی مسدودسازی به‌صورت پیش‌فرض استفاده کنند. تولیدکنندگان تجهیزات اصلی می‌توانند مطمئن باشند که وقتی کاربران از دستگاه تولیدکننده تجهیزات اصلی دیگری استفاده می‌کنند، تجربه آماده‌سازی بهتری خواهند داشت زیرا فهرست مسدودشده نیز منتقل خواهد شد.
  • اگر شرکت مخابراتی برنامه شماره‌گیر یا پیام‌رسان خودش را داشته باشد، می‌تواند از ویژگی پلاتفرم برای اجازه دادن به کاربر برای حفظ فهرست مسدودشده‌ها استفاده کند. آن‌ها می‌توانند مطمئن باشند که فهرست مسدودشده کاربر حتی زمانی که دستگاه جدیدی دریافت می‌کند، نزد کاربران باقی می‌ماند. درنهایت، همه برنامه‌های دارای امتیاز شرکت مخابراتی می‌توانند فهرست مسدودشده را بخوانند، بنابراین اگر شرکت مخابراتی بخواهد براساس فهرست مسدودشده، مسدودسازی قدرتمندتری برای کاربر ارائه دهد، اکنون با این ویژگی امکان‌پذیر است.

جریان داده‌ها

جریان داده‌های شماره‌های مسدودشده

شکل ۱. مسدود کردن جریان داده شماره‌های تلفن

مثال‌ها و منبع

در اینجا چند نمونه تماس بااستفاده از ویژگی جدید مسدود کردن شماره آورده شده است:

راه‌اندازی مدیر شماره مسدودشده از برنامه

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

پیاده‌سازی

این‌ها تکالیف سطح بالایی هستند که باید تکمیل شوند تا از ویژگی مسدود کردن شماره استفاده شود:

  • تولیدکنندگان تجهیزات اصلی ویژگی‌های محدودیت تماس/پیام را در دستگاه‌هایشان بااستفاده از BlockedNumberProvider پیاده‌سازی می‌کنند
  • اگر شرکت مخابراتی برنامه شماره‌گیر یا پیام‌رسان دارد، ویژگی‌های محدودیت تماس/پیام را بااستفاده از BlockedNumberProvider پیاده‌سازی کنید
  • فروشندگان برنامه شماره‌گیر و پیام‌رسان طرف سوم از BlockedNumberProvider برای ویژگی‌های مسدودسازی استفاده می‌کنند

توصیه‌هایی برای تولیدکنندگان تجهیزات اصلی

اگر دستگاه قبلاً هرگز با هیچ ویژگی محدودیت تماس/پیام اضافی عرضه نشده است، از ویژگی مسدود کردن شماره در «پروژه منبع باز Android»‏ (AOSP) در همه این دستگاه‌ها استفاده کنید. توصیه می‌شود که نقاط ورودی منطقی برای مسدود کردن پشتیبانی شود، مانند مسدود کردن شماره مستقیماً از گزارش تماس یا در رشته پیام.

اگر دستگاه قبلاً با ویژگی‌های محدودیت تماس/پیام عرضه شده است، ویژگی‌ها را به‌گونه‌ای تطبیق دهید که همه شماره‌های تلفن تطابق دقیق مسدودشده در BlockedNumberProvider, ذخیره شوند و عملکرد ارائه‌دهنده با الزامات این ویژگی که در «سند تعریف سازگاری Android» (CDD) ذکر شده است مطابقت داشته باشد.

هر ویژگی پیشرفته دیگری را می‌توان ازطریق ارائه‌دهندگان سفارشی و رابط کاربری سفارشی / کنترل‌ها پیاده‌سازی کرد، به‌شرطی که الزامات CDD درخصوص مسدود کردن شماره‌های تلفن منطبق دقیق برآورده شود. توصیه می‌شود که این ویژگی‌های دیگر به‌عنوان ویژگی‌های «پیشرفته» برچسب‌گذاری شوند تا با ویژگی اصلی مسدود کردن شماره اشتباه گرفته نشوند.

میاناهای برنامه‌سازی کاربردی

در اینجا میاناهای برنامه‌سازی کاربردی درحال استفاده آمده است:

  • 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)

رابط کاربری

میانای کاربر BlockedNumbersActivity.java ارائه‌شده در AOSP را می‌توان به‌همان صورت استفاده کرد. پیاده‌سازان دستگاه همچنین می‌توانند نسخه خودشان را از میانای کاربر پیاده‌سازی کنند، به‌شرطی که الزامات CDD مربوطه را برآورده کند.

لطفاً توجه داشته باشید که ممکن است برای اجرای بازیابی فهرست مسدودشده‌ها بااستفاده از BlockedNumberProvider، به برنامه رایانه شریک برای پشتیبان‌گیری و بازیابی نیاز باشد. برای دیدن میانای شماره‌های مسدودشده که در AOSP ارائه شده است، تصاویر زیر را ببینید.

میانای کاربر مسدود کردن شماره‌ها

شکل ۲. واسط کاربر مسدود کردن شماره تلفن

اعتبارسنجی

پیاده‌سازان می‌توانند با اجرای آزمایش‌های CTS زیر مطمئن شوند که نسخه ویژگی آن‌ها طبق انتظار کار می‌کند:

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

BlockedNumberProvider را می‌توان بااستفاده از فرمان‌های adb پس‌از اجرای $ adb root دستکاری کرد. برای مثال:

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