קבלת הודעות ב-Beacon

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

הרשמה להודעות לגבי משׂואת רשת (beacon) BLE

יש שתי דרכים שבהן האפליקציה שלך יכולה להירשם להודעות משׂואת רשת (beacon) BLE:

  • בחזית, בתגובה לפעולת משתמש או אירוע.
  • ברקע, כשהאפליקציה נמצאת אינן פועלות.

הרשמה בחזית

כשהאפליקציה שלך נרשמת להודעות משׂואות רשת (beacon) בחזית, הסריקות מתבצעות ברציפות עד לביטול ההרשמה לאפליקציה. הפעלת חזית בלבד מינוי כשהאפליקציה פעילה, בדרך כלל בתגובה לפעולת משתמש.

האפליקציה יכולה להפעיל מינוי שפועל בחזית באמצעות התקשרות Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions) והגדרת האפשרות Strategy ל-BLE_ONLY.

קטע הקוד הבא מראה איך להתחיל מינוי שפועל בחזית Nearby.getMessagesClient(Activity).subscribe(MessageListener, SubscribeOptions):

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    mMessageListener = new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.d(TAG, "Found message: " + new String(message.getContent()));
        }

        @Override
        public void onLost(Message message) {
            Log.d(TAG, "Lost sight of message: " + new String(message.getContent()));
        }
    }
}

// Subscribe to receive messages.
private void subscribe() {
    Log.i(TAG, "Subscribing.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(mMessageListener, options);
}

כאשר אין יותר צורך במינוי, האפליקציה צריכה לבטל את ההרשמה על ידי התקשרות Nearby.getMessagesClient(Activity).unsubscribe(MessageListener)

הרשמה ברקע

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

האפליקציה שלך יכולה להפעיל מינוי ברקע באמצעות שיחה Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions) והגדרת האפשרות Strategy ל-BLE_ONLY.

קטע הקוד הבא מראה איך להפעיל מינוי ברקע באמצעות שיחות Nearby.getMessagesClient(Activity).subscribe(PendingIntent, SubscribeOptions)

// Subscribe to messages in the background.
private void backgroundSubscribe() {
    Log.i(TAG, "Subscribing for background updates.");
    SubscribeOptions options = new SubscribeOptions.Builder()
            .setStrategy(Strategy.BLE_ONLY)
            .build();
    Nearby.getMessagesClient(this).subscribe(getPendingIntent(), options);
}

private PendingIntent getPendingIntent() {
    return PendingIntent.getBroadcast(this, 0, new Intent(this, BeaconMessageReceiver.class),
            PendingIntent.FLAG_UPDATE_CURRENT);
}

קטע הקוד הבא מדגים טיפול בכוונה כיתה אחת (BeaconMessageReceiver).

@Override
public void onReceive(Context context, Intent intent) {
    Nearby.getMessagesClient(context).handleIntent(intent, new MessageListener() {
        @Override
        public void onFound(Message message) {
            Log.i(TAG, "Found message via PendingIntent: " + message);
        }

        @Override
        public void onLost(Message message) {
            Log.i(TAG, "Lost message via PendingIntent: " + message);
        }
    });
}

כאשר אין יותר צורך במינוי, האפליקציה צריכה לבטל את ההרשמה על ידי התקשרות Nearby.getMessagesClient(Activity).unsubscribe(PendingIntent)

ניתוח הודעות של משׂואת רשת (beacon)

קבצים מצורפים באמצעות משׂואת רשת (beacon) הם blobs של נתונים שרירותיים שאפשר להוסיף ל-beacons. כל קובץ מצורף מורכב מהחלקים הבאים:

  • מרחב שמות: מזהה של מרחב שמות.
  • טיפוס: סוג הנתונים.
  • נתונים: ערך הנתונים של הקובץ המצורף.

קטע הקוד הבא מדגים שימוש ב-Message listener לניתוח הודעות שהתקבלו ממשדר BLE:

mMessageListener = new MessageListener() {
    @Override
    public void onFound(Message message) {
        // Do something with the message here.
        Log.i(TAG, "Message found: " + message);
        Log.i(TAG, "Message string: " + new String(message.getContent()));
        Log.i(TAG, "Message namespaced type: " + message.getNamespace() +
                "/" + message.getType());
    }

    ...
};

ניתוח התוכן תלוי בפורמט של הבייטים. הדוגמה הזו מבוססת על ההנחה שהבייטים של התוכן מקודדים מחרוזת UTF-8, אבל הודעת החיישן לקודד פורמטים אחרים של בייטים (לדוגמה, מאגר פרוטוקול עם סריאליזציה). מידע נוסף זמין במאמר הוספת קבצים מצורפים למשׂואות רשת (beacon).

כדי לברר אילו מרחבי שמות משויכים לפרויקט, אפשר לקרוא namespaces.list.

הערות:

  • כדי להאריך את חיי הסוללה, כדאי להתקשר אל Nearby.getMessagesClient(Activity).unsubscribe() בפונקציה onStop() בפעילות שלך. הערה: האפשרות הזאת רלוונטית רק כאשר בהרשמה בחזית.
  • כדי לקצר את זמן האחזור, מומלץ להשתמש באפשרות Strategy.BLE_ONLY כשאתם מתקשרים אל Nearby.getMessagesClient(Activity).subscribe(). כשההגדרה הזו מוגדרת, Nearby Messages API לא יפעיל את הגרסה הקלאסית של Bluetooth סריקות. זה משפר את זמן האחזור לזיהוי איתות מכיוון שהמערכת לא עובר בין כל סוגי הסריקה האפשריים.
  • כדי לצרף מטען ייעודי (payload) של הודעה לחיישן, צריך להשתמש Proximity Beacon API.