Can I determine if Google Fit is installed and used by the user?

I want to add a step counter to my application. Currently, I am using Google fit to measure the number of steps a user has.

The problems that I encounter is that not all devices have a Google fit application, and even if not all users register with the application service (as a client).

So the desired stream:

  • Determine if Google fit installed.
  • If installed, check if the user is registered with Google fit .
  • If installed and registered with the Google fit app, check to see if the type of user account supports fitness services. (recording data such as steps)
  • If everything above is normal, check if the user has confirmed the Google popup.

Basically, I want to check if the user is using a suitable application (using all the above conditions), if he fails, then he will use the StepCount sensor on the device (if exists), if the sensor does not exist, he will use another sensors achieve this goal .

Here is the code I use to connect with the 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> { ... } } 

You need help

Thanks.

+5
source share
1 answer

You can call getPackageInfo() on the PackageManager . If he PackageManager.NameNotFoundException , it means the application is not installed. If it does not throw an exception, google fit is installed

 private static final String PACKAGE_NAME = "com.google.android.apps.fitness"; @CheckResult public boolean fitInstalled() { try { context.getPackageManager().getPackageInfo(PACKAGE_NAME, PackageManager.GET_ACTIVITIES); return true; } catch (PackageManager.NameNotFoundException e) { return false; } } 
+4
source

Source: https://habr.com/ru/post/1238281/


All Articles