Ich versuche, die Aktivitätserkennung in einem Projekt zu verwenden, um zu erkennen, wenn der Benutzer "IN-FAHRZEUG" ist. (Fahren) Das Problem ist, dass es fast unmöglich ist, es zu verwenden, da MostProbableActivity oft "IN-VEHICLE" meldet obwohl ich lange an meinem Schreibtisch gesessen habe oder einfach in meinem Haus herumgelaufen bin. Es wäre sehr schön zu wissen, wie die API das schließt.Aktivitätserkennungs-API unzuverlässig?
Ich denke, diese Funktion hat ein großes Potenzial, aber wie jetzt funktioniert etwas eindeutig nicht.
Dies ist ein Protokoll von MostProbableActivity alle 30 Sekunden genommen, um zu zeigen, was ich meine. An meinem Schreibtisch sitzend, schalte ich nach 4 Minuten das Telefon ein paar Mal um, und dies führt zu einem "mostProbable IN-VEHICLE" -Ergebnis.
Ich habe verschiedene Telefone ausprobiert und das Ergebnis ist das gleiche. Also ich glaube nicht, dass es Hardware betrifft.
DetectedActivity [type=STILL, confidence=43]
DetectedActivity [type=STILL, confidence=54]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=69]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=92]
DetectedActivity [type=TILTING, confidence=100]
DetectedActivity [type=IN_VEHICLE, confidence=49]
DetectedActivity [type=TILTING, confidence=100]
DetectedActivity [type=STILL, confidence=51]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=85]
DetectedActivity [type=STILL, confidence=100]
DetectedActivity [type=STILL, confidence=66]
DetectedActivity [type=STILL, confidence=100]
Dies ist der Code, es gibt nichts Besonderes:
public class ActivitiesIntentService extends IntentService {
private static final String TAG = "ActivitiesIntentService";
public ActivitiesIntentService() {
super(TAG);
}
@Override
protected void onHandleIntent(Intent intent) {
ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent);
Intent i = new Intent(Constants.STRING_ACTION);
DetectedActivity mostProbableActivity = result.getMostProbableActivity();
i.putExtra("MOST_PROBABLE_ACTIVITY",mostProbableActivity);
LocalBroadcastManager.getInstance(this).sendBroadcast(i);
Log.e(TAG, String.valueOf(mostProbableActivity));
}
}
Von diesem Link:
ich sehen kann, dass andere ähnliche Erfahrung haben, aber einige Behauptungen, dass es funktioniert OK.
Ich denke, das ist ein Fehler im Vertrauensalgorithmus der API. Es sollte leicht zu der Schlussfolgerung kommen, dass sich das Telefon in keiner Richtung bewegt, auch nicht auf einer Straße, die offensichtlich NICHT "am häufigsten" in einem FAHRZEUG ist.
Kann jemand dieses Problem bestätigen oder verwende ich es falsch?
Mit freundlichen Grüßen
Thomas
Sie verwenden es auf die richtige Weise. Das Problem ist, dass es ohne das Abtasten der GPS und das Entleeren der Batterie sehr schwierig ist, die Fahraktivität zu erkennen. Wahrscheinlich verfolgt Google die Daten der Sensoren (Beschleunigungsmesser, Gyroskop, Magnetometer usw.) in bestimmten Zeiträumen und sucht nach einem Fahrmuster (das sehr ähnlich ist, aber eine einzigartige Vibration hat). Manchmal ist der Algorithmus einfach nicht präzise genug. – MikeL