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

يوضّح هذا القسم كيفية استخدام 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");
        }
    })

الحصول على إشارات البلوتوث القريبة

للحصول على معلومات عن أجهزة الإرشاد القريبة، يمكنك الاتصال بالرقم 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();
        }
    })