Android Wear Step Counter崩溃应用

Kartik Arora

我正在编写一个应用,以使用Android Wear设备读取心率和步数。心率传感器正常工作,但步数导致问题。但是,在为步骤计数器注释侦听器并在onResume()中注册null时,该应用程序可与心率传感器一起使用。我没有关于此的任何日志,否则我会在这里发布它。这是我正在使用的代码

import android.app.Activity;
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.support.wearable.view.WatchViewStub;
import android.util.Log;
import android.widget.TextView;

import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.wearable.Node;
import com.google.android.gms.wearable.NodeApi;
import com.google.android.gms.wearable.Wearable;

import java.nio.ByteBuffer;
import java.util.List;

public class MainActivity extends Activity {

    private SensorManager mSensorManager;
    private TextView mTextViewHeart, mTextViewStep;
    private Sensor mHeartRateSensor, mStepCounterSensor;
    private GoogleApiClient mGoogleApiClient;

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

        WatchViewStub stub = (WatchViewStub) findViewById(R.id.watch_view_stub);
        stub.setOnLayoutInflatedListener(new WatchViewStub.OnLayoutInflatedListener() {
            @Override
            public void onLayoutInflated(WatchViewStub stub) {
                mTextViewHeart = (TextView) stub.findViewById(R.id.value_heart);
                mTextViewStep = (TextView) stub.findViewById(R.id.value_step);
            }
        });

        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mHeartRateSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_HEART_RATE);
        mStepCounterSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);

        mGoogleApiClient = new GoogleApiClient.Builder(this).addApi(Wearable.API).build();
        mGoogleApiClient.connect();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mSensorManager.registerListener(heartListener, mHeartRateSensor, SensorManager.SENSOR_DELAY_NORMAL);
        mSensorManager.registerListener(stepListener, mStepCounterSensor, SensorManager.SENSOR_DELAY_FASTEST);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(heartListener, mHeartRateSensor);
    }

    SensorEventListener heartListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_HEART_RATE) {
                if (event.values.length > 0) {
                    if (event.values[0] > 0.0f) {
                        mTextViewHeart.setBackgroundResource(android.R.color.holo_green_light);
                        mTextViewHeart.setText(Float.toString(event.values[0]));
                        sendToHandheld(Math.round(event.values[0]), Sensor.TYPE_HEART_RATE);
                    }
                }
            }
        }

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

        }
    };

    SensorEventListener stepListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {

            if (event.sensor.getType() == Sensor.TYPE_STEP_COUNTER) {
                if (event.values.length > 0) {
                    mTextViewStep.setBackgroundResource(android.R.color.holo_green_light);
                    mTextViewStep.setText(Float.toString(event.values[0]));
                    sendToHandheld(Math.round(event.values[0]), Sensor.TYPE_STEP_COUNTER);
                }
            }
        }

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

        }
    };

    private void sendToHandheld(final int val, final int type) {
        final PendingResult<NodeApi.GetConnectedNodesResult> nodes = Wearable.NodeApi.getConnectedNodes(mGoogleApiClient);
        nodes.setResultCallback(new ResultCallback<NodeApi.GetConnectedNodesResult>() {
            @Override
            public void onResult(NodeApi.GetConnectedNodesResult result) {
                final List<Node> nodes = result.getNodes();
                if (nodes != null) {
                    for (int i = 0; i < nodes.size(); i++) {
                        final Node node = nodes.get(i);
                        Wearable.MessageApi.sendMessage(mGoogleApiClient, node.getId(), "/" + type, ByteBuffer.allocate(4).putInt(val).array());
                        Log.d("Sending", type + ":" + val);
                    }
                }
            }
        });
    }
}

更新

以某种方式获得日志

06-15 11:46:02.342    3355-3355/com.hsc.fit E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.hsc.fit, PID: 3355
    java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setBackgroundResource(int)' on a null object reference
            at com.hsc.fit.MainActivity$3.onSensorChanged(MainActivity.java:92)
            at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:405)
            at android.os.MessageQueue.nativePollOnce(Native Method)
            at android.os.MessageQueue.next(MessageQueue.java:143)
            at android.os.Looper.loop(Looper.java:122)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Kartik Arora

修复。WatchViewStubsetOnLayoutInflatedListener()调用后onResume(),我的传感器获取注册onResume()由于我的文本视图用于传感器的侦听器中,并且尚未分配引用,因此我得到了NullPointerException我将传感器注册移到了WatchViewStub侦听器中,现在可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android Wear Step Counter crashing app

来自分类Dev

Android Wear示例应用

来自分类Dev

Android Wear在通知时崩溃

来自分类Dev

ViewPager 和 Android Wear = 崩溃

来自分类Dev

未安装Android Wear应用

来自分类Dev

从Android Wear应用启动指南

来自分类Dev

创建并运行Android Wear应用

来自分类Dev

从Android Wear屏幕启动应用程序

来自分类Dev

Android Wear应用程序连接超时

来自分类Dev

在iPhone上安装Android Wear应用

来自分类Dev

Android Wear 5.0.X上的随机应用程序崩溃

来自分类Dev

注册传感器侦听器时,Android Wear应用程序崩溃

来自分类Dev

每当您打开Wear应用程序时,即可将Android Wear与手机同步

来自分类Dev

如何通过应用内购买启用Android Wear应用?

来自分类Dev

setOnClickListener使我的Wear应用程序崩溃

来自分类Dev

setOnClickListener使我的Wear应用程序崩溃

来自分类Dev

如何为Android Wear构建Phonegap Build应用程序?

来自分类Dev

这个Android Wear应用程式在哪里?

来自分类Dev

Watch Face无法显示在Android Wear应用中

来自分类Dev

AlarmManager无法通过Android Wear应用调用我的服务

来自分类Dev

在手机上测试Android Wear应用?

来自分类Dev

Android Wear内置应用最低版本

来自分类Dev

Android Wear应用-UI线程上的阻止方法

来自分类Dev

Android Wear应用打包在模拟器中工作?

来自分类Dev

自定义表盘未显示在Android Wear应用中

来自分类Dev

让应用在Android Wear上保持唤醒

来自分类Dev

如何为Android Wear应用开发UI布局

来自分类Dev

无法在Eclipse中执行初始的Android Wear Hello World应用

来自分类Dev

将数据从移动应用发送到Android Wear延迟