الحصول على بيانات اللقطة

يوضّح هذا القسم كيفية استخدام Snapshot API للحصول على الحالة الحالية لكل نوع من أنواع السياقات المتوافقة. لمزيد من المعلومات، يُرجى الاطّلاع على مقالة البدء. للاطّلاع على تفاصيل الإشارات السياقية التي تم إيقافها نهائيًا، افتح الإشعار القابل للتوسيع التالي:

الحصول على النشاط الحالي

للحصول على النشاط الحالي للمستخدم، استدعِ الإجراء getDetectedActivity() الذي يعرض ActivityRecognitionResult يحتوي على معلومات حول أحدث أنشطة المستخدم.

يتطلّب الإجراء getDetectedActivity() الإذن com.google.android.gms.permission.ACTIVITY_RECOGNITION. أضِف هذا الإذن إلى AndroidManifest.xml.

للحصول على النشاط الحالي للمستخدم، اتّبِع الخطوات التالية:

  1. استدعِ getSnapshotClient() لإنشاء مثيل من SnapshotClient.
  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");
        }
    })

الحصول على أجهزة البث القريبة

للحصول على معلومات حول أجهزة البث القريبة beacons، استدعِ getBeaconState(). تتألف بيانات جهاز البث من محتوى أي مرفقات ونوعها ومساحة اسمها.

يتطلّب الإجراء getBeaconState() الإذن android.permission.ACCESS_FINE_LOCATION. أضِف هذا الإذن إلى AndroidManifest.xml. بالإضافة إلى ذلك، عليك تفعيل Nearby Messages API لمشروعك في Google Developers Console. لمزيد من المعلومات، يُرجى الاطّلاع على مقالتَي الاشتراك ومفاتيح واجهة برمجة التطبيقات والبدء.

للحصول على معلومات حول أجهزة البث القريبة، اتّبِع الخطوات التالية:

  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. استدعِ LocationResponse.getLocation() لعرض Location الحالية.

يوضّح المثال التالي كيفية الحصول على الموقع الجغرافي الحالي:

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