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

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

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

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

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

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

  1. getSnapshotClient() را فراخوانی کنید تا نمونه‌ای از SnapshotClient ایجاد شود.
  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 اضافه کنید. علاوه‌براین، باید 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. برای برگرداندن Location فعلی، با LocationResponse.getLocation() تماس بگیرید.

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

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