Comments (2)
public class MainActivity extends AppCompatActivity {
public static final String TAG = "StepCounter"; private static final int REQUEST_OAUTH_REQUEST_CODE = 0x1001; private static final int REQUEST_PERMISSIONS_REQUEST_CODE = 34; private GoogleApiClient mClient = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // This method sets up our custom logger, which will print all log messages to the device // screen, as well as to adb logcat. initializeLogging(); if (!checkPermissions()) { requestPermissions(); } else { callGoogleClient(); } } private void callGoogleClient() { FitnessOptions fitnessOptions = FitnessOptions.builder() .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ) .addDataType(DataType.TYPE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_WRITE) .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_READ) .addDataType(DataType.AGGREGATE_STEP_COUNT_DELTA, FitnessOptions.ACCESS_WRITE) .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_READ) .addDataType(DataType.TYPE_ACTIVITY_SEGMENT, FitnessOptions.ACCESS_WRITE) .build(); if (!GoogleSignIn.hasPermissions(GoogleSignIn.getLastSignedInAccount(this), fitnessOptions)) { GoogleSignIn.requestPermissions( this, REQUEST_OAUTH_REQUEST_CODE, GoogleSignIn.getLastSignedInAccount(this), fitnessOptions); } else { getFitData(); } } private boolean checkPermissions() { int permissionState = ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION); int permissionState1 = ActivityCompat.checkSelfPermission(this, Manifest.permission.BODY_SENSORS); return permissionState == PackageManager.PERMISSION_GRANTED && permissionState1 == PackageManager.PERMISSION_GRANTED; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == Activity.RESULT_OK) { if (requestCode == REQUEST_OAUTH_REQUEST_CODE) { getFitData(); } } } private void getFitData() { if (mClient == null && checkPermissions()) { mClient = new GoogleApiClient.Builder(this) .addScope(new Scope(Scopes.FITNESS_LOCATION_READ)) .addScope(new Scope(Scopes.FITNESS_BODY_READ)) .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ)) .addApi(Fitness.HISTORY_API) .addConnectionCallbacks( new GoogleApiClient.ConnectionCallbacks() { @Override public void onConnected(Bundle bundle) { android.util.Log.i(TAG, "Connected!!!"); subscribeToFetching(); } @Override public void onConnectionSuspended(int i) { if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_NETWORK_LOST) { } else if (i == GoogleApiClient.ConnectionCallbacks.CAUSE_SERVICE_DISCONNECTED) { } } } ) .enableAutoManage(this, 4, new GoogleApiClient.OnConnectionFailedListener() { @Override public void onConnectionFailed(ConnectionResult result) { android.util.Log.i("onConnectionFailed", result.getErrorMessage()); } }) .build(); } } private void subscribeToFetching() { new BackgroundFetching().execute(); } private void getData() { try { Calendar cal = Calendar.getInstance(); Date now = new Date(); cal.setTime(now); long endTime = cal.getTimeInMillis(); cal.add(Calendar.HOUR, -cal.getInstance().get(Calendar.HOUR_OF_DAY)); cal.add(Calendar.MINUTE, -cal.getInstance().get(Calendar.MINUTE)); cal.add(Calendar.SECOND, -cal.getInstance().get(Calendar.SECOND)); long startTime = cal.getTimeInMillis(); //long startTime = Long.parseLong("1535602500000"); android.util.Log.i(TAG, "Start Time: " + android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", startTime)); android.util.Log.i(TAG, "End Time: " + android.text.format.DateFormat.format("yyyy-MM-dd hh:mm:ss a", endTime)); DataReadRequest readRequest = new DataReadRequest.Builder() .aggregate(DataType.AGGREGATE_STEP_COUNT_DELTA, DataType.TYPE_STEP_COUNT_DELTA) // .aggregate(DataType.TYPE_HEART_RATE_BPM, DataType.AGGREGATE_HEART_RATE_SUMMARY) /// .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED) .enableServerQueries() .bucketByTime(24, TimeUnit.HOURS) .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .build(); PendingResult<DataReadResult> result = Fitness.HistoryApi.readData(mClient, readRequest); result.setResultCallback(new ResultCallback<DataReadResult>() { @Override public void onResult(@NonNull DataReadResult dataReadResult) { int totalSteps = 0; if (dataReadResult.getBuckets().size() > 0) { for (Bucket bucket : dataReadResult.getBuckets()) { for (DataSet set : bucket.getDataSets()) { for (DataPoint dp : set.getDataPoints()) { for (Field field : dp.getDataType().getFields()) { int steps = dp.getValue(field).asInt(); totalSteps += steps; Toast.makeText(MainActivity.this, totalSteps, Toast.LENGTH_LONG).show(); } } } } } } }); } catch (Exception e) { android.util.Log.i(TAG, "Error msg: " + e.getMessage()); } } private class BackgroundFetching extends AsyncTask<Void, Void, Void> { protected Void doInBackground(Void... params) { getData(); return null; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the main; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.action_read_data) { readData(); return true; } return super.onOptionsItemSelected(item); } /** * Initializes a custom log class that outputs both to in-app targets and logcat. */ private void initializeLogging() { // Wraps Android's native log framework. LogWrapper logWrapper = new LogWrapper(); // Using Log, front-end to the logging chain, emulates android.util.log method signatures. Log.setLogNode(logWrapper); // Filter strips out everything except the message text. MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter(); logWrapper.setNext(msgFilter); // On screen logging via a customized TextView. LogView logView = (LogView) findViewById(R.id.sample_logview); // Fixing this lint error adds logic without benefit. // noinspection AndroidLintDeprecation logView.setTextAppearance(R.style.Log); logView.setBackgroundColor(Color.WHITE); msgFilter.setNext(logView); Log.i(TAG, "Ready"); } private void requestPermissions() { boolean shouldProvideRationale = ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_FINE_LOCATION); if (shouldProvideRationale) { Snackbar.make( findViewById(R.id.main_activity_view), "RequestPremission", Snackbar.LENGTH_INDEFINITE) .setAction(R.string.intro_text, new View.OnClickListener() { @Override public void onClick(View view) { // Request permission ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.BODY_SENSORS}, REQUEST_PERMISSIONS_REQUEST_CODE); } }) .show(); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.BODY_SENSORS}, REQUEST_PERMISSIONS_REQUEST_CODE); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { android.util.Log.i(TAG, "onRequestPermissionResult"); if (requestCode == REQUEST_PERMISSIONS_REQUEST_CODE) { if (grantResults.length <= 0) { android.util.Log.i(TAG, "User interaction was cancelled."); } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { callGoogleClient(); } else { Snackbar.make( findViewById(R.id.main_activity_view), "Premission not Granted", Snackbar.LENGTH_INDEFINITE) .setAction(R.string.intro_text, new View.OnClickListener() { @Override public void onClick(View view) { // Build intent that displays the App settings screen. Intent intent = new Intent(); intent.setAction( Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", BuildConfig.APPLICATION_ID, null); intent.setData(uri); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }) .show(); } } }
}
Did you resolved your problem ?
from android-fit.
I am closing this issue/PR, as it has been migrated to the new repo linked above in the comments. Thank you!
from android-fit.
Related Issues (20)
- couldnt get account info HOT 2
- sphal namespace is not configured for this process. HOT 1
- Google Fit API: ApiException 17 (Fitness.CLIENT is not available on this device) HOT 1
- Signed APK doesn't show subsription page. HOT 1
- Unable to remove the listener from the SensorsApi. HOT 3
- How to read steps session wise. HOT 1
- Unable to logout GoogleSignIn.getLastSignedInAccount(this) HOT 1
- How to debug sessions/activities in real time without delay until data updates in Google fit app HOT 1
- Android-fit in Kotlin HOT 1
- Values that returned from History API is not the same with Google Fit App HOT 1
- Error: No permission to read data for this private data source. HOT 1
- GoogleSignIn.getLastSignedInAccount for google fit api ALWAYS prompt account selection HOT 2
- is there any way to get the actual create time for a session? HOT 1
- GoogleSignIn.hasPermissions always return true even if I call disableFit HOT 2
- How to get heart points? HOT 1
- Always returns empty dataset HOT 1
- Is there a limit on SessionReadRequest with dataSets? HOT 1
- The data inserted dose not showed at Google Fit APP HOT 1
- Do we need Google Fit App for Google Fit API? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from android-fit.