این بخش نحوه استفاده از Snapshot API را برای دریافت وضعیت فعلی برای هر یک از انواع context های پشتیبانی شده نشان میدهد. برای اطلاعات بیشتر، به بخش شروع به کار مراجعه کنید. برای جزئیات بیشتر در مورد سیگنالهای context های منسوخ شده، اطلاعیه قابل بسط زیر را باز کنید:
دریافت فعالیت فعلی
برای دریافت فعالیت فعلی کاربر، تابع getDetectedActivity() را فراخوانی کنید، که یک ActivityRecognitionResult را برمیگرداند که حاوی اطلاعاتی در مورد آخرین فعالیتهای کاربر است.
متد getDetectedActivity() به مجوز com.google.android.gms.permission.ACTIVITY_RECOGNITION نیاز دارد. این مجوز را به AndroidManifest.xml اضافه کنید.
برای دریافت فعالیت فعلی کاربر، مراحل زیر را انجام دهید:
- برای ایجاد یک نمونه از
SnapshotClientتابعgetSnapshotClient()را فراخوانی کنید. - از
addOnSuccessListenerبرای ایجاد یکOnSuccessListenerکه بتواند بهDetectedActivityResponseگوش دهد، استفاده کنید. - برای اطمینان از معتبر بودن نتیجه، تابع
getStatus()را فراخوانی کنید. برای بازگرداندن
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");
}
})
دریافت چراغهای راهنمای نزدیک
برای دریافت اطلاعات در مورد beacon های نزدیک، getBeaconState() را فراخوانی کنید. دادههای Beacon شامل محتوا، نوع و فضای نام هر پیوستی است.
متد getBeaconState() به مجوز android.permission.ACCESS_FINE_LOCATION نیاز دارد. این مجوز را به AndroidManifest.xml اضافه کنید. علاوه بر این، باید API پیامهای نزدیک را برای پروژه کنسول توسعهدهندگان گوگل خود فعال کنید. برای اطلاعات بیشتر، به کلیدهای ثبت نام و API و شروع به کار مراجعه کنید .
برای دریافت اطلاعات مربوط به چراغهای راهنمای اطراف، مراحل زیر را انجام دهید:
بررسی کنید که آیا کاربر مجوزهای لازم را اعطا کرده است یا خیر. مثال زیر بررسی میکند که آیا مجوز
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; }یک
BeaconState.TypeFilterتعریف کنید. این فقط beaconهایی را برمیگرداند که پیوستهایی دارند که با فضای نام و نوع مشخص شده ثبت شدهاند. همچنین میتوانید بر اساس تطابق بایت به بایت روی محتوای پیوست، فیلتر کنید. مثال زیر نحوه ایجاد یک فیلتر نوع را نشان میدهد: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"));تابع
getSnapshotClient.getBeaconState()را فراخوانی کنید.از
addOnSuccessListenerبرای ایجاد یکOnSuccessListenerکه بتواند بهBeaconStateResponseگوش دهد، استفاده کنید.برای اطمینان از معتبر بودن نتیجه، تابع
getStatus()را فراخوانی کنید.برای برگرداندن وضعیت beacon، تابع
BeaconStateResponse.getBeaconState()را فراخوانی کنید.برای دریافت
BeaconState.getBeaconInfo()BeaconState.BeaconInfoرا فراخوانی کنید.
مثال زیر نحوه دریافت اطلاعات beacon را نشان میدهد:
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 فراخوانی کنید.
برای دریافت وضعیت فعلی هدفون، مراحل زیر را انجام دهید:
- تابع
getSnapshotClient.getHeadphoneState()را فراخوانی کنید. - از
addOnSuccessListenerبرای ایجاد یکOnSuccessListenerکه بتواند بهHeadphoneStateResponseگوش دهد، استفاده کنید. - برای اطمینان از معتبر بودن نتیجه، تابع
getStatus()را فراخوانی کنید. - در صورت موفقیت، تابع
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 اضافه کنید.
برای دریافت موقعیت فعلی، مراحل زیر را انجام دهید:
بررسی کنید که آیا کاربر مجوزهای لازم را اعطا کرده است یا خیر. مثال زیر بررسی میکند که آیا مجوز
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; }تابع
getSnapshotClient.getLocation()را فراخوانی کنید.addOnSuccessListenerبرای ایجاد یکOnSuccessListenerکه بتواند بهLocationResponseگوش دهد، استفاده کنید.برای اطمینان از معتبر بودن نتیجه، تابع
getStatus()را فراخوانی کنید.برای برگرداندن
LocationفعلیLocationResponse.getLocation()را فراخوانی کنید.
مثال زیر نحوه دریافت موقعیت فعلی را نشان میدهد:
Awareness.getSnapshotClient(this).getLocation()
.addOnSuccessListener(new OnSuccessListener<LocationResponse>() {
@Override
public void onSuccess(LocationResponse locationResponse) {
Location loc = locationResponse.getLocationResult();
}
})