تطبيق حظر رقم الهاتف

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

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

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

الميزات

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

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

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

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

تدفق بيانات حظر الأرقام

الشكل 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