Eine kontextabhängige Anwendung einer Anwendung ist eine der besten Möglichkeiten, Ihren Benutzern nützliche Dienste anzubieten. Hierzu gibt es mehrere Möglichkeiten, z. B. das Erstellen von Anwendungen, die Geofences und andere Standortdienste verwenden. Dieser Artikel konzentriert sich auf die Verwendung der Google Play-Dienste Aktivitätserkennung API, um festzustellen, ob der Benutzer läuft, geht, in einem Fahrzeug fährt, Fahrrad fährt oder stillsteht.
Wenn Sie wissen, welche Aktivität der Benutzer ausführt, können Sie sich auf die Anwendungserfahrung einstellen, indem Sie beispielsweise fragen, ob der Benutzer mit dem Training beginnt, um mit Google Fit den Überblick zu behalten oder das Senden von Benachrichtigungen zu verhindern, wenn der Benutzer fährt . Die Quelldateien für dieses Lernprogramm finden Sie auf GitHub.
Als Erstes müssen Sie eine neue Android-Anwendung erstellen. Für diese Beispielanwendung habe ich das minimale SDK auf festgelegt 14 und erstellt einen leeren Standardwert Aktivität
. Nachdem Android Studio die Basisanwendung erstellt hat, öffnen Sie die build.gradle Datei und importieren Sie Play Services (Version 8.4 ist zum Zeitpunkt der Erstellung dieses Dokuments) unter der Abhängigkeiten
Knoten.
"com.google.android.gms: play-services: 8.4.0" kompilieren
Als Nächstes erstellen Sie eine neue Klasse, benennen Sie sie ActivityRecognizedService
, und habe es ausdehnen IntentService
. Wenn Google Play Services die Aktivitäten des Nutzers zurückgibt, wird diese an diese gesendet IntentService
. Auf diese Weise können Sie Ihre Anwendungslogik im Hintergrund ausführen, während der Benutzer seinen Tag erledigt.
public class ActivityRecognizedService erweitert IntentService public ActivityRecognizedService () super ("ActivityRecognizedService"); public ActivityRecognizedService (Name der Zeichenfolge) super (name); @Override protected void onHandleIntent (Absicht)
Um die Einrichtung abzuschließen, öffnen Sie AndroidManifest.xml. Sie müssen erklären ActivityRecognizedService
und enthalten die com.google.android.gms.permission.ACTIVITY_RECOGNITION
Erlaubnis für Ihre Bewerbung.
Nachdem Sie die Basisstruktur Ihrer Anwendung erstellt haben, können Sie mit dem nächsten Schritt fortfahren, eine Verbindung zu Google Play Services herzustellen und Aktivitätsdaten anzufordern.
Um die Google Play-Dienste nutzen zu können, müssen Sie sich zuerst mit ihnen verbinden. Beginnen Sie mit dem Öffnen MainActivity.java und implementieren die ConnectionCallbacks
und OnConnectionFailedListener
Schnittstellen. Sie müssen auch eine Membervariable vom Typ erstellen GoogleApiClient
um einen Verweis auf den API-Client zu behalten.
public class MainActivity erweitert AppCompatActivity implementiert GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener public GoogleApiClient mApiClient; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); @Override public void aufConnected (@Nullable Bundle-Paket) @Override public void aufConnectionSuspended (int i) @Override public void aufConnectionFailed (@NonNull ConnectionResult connectionResult)
Nach der Implementierung der erforderlichen Schnittstellen für die GoogleApiClient
, Sie können den Client initialisieren und eine Verbindung zu den Google Play-Diensten in herstellen onCreate ()
indem Sie die ActivityRecognition.API
und verbinden Sie Ihre Zuhörer mit der GoogleApiClient
Beispiel.
@Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mApiClient = new GoogleApiClient.Builder (this) .addApi (ActivityRecognition.API) .addConnectionCallbacks (this) .addOnConnectionFailedListener (this) .build (); mApiClient.connect ();
Einmal die GoogleApiClient
Instanz hat verbunden, onConnected ()
wird genannt. Wenn dies geschieht, müssen Sie ein erstellen PendingIntent
das geht an die IntentService
Sie haben zuvor erstellt und übergeben es an TätigkeitserkennungApi
. Sie müssen auch ein Intervall festlegen, wie oft die API die Aktivität des Benutzers überprüfen soll. Für diese Beispielanwendung verwenden wir einen Wert von 3000
, oder drei Sekunden, obwohl Sie in einer tatsächlichen Anwendung weniger häufig prüfen möchten, um Energie zu sparen.
@Override public void onConnected (@Nullable Bundle-Paket) Intent Intent = new Intent (dies ist ActivityRecognizedService.class); PendingIntent pendingIntent = PendingIntent.getService (this, 0, Absicht, PendingIntent.FLAG_UPDATE_CURRENT); ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates (mApiClient, 3000, pendingIntent);
Zu diesem Zeitpunkt sollte Ihre Anwendung alle drei Sekunden versuchen, die Aktivität des Benutzers zu erkennen, und diese Daten an senden ActivityRecognizedService
.
In dem onHandleIntent ()
Methode von ActivityRecognizedService
, Das erste, was Sie tun, ist zu bestätigen, dass die empfangenen Absicht
enthält Aktivitätserkennungsdaten. Wenn dies der Fall ist, können Sie das extrahieren ActivityRecognitionResult
von dem Absicht
um zu sehen, welche Aktivitäten Ihr Benutzer möglicherweise ausführt. Sie können eine Liste der möglichen Aktivitäten abrufen, indem Sie anrufen getProbableActivities ()
auf der ActivityRecognitionResult
Objekt.
@Override protected void onHandleIntent (Absichtsabsicht) if (ActivityRecognitionResult.hasResult (intent)) ActivityRecognitionResult result = ActivityRecognitionResult.extractResult (intent); handleDetectedActivities (result.getProbableActivities ());
In dieser Beispielanwendung protokollieren Sie einfach jede erkannte Aktivität und zeigen an, wie sicher Google Play Services ist, dass der Benutzer diese Aktivität durch einen Anruf ausführt getConfidence ()
auf einen ErkannteAktivität
Beispiel. Wenn die Zuverlässigkeit 75 oder höher ist, kann davon ausgegangen werden, dass der Benutzer diese Aktivität ausführt. Um dies zu demonstrieren, zeigen Sie auch eine Benachrichtigung an, wenn Ihre App feststellt, dass der Benutzer mit hoher Sicherheit geht.
private void handleDetectedActivities (ListwahrscheinlicheAktivitäten) für (DetectedActivity-Aktivität: wahrscheinlicheAktivitäten) switch (activity.getType ()) case DetectedActivity.IN_VEHICLE: Log.e ("ActivityRecogition", "In Vehicle:" + activity.getConfidence ()); brechen; case DetectedActivity.ON_BICYCLE: Log.e ("ActivityRecogition", "On Bicycle:" + activity.getConfidence ()); brechen; case DetectedActivity.ON_FOOT: Log.e ("ActivityRecogition", "Zu Fuß:") + activity.getConfidence ()); brechen; case DetectedActivity.RUNNING: Log.e ("ActivityRecogition", "Running:") + activity.getConfidence ()); brechen; case DetectedActivity.STILL: Log.e ("ActivityRecogition", "Still:" + activity.getConfidence ()); brechen; case DetectedActivity.TILTING: Log.e ("ActivityRecogition", "Tilting:" + activity.getConfidence ()); brechen; case DetectedActivity.WALKING: Log.e ("ActivityRecogition", "Walking:") + activity.getConfidence ()); if (activity.getConfidence ()> = 75) Builder für NotificationCompat.Builder = new NotificationCompat.Builder (this); builder.setContentText ("Gehst du?"); builder.setSmallIcon (R.mipmap.ic_launcher); builder.setContentTitle (getString (R.string.app_name)); NotificationManagerCompat.from (this) .notify (0, builder.build ()); brechen; case DetectedActivity.UNKNOWN: Log.e ("ActivityRecogition", "Unknown:" + activity.getConfidence ()); brechen;
Wenn Sie diese Anwendung ausführen, starten Sie einen Lauf, und schließen Sie Ihr Gerät an Ihren Computer an. In der Entwicklungskonsole sollte ein Protokoll ähnlich dem folgenden angezeigt werden.
E / ActivityRecogition: Zu Fuß: 92 E / ActivityRecogition: Laufen: 87 E / ActivityRecogition: Auf Fahrrad: 8 E / ActivityRecogition: Gehen: 5
Wenn Sie spazieren gehen, sollten Sie eine Benachrichtigung erhalten, in der Sie gefragt werden, ob Sie einen Spaziergang machen. Wenn Sie eine Übungsanwendung haben, ist dies die perfekte Gelegenheit, um Ihrem Benutzer eine Aktion zu geben, mit der er die Übung verfolgen kann.
Mit den Google Play-Diensten lässt sich die aktuelle Aktivität des Nutzers sehr einfach ermitteln. Dies kann unglaublich wertvoll sein, um Ihre Anwendungen kontextbezogen und für Ihre Benutzer nützlich zu machen, was für alle Beteiligten von Vorteil ist. Mit nur wenigen Codezeilen können auch Sie Ihre Anwendungen intelligenter machen.