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

يوضّح هذا القسم طريقة استخدام 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() للحصول على النشاط الأكثر احتمالاً.
    • يمكنك الاتصال بالرقم getProbableActivities() للحصول على قائمة بالأنشطة الحديثة التي تم ترتيبها حسب الاحتمالية.
    • الاتصال بالرقم getActivityConfidence() لعرض قيمة الثقة لنوع معيّن من الأنشطة.
    • يمكنك الاتصال بالرقم hasResult() لمعرفة ما إذا كان Intent يحتوي على 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. بالإضافة إلى ذلك، يجب تفعيل واجهة برمجة التطبيقات لميزة "الرسائل المجاورة" لمشروع Google Play 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 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();
        }
    })