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

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

קבלת הפעילות הנוכחית

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

לשיטה getDetectedActivity() נדרשת ההרשאה com.google.android.gms.permission.ACTIVITY_RECOGNITION. צריך להוסיף את ההרשאה הזו אל AndroidManifest.xml.

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

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

בדוגמת הקוד הבאה נעשה שימוש ב-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.

בדוגמה הבאה אפשר לראות איך מקבלים מידע על משואות:

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();
        }
    })