Voglio aggiungere contatore di passi alla mia app. Ormai sto usando Google fit
per misurare il conteggio dei passi dell'utente.È possibile rilevare se l'app Google Fit è installata e utilizzata dall'utente?
I problemi con cui sto affrontando è che non tutti i dispositivi hanno l'app Google Fit
installata, e anche se lo fa - non tutti gli utenti si registrano al servizio app (come client).
Così il flusso desiderato:
- rilevare se è installato
Google fit
app. - Se installato, controllare se l'utente è registrato nell'app
Google fit
. - Se installata e registrata nell'app
Google fit
, verificare se il supporto del tipo di account utente utilizza i servizi di fitness. (registrazione di dati come passi) - Se tutto sopra ok, controllare se l'utente ha confermato il pop-up `Google fit.
Fondamentalmente voglio controllare se l'utente utilizza app misura (utilizzando tutte le condizioni sopra), se si fallisce, allora utilizzerà il sensore StepCount sul dispositivo (se esiste), se il sensore non esiste lo farà usa gli altri sensori per raggiungere questo obiettivo.
Ecco il codice che sto usando per connettersi con Google Fit API:
private void buildFitnessClient() {
// Create the Google API Client
mClient = new GoogleApiClient.Builder(getContext())
.addApi(Fitness.HISTORY_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
.addConnectionCallbacks(
new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(Bundle bundle) {
Log.i(TAG, "Connected!!!");
// Now you can make calls to the Fitness APIs.
// Put application specific code here.
new getFitnessTask().execute();
}
@Override
public void onConnectionSuspended(int i) {
// If your connection to the sensor gets lost at some point,
// you'll be able to determine the reason and react to it here.
if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) {
Log.i(TAG, "Connection lost. Cause: Network Lost.");
} else if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) {
Log.i(TAG, "Connection lost. Reason: Service Disconnected");
}
}
}
)
.addOnConnectionFailedListener(
new GoogleApiClient.OnConnectionFailedListener() {
// Called whenever the API client fails to connect.
@Override
public void onConnectionFailed(ConnectionResult result) {
Log.i(TAG, "Connection failed. Cause: " + result.toString());
if (!result.hasResolution()) {
// Show the localized error dialog
if (getActivity() != null) {
GooglePlayServicesUtil.getErrorDialog(result.getErrorCode(),
getActivity(), 0).show();
}
return;
}
// The failure has a resolution. Resolve it.
// Called typically when the app is not yet authorized, and an
// authorization dialog is displayed to the user.
if (!authInProgress) {
try {
Log.i(TAG, "Attempting to resolve failed connection; activity; "+ getActivity());
if (getActivity() != null) {
authInProgress = true;
result.startResolutionForResult(getActivity(),
REQUEST_OAUTH);
}
} catch (IntentSender.SendIntentException e) {
Log.e(TAG,
"Exception while starting resolution activity", e);
}
}
}
}
)
.build();
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
Log.e(TAG, "onActivityResult requestCode=" + requestCode + ", resultCode=" + resultCode);
if (requestCode == REQUEST_OAUTH) {
authInProgress = false;
if (resultCode == Activity.RESULT_OK) {
Log.e(TAG, "RESULT_OK");
// Make sure the app is not already connected or attempting to connect
if (!mClient.isConnecting() && !mClient.isConnected()) {
mClient.connect();
}
} else if (resultCode == Activity.RESULT_CANCELED) {
Log.e(TAG, "RESULT_CANCELED");
}
}
}
private class getFitnessTask extends AsyncTask<Void, Void, Integer> {
...
}
}
bisogno del vostro aiuto, ragazzi
Grazie.
Anche io sto affrontando lo stesso problema, qualche soluzione per questo? – shekar
Anche cercare una soluzione per la stessa domanda. per favore pubblica la risposta se l'hai già ricevuta. –