از آنجایی که تلفن یک کانال ارتباطی باز است - هر کسی میتواند در هر زمانی با هر شمارهای تماس بگیرد یا پیامک بفرستد - کاربران اندروید به توانایی مسدود کردن آسان تماسها و پیامهای ناخواسته نیاز دارند.
قبل از اندروید 7.0، کاربران اندروید مجبور بودند برای محدود کردن تماس ها و پیامک های شماره تلفن های مزاحم، به برنامه های دانلود شده اعتماد کنند. بسیاری از این برنامهها یا آنطور که میخواهید کار نمیکنند یا تجربهای کمتر از ایدهآل را ارائه میکنند، زیرا API مناسبی برای مسدود کردن تماسها و پیامها وجود ندارد.
برخی از تولید کنندگان ممکن است راه حل های مسدود کننده خود را خارج از جعبه ارسال کنند، اما اگر کاربران دستگاه ها را تغییر دهند، ممکن است به دلیل عدم قابلیت همکاری، لیست مسدود شده را به طور کامل از دست بدهند. در نهایت، حتی اگر کاربران از برنامههای شمارهگیری و کلاینتهای پیامرسانی استفاده میکنند که چنین عملکردی را ارائه میکنند، احتمالاً همچنان باید عمل مسدود کردن را در هر برنامه انجام دهند تا بلوک هم برای تماس و هم برای ارسال پیامک اعمال شود.
ویژگی ها
نسخه Android 7.0 یک ارائهدهنده محتوای BlockedNumberProvider
را معرفی میکند که فهرستی از شمارههای تلفنی را که کاربر مشخص کرده است ذخیره میکند و نباید از طریق ارتباطات تلفنی (تماس، پیام کوتاه، MMS) با آنها تماس بگیرد. سیستم با محدود کردن تماس ها و پیامک ها از آن شماره ها، به شماره های موجود در لیست مسدود شده احترام می گذارد. 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 (AOSP) در همه این دستگاهها استفاده کنید. توصیه میشود از نقاط ورودی منطقی برای مسدود کردن پشتیبانی شود، مانند مسدود کردن یک شماره مستقیماً از گزارش تماس یا در یک رشته پیام.
اگر دستگاه قبلاً با ویژگیهای محدودیت تماس/پیام ارسال شده بود، ویژگیها را به گونهای تنظیم کنید که همه شمارههای تلفنی که با همخوانی دقیق مسدود شدهاند در BlockedNumberProvider,
ذخیره شوند و رفتار اطراف ارائهدهنده الزامات این ویژگی را که در سازگاری Android بیان شده است، برآورده کند. سند تعریف (CDD).
هر ویژگی پیشرفته دیگری را می توان از طریق ارائه دهندگان سفارشی و UI / کنترل های سفارشی پیاده سازی کرد، تا زمانی که الزامات CDD با توجه به مسدود کردن شماره تلفن های مطابقت دقیق برآورده شود. توصیه میشود که سایر ویژگیها بهعنوان ویژگیهای «پیشرفته» برچسبگذاری شوند تا از اشتباه گرفتن با ویژگی اصلی مسدود کردن شماره جلوگیری شود.
API ها
در اینجا API های در حال استفاده هستند:
-
TelecomManager API
-
Intent createManageBlockedNumbersIntent()
-
-
Carrier Config
-
KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT
-
- لطفاً به
BlockedNumberContract
مراجعه کنید- API های ارائه شده توسط
BlockedNumberContract
-
boolean isBlocked(Context context, String phoneNumber)
-
int unblock(Context context, String phoneNumber)
-
boolean canCurrentUserBlockNumbers(Context context)
- API های ارائه شده توسط
رابط کاربری
رابط کاربری BlockedNumbersActivity.java ارائه شده در AOSP را می توان همانطور که هست استفاده کرد. پیادهکنندههای دستگاه نیز ممکن است نسخه خود را از UI پیادهسازی کنند، تا زمانی که الزامات 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