Android → Исследование возможности использования блокировки экрана и проверка активности пользователя

Использование блокировки экрана:
Для получения сообщения включена ли подсветка экрана нужно подписаться на
<action android:name="android.intent.action.ACTION_SCREEN_ON"></action>
<action android:name="android.intent.action.ACTION_SCREEN_OFF"></action>
Бродкаст должен быть зарегистрирован динамически, иначе работать не будет(Можно использовать сервис который будет висеть постоянно в памяти)
void onReceive(Context context, Intent intent) в intent.getAction() будет приходить ACTION_SCREEN_ON - если экран разблокирован
ACTION_SCREEN_OFF - если экран заблокирован

Использование сервисов для определения активности пользователя:
Используя GooglePlayServices(должны быть установлены google play service) далее GPS, мы можем определить пользователь идет, неподвижен, едет или тд (https://developer.android.com/guide/topics/location/transitions). GPS определяет используя gps, wifi и вышки оператора. GPS(используя алгоритмы google) дает возможность определить действия пользователя(хотьба, бег поездка на транспорте и тд)
Для того чтобы использовать gps нужно:
1) добавить:
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />


2) Подключить GPS:
implementation 'com.google.android.gms:play-services-location:16.0.0'


3) Нужен Service который будет запрашивать у GPS активность пользователя:
при создании(onCreate) сервиса:
mActivityRecognitionClient = new ActivityRecognitionClient(this);
mIntentService = new Intent(this, DetectedActivitiesIntentService.class);
mPendingIntent = PendingIntent.getService(this, 1, mIntentService, PendingIntent.FLAG_UPDATE_CURRENT);

Task<Void> task = mActivityRecognitionClient.requestActivityUpdates(
DETECTION_INTERVAL_IN_MILLISECONDS,
mPendingIntent);


DETECTION_INTERVAL_IN_MILLISECONDS - Время опрашивания

mPendingIntent- Наш IntentService которому будут приходить данные с периодом DETECTION_INTERVAL_IN_MILLISECONDS

при уничтожении(onDestroy) сервиса:
Task<Void> task = mActivityRecognitionClient.removeActivityUpdates(
mPendingIntent);

4) IntentService(DetectedActivitiesIntentService):

@Override
protected void onHandleIntent(Intent intent) {
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
ArrayList<DetectedActivity> detectedActivities = (ArrayList) result.getProbableActivities();
for (DetectedActivity activity : detectedActivities) {
broadcastActivity(activity);
checkAction(activity.getType(), activity.getConfidence())
}
}

private void checkAction(int type, int confidence) {
String label = "";
switch (type) {
case DetectedActivity.IN_VEHICLE: {
label = "IN_VEHICLE";
break;
}
case DetectedActivity.ON_BICYCLE: {
label = "ON_BICYCLE";
break;
}
case DetectedActivity.ON_FOOT: {
label = "ON_FOOT";
break;
}
case DetectedActivity.RUNNING: {
label = "RUNNING";
break;
}
case DetectedActivity.STILL: {
label = "STILL";
break;
}
case DetectedActivity.TILTING: {
label = "TILTING";
break;
}
case DetectedActivity.WALKING: {
label = "WALKING";
break;
}
case DetectedActivity.UNKNOWN: {
label = "UNKNOWN";
break;
}
}

Log.e(TAG, "User activity: " + label + ", Confidence: " + confidence);
}

confidence это коэффициент уверенности, используя этот параметр можем принимать во внимание данное действие или нет).
Добавил: javavirys ( 2023-05-17 11:27:05 )
Теги:Java
Рейтинг: + 0 -
Просмотров: 95

Специальные предложения