• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

runtime error while accessing google api in android emulator

raksheg

Lurker
Jan 28, 2021
1
0
I am trying to access the googleFit API. It seems pretty straightforward. Get the google sign-in permissions and required authorizations then query for Step count. My code doesn't seem to work. and it logs only "Error!!" that's it. Android gurus, Where am I going wrong??

Code:
fun getAuthorizationAndReadData() {
        try {
            MainActivity().fitSignIn(FitActionRequestCode.READ_DATA)
        } catch () {
           Log.i("e", "error!!!!")
        }
       }

MainActivity.kt
Code:
enum class FitActionRequestCode {
    READ_DATA
}

private val fitnessOptions: GoogleSignInOptionsExtension = FitnessOptions.builder()
            .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ).build()

    fun fitSignIn(requestCode: FitActionRequestCode) {
        if (oAuthPermissionsApproved()) {
            readHistoryData()
        } else {
            requestCode.let {
                GoogleSignIn.requestPermissions(
                        this,
                        requestCode.ordinal,
                        getGoogleAccount(), fitnessOptions)
            }
        }
    }

    private fun getGoogleAccount() = GoogleSignIn.getAccountForExtension(this, fitnessOptions)


    private fun oAuthPermissionsApproved() = GoogleSignIn.hasPermissions(getGoogleAccount(), fitnessOptions)

    private fun performActionForRequestCode(requestCode: FitActionRequestCode) = when (requestCode) {
        FitActionRequestCode.READ_DATA -> readHistoryData()
    }
    private fun readHistoryData(): Task<DataReadResponse> {
        // Begin by creating the query.
        val readRequest = queryFitnessData()

        // Invoke the History API to fetch the data with the query
        return Fitness.getHistoryClient(this, getGoogleAccount())
                .readData(readRequest)
                .addOnSuccessListener { dataReadResponse ->
                    printData(dataReadResponse)
                    Log.i(ContentValues.TAG, "Data read was successful!") }
                .addOnFailureListener { e ->
                    Log.e(ContentValues.TAG, "There was a problem reading the data.", e)
                }
    }

    private fun queryFitnessData(): DataReadRequest {
        // [START build_read_data_request]
        // Setting a start and end date using a range of 1 week before this moment.
        val calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"))
        val now = Date()
        calendar.time = now
        val endTime = calendar.timeInMillis
        calendar.add(Calendar.WEEK_OF_YEAR, -1)
        val startTime = calendar.timeInMillis

        return DataReadRequest.Builder()
                .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
                .bucketByTime(1, TimeUnit.DAYS)
                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                .build()
    }

I have an app that needs to access Google Fit Api.
I can get the google sign-in pop up. But the next screen, requesting permission for my data types (TYPE_STEP_COUNT_DELTA, AGGREGATE_STEP_COUNT_DELTA) is not displayed.

As soon as I choose my google account the pop-up goes away and nothing is displayed further.



I have followed all the steps for the Setup mentioned here https://developers.google.com/fit/android/get-started

  1. Set up my project in Google API developer console

  2. Install google play services packages in my android studio

  3. Created an OAuth 2.0 Client ID

  4. Add the dependencies
Code:
  dependencies {
       implementation 'com.google.android.gms:play-services-fitness:20.0.0'
       implementation 'com.google.android.gms:play-services-auth:19.0.0'
   }
  1. Enable sign-in options "google" in my firebase console
Yet I do not get the further screens.

My code is as below:


Code:
public void setFitnessOption() {
       fitnessOptions =
               FitnessOptions.builder()
                       .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
                       .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ)
                       .build();
     }

public void checkFitInstalled() {
       if (isGoogleFitPermissionGranted()) {
           GetData();  //step count query     
       } else {
         requestGoogleFitPermission();
           GetData();    //step count query
       }
     }

public boolean isGoogleFitPermissionGranted() {
       if (GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(this), fitnessOptions)) {
         return true;
       } else {
         return false;
       }
     }

public void requestGoogleFitPermission() {
       GoogleSignInAccount account = GoogleSignIn.getAccountForExtension(this, fitnessOptions);
       GoogleSignIn.requestPermissions(
               this,
               GOOGLE_FIT_PERMISSIONS_REQUEST_CODE,
               account,
               fitnessOptions);
     }


What am I missing out?? struggling for days with this issue. Any input would be great!!!
 

BEST TECH IN 2023

We've been tracking upcoming products and ranking the best tech since 2007. Thanks for trusting our opinion: we get rewarded through affiliate links that earn us a commission and we invite you to learn more about us.

Smartphones