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

בקטע הזה מוסבר איך להשתמש ב-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() כדי לקבל את הפעילות שזוהתה בסבירות הגבוהה ביותר, ולתעד את התוצאה במסוף:

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(). נתוני ביקון כוללים את התוכן, הסוג ומרחב השמות של כל הקבצים המצורפים.

כדי להשתמש ב-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 עם נתוני המיקום הנוכחיים.

כדי להשתמש ב-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();
        }
    })