微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为 GoogleFit Android 应用程序创建 SessionsAPI等

如何解决为 GoogleFit Android 应用程序创建 SessionsAPI等

我正在为大学构建一个小型健康/健身应用程序,但我在开始使用 GoogleFit API 时遇到了一些困难。

到目前为止,我一直在关注 Google 文档,目前认为我正处于 Get Started 页面上的“获取必要的 Android 权限”或“获取 OAuth 权限”这一点。但是现在我开始感到困惑..

它说我接下来必须创建不同的 API 客户端 SensorClientRecordingClientHistoryClientSessionsClient 等等。我不知道该怎么做!我是否将这些放在它们自己的 Java 类中?我如何连接到他们?

我对 Java 和 Android 感到非常自信和自在,我真的只是想克服这个小障碍,希望能有所收获。我试过寻找教程,但找不到任何最新或深入的内容..

感谢任何帮助,这是我迄今为止所做的:

public class ConnectTrackerFirst extends AppCompatActivity implements OnDataPointListener,Googleapiclient.ConnectionCallbacks,Googleapiclient.OnConnectionFailedListener {

    private static final int REQUEST_OAUTH = 1;
    private static final String AUTH_PENDING = "auth_state_pending";
    private boolean authInProgress = false;
    private Googleapiclient mapiclient;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.connect_tracker_first);

            if (savedInstanceState != null) {
                authInProgress = savedInstanceState.getBoolean(AUTH_PENDING);
            }

            mapiclient = new Googleapiclient.Builder(this)
                    .addApi(fitness.SENSORS_API)
                    .addScope(new Scope(Scopes.fitness_ACTIVITY_READ_WRITE))
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this)
                    .build();

        }

        @Override
        protected void onStart() {
            super.onStart();
            mapiclient.connect();
        }

        @Override
        public void onConnected(Bundle bundle) {
            DataSourcesRequest dataSourceRequest = new DataSourcesRequest.Builder()
                    .setDataTypes( DataType.TYPE_STEP_COUNT_CUMULATIVE )
                    .setDataSourceTypes( DataSource.TYPE_RAW )
                    .build();

            ResultCallback<DataSourcesResult> dataSourcesResultCallback = new ResultCallback<DataSourcesResult>() {
                @Override
                public void onResult(DataSourcesResult dataSourcesResult) {
                    for( DataSource dataSource : dataSourcesResult.getDataSources() ) {
                        if( DataType.TYPE_STEP_COUNT_CUMULATIVE.equals( dataSource.getDataType() ) ) {
                            registerfitnessDataListener(dataSource,DataType.TYPE_STEP_COUNT_CUMULATIVE);
                        }
                    }
                }
            };

            fitness.SensorsApi.findDataSources(mapiclient,dataSourceRequest)
                    .setResultCallback(dataSourcesResultCallback);
        }

    private void registerfitnessDataListener(DataSource dataSource,DataType dataType) {
        SensorRequest request = new SensorRequest.Builder()
                .setDataSource( dataSource )
                .setDataType( dataType )
                .setSamplingRate( 3,TimeUnit.SECONDS )
                .build();

        fitness.SensorsApi.add( mapiclient,request,this )
                .setResultCallback(new ResultCallback<Status>() {
                    @Override
                    public void onResult(Status status) {
                        if (status.isSuccess()) {
                            Log.e( "GoogleFit","SensorApi successfully added" );
                        }
                    }
                });
    }


    @Override
        public void onConnectionSuspended(int i) {

        }

        @Override
        public void onConnectionFailed(ConnectionResult connectionResult) {
            if( !authInProgress ) {
                try {
                    authInProgress = true;
                    connectionResult.startResolutionForResult( ConnectTrackerFirst.this,REQUEST_OAUTH );
                } catch(IntentSender.SendIntentException e ) {

                }
            } else {
                Log.e( "GoogleFit","authInProgress" );
            }
        }

    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data) {
        super.onActivityResult(requestCode,resultCode,data);
        if (requestCode == REQUEST_OAUTH) {
            authInProgress = false;
            if (resultCode == RESULT_OK) {
                if (!mapiclient.isConnecting() && !mapiclient.isConnected()) {
                    mapiclient.connect();
                }
            } else if (resultCode == RESULT_CANCELED) {
                Log.e("GoogleFit","RESULT_CANCELED");
            }
        } else {
            Log.e("GoogleFit","requestCode NOT request_oauth");
        }
    }

        @Override
        public void onDataPoint(DataPoint dataPoint) {
            for( final Field field : dataPoint.getDataType().getFields() ) {
                final Value value = dataPoint.getValue( field );
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(getApplicationContext(),"Field: " + field.getName() + " Value: " + value,Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }

    @Override
    protected void onStop() {
        super.onStop();

        fitness.SensorsApi.remove( mapiclient,this )
                .setResultCallback(new ResultCallback<Status>() {
                    @Override
                    public void onResult(Status status) {
                        if (status.isSuccess()) {
                            mapiclient.disconnect();
                        }
                    }
                });
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean(AUTH_PENDING,authInProgress);
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。