יישום חסימה של מספרי טלפון

מכיוון שהטלפוניה היא ערוץ תקשורת פתוח כל כך – כל אחד יכול להתקשר, או שלחו הודעת טקסט לכל מספר בכל זמן - משתמשי Android זקוקים ליכולת לחסום בקלות שיחות והודעות טקסט לא רצויות.

לפני Android 7.0, משתמשי Android היו צריכים להסתמך על אפליקציות שהורדו כדי להגביל את השיחות הודעות טקסט ממספרי טלפון מטרידים. הרבה מהאפליקציות האלה לא פועלות כמו הרצויות או מספקות חוויה לא אידיאלית, כי אין ממשקי API מתאימים לחסימת שיחות והודעות.

חלק מהיצרנים עשויים לשלוח פתרונות חסימה משלהם, אך אם משתמשים ישלימו מכשיר, הם עלולים לאבד לחלוטין את רשימת המכשירים החסומים בגלל חוסר ביכולת הפעולה ההדדית. לבסוף, גם אם המשתמשים משתמשים באפליקציות חיוג ללקוחות להעברת הודעות שמספקים פונקציונליות כזו, סביר להניח שהם עדיין יצטרכו צריך לבצע את פעולת החסימה בכל אפליקציה כדי שהחסימה תיושם בשני המקומות שיחות והודעות טקסט.

תכונות

גרסת Android 7.0 כוללת תוכן של BlockedNumberProvider ספק שמאחסן רשימה של מספרי טלפון שהמשתמש ציין ליצור איתם קשר באמצעות תקשורת טלפוניה (שיחות, SMS, MMS). המערכת תכבד את המספרים שברשימה החסומים על ידי הגבלת השיחות הודעות טקסט מהמספרים האלה. ב-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);

Put blocked number

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 עומדות בדרישות חסימת מספרי טלפון בהתאמה מחמירה. מומלץ שתכונות אחרות מתויגות כ'תכונות מתקדמות', כדי למנוע בלבול עם התכונות הבסיסיות לחסימת מספרים.

ממשקי 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)

ממשק משתמש

אפשר להשתמש בממשק המשתמש BlockNumbersActivity.java שסופק ב-AOSP בתור היא. מטמיעי מכשירים יכולים גם להטמיע גרסה משלהם של ממשק המשתמש, כל עוד עומד בדרישות של CDD שקשורות ל-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