دریافت داده های عکس فوری

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

دریافت فعالیت فعلی

برای دریافت فعالیت فعلی کاربر، تابع 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");
        }
    })

دریافت چراغ‌های راهنمای نزدیک

برای دریافت اطلاعات در مورد beacon های نزدیک، getBeaconState() را فراخوانی کنید. داده‌های Beacon شامل محتوا، نوع و فضای نام هر پیوستی است.

متد getBeaconState() به مجوز android.permission.ACCESS_FINE_LOCATION نیاز دارد. این مجوز را به AndroidManifest.xml اضافه کنید. علاوه بر این، باید API پیام‌های نزدیک را برای پروژه کنسول توسعه‌دهندگان گوگل خود فعال کنید. برای اطلاعات بیشتر، به کلیدهای ثبت نام و 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 تعریف کنید. این فقط beaconهایی را برمی‌گرداند که پیوست‌هایی دارند که با فضای نام و نوع مشخص شده ثبت شده‌اند. همچنین می‌توانید بر اساس تطابق بایت به بایت روی محتوای پیوست، فیلتر کنید. مثال زیر نحوه ایجاد یک فیلتر نوع را نشان می‌دهد:

    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. برای برگرداندن وضعیت beacon، تابع BeaconStateResponse.getBeaconState() را فراخوانی کنید.

  7. برای دریافت BeaconState.getBeaconInfo() BeaconState.BeaconInfo را فراخوانی کنید.

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

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