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

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

متد 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 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 دریافت کنید.

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

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