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

OAuth 同意屏幕突然没有显示在计步器上?

如何解决OAuth 同意屏幕突然没有显示在计步器上?

我目前正在为大学构建计步器应用程序。我最近实现了 OAuth 屏幕,它(经过多次错误后)终于可以工作了。

今晚我继续下一步添加可视计步器,但是,当我构建并运行我的代码时,OAuth 屏幕不再出现?今天完全没碰连接页面,只是新建了一个带有可视化计步器的java类

我真的很困惑为什么这不再显示,感谢任何帮助!

更新:我添加了一些捕捉点来找出我的代码出错的地方(因为没有显示错误)。我已将范围缩小到 authInProgress 函数中的 onCreate 方法。不知道这意味着什么,因为这对我来说有点新。指纹和 OAuth 同意都与 Firebase 一起正确设置。

这是我的连接类:

package com.example.example;

import android.content.Intent;
import android.content.IntentSender;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.Scopes;
import com.google.android.gms.common.api.Googleapiclient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Scope;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.fitness.fitness;
import com.google.android.gms.fitness.data.DataPoint;
import com.google.android.gms.fitness.data.DataSource;
import com.google.android.gms.fitness.data.DataType;
import com.google.android.gms.fitness.data.Field;
import com.google.android.gms.fitness.data.Value;
import com.google.android.gms.fitness.request.DataSourcesRequest;
import com.google.android.gms.fitness.request.OnDataPointListener;
import com.google.android.gms.fitness.request.SensorRequest;
import com.google.android.gms.fitness.result.DataSourcesResult;

import java.util.concurrent.TimeUnit;

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);

        // failing here
        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(@Nullable Bundle bundle) {
        DataSourcesRequest dataSourcesRequest = new DataSourcesRequest.Builder()
                .setDataTypes(DataType.TYPE_STEP_COUNT_CUMULATIVE)
                .setDataSourceTypes(DataSource.TYPE_RAW)
                .build();
        ResultCallback<DataSourcesResult> dataSourcesResultResultCallback = new ResultCallback<DataSourcesResult>() {
            @Override
            public void onResult(@NonNull 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,dataSourcesRequest).setResultCallback(dataSourcesResultResultCallback);


    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        if (!authInProgress) {
            try {
                authInProgress = true;
                connectionResult.startResolutionForResult(ConnectTrackerFirst.this,REQUEST_OAUTH);

            } catch (IntentSender.SendIntentException e) {

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

    }

    @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 onActivityResult(int requestCode,int resultCode,Intent 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");
        }
        super.onActivityResult(requestCode,resultCode,data);

    }

    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(@NonNull Status status) {
                        if (status.isSuccess()) {
                            Log.e("GoogleFit","SensorApi succesfully added");
                        }
                    }
                });
    }

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

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

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


}

还有我的视觉计数器类:

package com.example.example;

import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

public class DogActivity extends AppCompatActivity implements SensorEventListener {

private TextView textViewStepCounter,textViewStepDetector;
private SensorManager sensorManager;
private Sensor mStepCounter;
private boolean isCounterSensorPresent;
int stepCount = 0;

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

    getwindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    textViewStepCounter = findViewById(R.id.textViewStepCounter);
    textViewStepDetector = findViewById(R.id.textViewStepDetector);

    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

    if (sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER) != null) {
        mStepCounter = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
        isCounterSensorPresent = true;
    } else {
        textViewStepCounter.setText("Counter sensor is not present on this device.");
        isCounterSensorPresent = false;
    }

}

@Override
public void onSensorChanged(SensorEvent sensorEvent) {
    if (sensorEvent.sensor == mStepCounter) {
        stepCount = (int) sensorEvent.values[0];
        textViewStepCounter.setText(String.valueOf(stepCount));
    }
}

@Override
public void onAccuracyChanged(Sensor sensor,int accuracy) {

}

@Override
protected void onResume() {
    super.onResume();
    if (sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER) != null) {
        sensorManager.registerListener(this,mStepCounter,SensorManager.SENSOR_DELAY_norMAL);
    }
}

@Override
protected void onPause() {
    super.onPause();
    if (sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER) != null) {
        sensorManager.unregisterListener(this,mStepCounter);
    }
}

}

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