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

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

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

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

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

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

  1. כדי ליצור מכונה של SnapshotClient, צריך להפעיל את הפונקציה getSnapshotClient().
  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");
        }
    })

קבלת איתותי Bluetooth בקרבת מקום

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

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

כדי לקבל מידע על איתות Bluetooth בקרבת מקום, יש לפעול לפי השלבים הבאים:

  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. הפונקציה הזו מחזירה רק איתותי Bluetooth עם קבצים מצורפים שרשומים במרחב השמות ובסוג שצוינו. תוכלו גם לסנן על סמך התאמה של בייט לבייט בתוכן של הקובץ המצורף. הדוגמה הבאה ממחישה איך ליצור מסנן מסוג:

    private static final List 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() כדי להחזיר את המצב של איתות Bluetooth.

  7. התקשרו BeaconState.getBeaconInfo() ומקבלים BeaconState.BeaconInfo.

הדוגמה הבאה מראה איך לקבל מידע על איתות Bluetooth:

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