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

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

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

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

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

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

  1. מבקשים מ-getSnapshotClient() ליצור מופע של SnapshotClient.
  2. משתמשים ב-addOnSuccessListener כדי ליצור OnSuccessListener שיכול להאזין ל-DetectedActivityResponse.
  3. כדאי להתקשר אל getStatus() כדי לוודא שהתוצאה תקינה.
  4. מתקשרים אל DetectedActivityResponse.getActivityRecognitionResult() כדי להחזיר 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");
        }
    })

קבלת נתוני משואות בסביבה

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

ה-method‏ 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 עם נתוני המיקום הנוכחיים.

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