دریافت داده‌های عکس آنی

این بخش نحوه استفاده از Snapshot API را برای دریافت وضعیت فعلی هریک از انواع بافت پشتیبانی‌شده نشان می‌دهد. برای اطلاعات بیشتر، به شروع به کار مراجعه کنید. برای جزئیات مربوط به نشان‌های زمینه‌ای منسوخ‌شده، اعلان ازهم بازشدنی زیر را باز کنید:

دریافت فعالیت کنونی

برای دریافت فعالیت کنونی کاربر، getDetectedActivity() را فراخوانی کنید که ActivityRecognitionResult حاوی اطلاعات مربوط به جدیدترین فعالیت‌های کاربر را برمی‌گرداند.

روش getDetectedActivity() به اجازه com.google.android.gms.permission.ACTIVITY_RECOGNITION نیاز دارد. این اجازه را به AndroidManifest.xml اضافه کنید.

برای دریافت فعالیت فعلی کاربر، مراحل زیر را انجام دهید:

  1. برای ایجاد نمونه‌ای از SnapshotClient، با getSnapshotClient() تماس بگیرید.
  2. از addOnSuccessListener برای ایجاد OnSuccessListener استفاده کنید که می‌تواند به DetectedActivityResponse گوش دهد.
  3. برای اطمینان از معتبر بودن نتیجه، با getStatus() تماس بگیرید.
  4. برای برگرداندن ActivityRecognitionResult، با DetectedActivityResponse.getActivityRecognitionResult() تماس بگیرید. می‌توانید از این برای دریافت جنبه‌های زیادی از فعالیت فعلی کاربر استفاده کنید. برای مثال:

    • برای دریافت فقط محتمل‌ترین فعالیت، با getMostProbableActivity() تماس بگیرید.
    • برای دریافت فهرستی از فعالیت‌های اخیر رتبه‌بندی‌شده براساس احتمال، با getProbableActivities() تماس بگیرید.
    • برای برگرداندن مقدار اطمینان برای نوع فعالیت معین، getActivityConfidence() را فراخوانی کنید.
    • برای تشخیص اینکه آیا Intent حاوی ActivityRecognitionResult است یا نه، با hasResult() تماس بگیرید.

مثال کد زیر از 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() تماس بگیرید. داده‌های چراغ راهنما شامل محتوا، نوع، و فضای نام پیوست‌ها می‌شود.

روش getBeaconState() به اجازه android.permission.ACCESS_FINE_LOCATION نیاز دارد. این اجازه را به AndroidManifest.xml اضافه کنید. علاوه‌براین، باید «میانای برنامه‌سازی کاربردی پیام‌های اطراف» را برای پروژه «کنسول توسعه‌دهندگان Google» خود فعال کنید. برای اطلاعات بیشتر، ثبت‌نام و کلیدهای 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.BeaconInfo، با BeaconState.getBeaconInfo() تماس بگیرید.

مثال زیر نحوه دریافت اطلاعات فانوس را نشان می‌دهد:

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. برای برگرداندن Location فعلی، با LocationResponse.getLocation() تماس بگیرید.

مثال زیر نحوه دریافت مکان فعلی را نشان می‌دهد:

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