تنفيذ حظر أرقام الهواتف

نظرًا لأن الاتصالات الهاتفية هي قناة اتصالات مفتوحة - حيث يمكن لأي شخص الاتصال أو إرسال رسالة نصية إلى أي رقم في أي وقت - يحتاج مستخدمو Android إلى القدرة على حظر المكالمات والرسائل النصية غير المرغوب فيها بسهولة.

قبل N، كان مستخدمو Android يعتمدون على التطبيقات التي تم تنزيلها لتقييد المكالمات والرسائل النصية من أرقام الهواتف المزعجة. العديد من هذه التطبيقات إما لا تعمل حسب الرغبة أو توفر تجربة أقل من مثالية بسبب عدم وجود واجهات برمجة تطبيقات مناسبة لحظر المكالمات والرسائل.

قد تقوم بعض الشركات المصنعة بشحن حلول الحظر الخاصة بها خارج الصندوق، ولكن إذا قام المستخدمون بتبديل الأجهزة، فقد يفقدون القائمة المحظورة تمامًا بسبب عدم إمكانية التشغيل البيني. أخيرًا، حتى إذا كان المستخدمون يستخدمون تطبيقات الاتصال وعملاء المراسلة التي توفر مثل هذه الوظائف، فمن المحتمل أنه لا يزال يتعين عليهم تنفيذ إجراء الحظر في كل تطبيق حتى يسري الحظر على كل من الاتصال والرسائل النصية.

سمات

يقدم إصدار Android 7.0 موفر محتوى BlockedNumberProvider الذي يقوم بتخزين قائمة بأرقام الهواتف التي حددها المستخدم والتي يجب ألا يتمكن المستخدم من الاتصال بها عبر الاتصالات الهاتفية (المكالمات، الرسائل القصيرة، رسائل الوسائط المتعددة). سيحترم النظام الأرقام الموجودة في القائمة المحظورة عن طريق تقييد المكالمات والرسائل النصية من تلك الأرقام. يعرض Android 7.0 قائمة الأرقام المحظورة ويسمح للمستخدم بإضافة الأرقام وإزالتها.

علاوة على ذلك، تتيح ميزة حظر الأرقام للنظام والتطبيقات ذات الصلة على النظام الأساسي العمل معًا للمساعدة في حماية المستخدم وتبسيط التجربة. يمكن لبرنامج الاتصال الافتراضي وعميل المراسلة الافتراضي والتطبيق المميز لـ UICC والتطبيقات التي لها نفس التوقيع الذي يمكن للنظام القراءة منه والكتابة إلى القائمة المحظورة مباشرةً. نظرًا لأنه يتم تخزين الأرقام المحظورة على النظام، بغض النظر عن تطبيقات الاتصال أو المراسلة التي يستخدمها المستخدم، تظل الأرقام محظورة. وأخيرًا، يمكن استعادة قائمة الأرقام المحظورة على أي جهاز جديد، بغض النظر عن الشركة المصنعة.

  • سيتم ضمان حصول المستخدم على ميزة الحظر التي تعمل خارج الصندوق ولن يفقد قائمة الحظر الخاصة به عند تبديل التطبيقات أو الحصول على هاتف جديد. يمكن لجميع التطبيقات ذات الصلة على النظام مشاركة نفس القائمة لتزويد المستخدم بتجربة أكثر انسيابية.
  • لا يحتاج مطورو التطبيقات إلى تطوير طريقتهم الخاصة لإدارة قائمة الحظر والمكالمات والرسائل الواردة. يمكنهم ببساطة استخدام الميزة التي توفرها المنصة.
  • يمكن لتطبيقات Dialer / messenger التي تم تحديدها كتطبيق افتراضي من قبل المستخدم القراءة والكتابة إلى الموفر. يمكن للتطبيقات الأخرى تشغيل واجهة مستخدم إدارة قائمة الحظر باستخدام createManageBlockedNumbersIntent()
  • يمكن لمصنعي المعدات الأصلية استخدام الميزة المتوفرة في النظام الأساسي لشحن ميزة الحظر خارج الصندوق. يمكن لمصنعي المعدات الأصلية أن يطمئنوا إلى أنه عندما يقوم المستخدمون بالتبديل من جهاز آخر تابع لشركة OEM، فإنهم يتمتعون بتجربة تأهيل أفضل لأنه سيتم نقل قائمة الحظر أيضًا.
  • إذا كان لدى شركة الاتصالات تطبيق اتصال أو مراسلة خاص بها، فيمكنها إعادة استخدام ميزة النظام الأساسي للسماح للمستخدم بالاحتفاظ بقائمة الحظر. ويمكنهم الاطمئنان إلى أن قائمة الحظر الخاصة بالمستخدم يمكن أن تظل مع المستخدمين، حتى عندما يحصلون على جهاز جديد. أخيرًا، يمكن لجميع التطبيقات التي تتمتع بامتيازات شركة الاتصالات قراءة قائمة الحظر، لذلك إذا أرادت شركة الاتصالات توفير بعض عمليات الحظر الإضافية الأكثر قوة للمستخدم استنادًا إلى قائمة الحظر، فقد أصبح ذلك ممكنًا الآن باستخدام هذه الميزة.

تدفق البيانات

كتلة تدفق البيانات الأرقام

الشكل 1. منع تدفق بيانات أرقام الهواتف

الأمثلة والمصادر

فيما يلي أمثلة على المكالمات التي تستخدم ميزة حظر الأرقام الجديدة:

قم بتشغيل مدير الأرقام المحظورة من التطبيق

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.

واجهة مستخدم حظر الأرقام

الشكل 2. واجهة مستخدم حظر أرقام الهواتف

تصديق

يمكن للمنفذين التأكد من أن إصدار الميزة الخاص بهم يعمل على النحو المنشود عن طريق تشغيل اختبارات 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