קבלת נתוני תמונת מצב

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

אחזור הפעילות הנוכחית

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

לשיטה getDetectedActivity() נדרשת ההרשאה com.google.android.gms.permission.ACTIVITY_RECOGNITION. מוסיפים את ההרשאה הזו ל-AndroidManifest.xml.

כדי לקבל את הפעילות הנוכחית של המשתמש:

  1. קוראים ל-getSnapshotClient() כדי ליצור מופע של SnapshotClient.
  2. משתמשים ב-addOnSuccessListener כדי ליצור OnSuccessListener שיכול להאזין ל-DetectedActivityResponse.
  3. כדאי להתקשר אל getStatus() כדי לוודא שהתוצאה תקינה.
  4. קוראים ל-DetectedActivityResponse.getActivityRecognitionResult() כדי להחזיר ActivityRecognitionResult. אפשר להשתמש בו כדי לקבל היבטים רבים של הפעילות הנוכחית של המשתמש. לדוגמה:

    • כדי לקבל רק את הפעילות בעלת הסבירות הגבוהה ביותר, צריך לבצע קריאה ל-getMostProbableActivity().
    • כדי לקבל רשימה של פעילויות מהזמן האחרון שמדורגות לפי הסבירות, קוראים לפונקציה getProbableActivities().
    • קוראים לפונקציה getActivityConfidence() כדי להחזיר את ערך הוודאות לסוג פעילות נתון.
    • קוראים ל-hasResult() כדי לבדוק אם Intent מכיל ActivityRecognitionResult.

בדוגמת הקוד הבאה נעשה שימוש ב-getMostProbableActivity() כדי לקבל את הפעילות שהכי סביר שזוהתה, ולתעד את התוצאה במסוף:

Awareness.getSnapshotClient(this).getDetectedActivity()
    .addOnSuccessListener(new OnSuccessListener<DetectedActivityResponse>() {
        @Override
        public void onSuccess(DetectedActivityResponse dar) {
            ActivityRecognitionResult arr = dar.getActivityRecognitionResult();
            DetectedActivity probableActivity = arr.getMostProbableActivity();

            int confidence = probableActivity.getConfidence();
            String activityStr = probableActivity.toString();
            mLogFragment.getLogView().println("Activity: " + activityStr
                + ", Confidence: " + confidence + "/100");
        }
    })

אחזור של סמנים בקרבת מקום

כדי לקבל מידע על חיישנים בסביבה, מקישים על getBeaconState(). נתוני ה-Beacon מורכבים מהתוכן, מהסוג וממרחב השמות של כל הקבצים המצורפים.

לשיטה getBeaconState() נדרשת ההרשאה android.permission.ACCESS_FINE_LOCATION. מוסיפים את ההרשאה הזו ל-AndroidManifest.xml. בנוסף, צריך להפעיל את Nearby Messages API בפרויקט ב-Google Developers Console. מידע נוסף זמין במאמרים הרשמה ומפתחות API ותחילת העבודה.

כדי לקבל מידע על סמנים בקרבת מקום:

  1. בודקים אם המשתמש העניק את ההרשאות הנדרשות. בדוגמה הבאה בודקים אם ההרשאה android.permission.ACCESS_FINE_LOCATION הוענקה. אם לא, המשתמש יתבקש להביע הסכמה.

    if (ContextCompat.checkSelfPermission(
                MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_LOCATION
            );
            return;
        }
    
  2. מגדירים BeaconState.TypeFilter. הפונקציה מחזירה רק סמנים עם קבצים מצורפים שרשומים במרחב השמות ובסוג שצוינו. אפשר גם לסנן לפי התאמה בייט-בייט של תוכן הקובץ המצורף. בדוגמה הבאה מוסבר איך יוצרים מסנן לפי סוג:

    private static final List<BeaconState.TypeFilter> BEACON_TYPE_FILTERS = Arrays.asList(
            BeaconState.TypeFilter.with(
                "my.beacon.namespace",
                "my-attachment-type"),
            BeaconState.TypeFilter.with(
                "my.other.namespace",
                "my-attachment-type"));
    
  3. קוראים לפונקציה getSnapshotClient.getBeaconState().

  4. משתמשים ב-addOnSuccessListener כדי ליצור OnSuccessListener שיכול להאזין ל-BeaconStateResponse.

  5. כדאי להתקשר אל getStatus() כדי לוודא שהתוצאה תקינה.

  6. קוראים ל-BeaconStateResponse.getBeaconState() כדי להחזיר את מצב האות.

  7. התקשרו למספר BeaconState.getBeaconInfo() כדי לקבל BeaconState.BeaconInfo.

הדוגמה הבאה מראה איך לקבל את פרטי ה-beacon:

Awareness.getSnapshotClient(this).getBeaconState(BEACON_TYPE_FILTERS)
    .addOnSuccessListener(new OnSuccessListener<BeaconStateResponse>() {
        @Override
        public void onSuccess(BeaconStateResponse beaconStateResponse) {
            BeaconStateResult beaconStateResult = beaconStateResponse.getBeaconState();
            BeaconState.BeaconInfo beaconInfo = beaconStateResponse.getBeaconInfo();
        }
    })

אחזור המצב של האוזניות

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

כדי לקבל את המצב הנוכחי של האוזניות:

  1. קוראים לפונקציה getSnapshotClient.getHeadphoneState().
  2. משתמשים ב-addOnSuccessListener כדי ליצור OnSuccessListener שיכול להאזין ל-HeadphoneStateResponse.
  3. כדאי להתקשר אל getStatus() כדי לוודא שהתוצאה תקינה.
  4. אם הפעולה מסתיימת ללא שגיאות, צריך לבצע קריאה ל-HeadphoneStateResponse.getHeadphoneState() כדי להחזיר את מצב האוזניות. הערך הזה הוא PLUGGED_IN או UNPLUGGED.

בדוגמת הקוד הבאה מוסבר איך משתמשים ב-getHeadphoneState():

Awareness.getSnapshotClient(this).getHeadphoneState()
    .addOnSuccessListener(new OnSuccessListener<HeadphoneStateResponse>() {
        @Override
        public void onSuccess(HeadphoneStateResponse headphoneStateResponse) {
            HeadphoneState headphoneState = headphoneStateResponse.getHeadphoneState();
            boolean pluggedIn = headphoneState.getState() == HeadphoneState.PLUGGED_IN;
            String stateStr =
                "Headphones are " + (pluggedIn ? "plugged in" : "unplugged");
            mLogFragment.getLogView().println(stateStr);
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.e(TAG, "Could not get headphone state: " + e);
        }
    });

אחזור של מיקום

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

לשיטה getLocation() נדרשת ההרשאה android.permission.ACCESS_FINE_LOCATION. מוסיפים את ההרשאה הזו ל-AndroidManifest.xml.

כדי לקבל את המיקום הנוכחי, מבצעים את השלבים הבאים:

  1. בודקים אם המשתמש העניק את ההרשאות הנדרשות. בדוגמה הבאה בודקים אם ההרשאה android.permission.ACCESS_FINE_LOCATION הוענקה. אם לא, המשתמש יתבקש להביע הסכמה.

    
    if (ContextCompat.checkSelfPermission(
                MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) !=
                PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                    MY_PERMISSION_LOCATION
            );
            return;
        }
    
  2. קוראים לפונקציה getSnapshotClient.getLocation().

  3. משתמשים ב-addOnSuccessListener כדי ליצור OnSuccessListener שיכול להאזין ל-LocationResponse.

  4. כדאי להתקשר אל getStatus() כדי לוודא שהתוצאה תקינה.

  5. מתקשרים למספר LocationResponse.getLocation() כדי לחזור לLocation הנוכחי.

הדוגמה הבאה מראה איך לקבל את המיקום הנוכחי:

Awareness.getSnapshotClient(this).getLocation()
    .addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
        @Override
        public void onSuccess(LocationResponse locationResponse) {
            Location loc = locationResponse.getLocationResult();
        }
    })