Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-获取MotionSensor失败(空指针)_Android_Nullpointerexception_Sensors_Sensormanager - Fatal编程技术网

Android-获取MotionSensor失败(空指针)

Android-获取MotionSensor失败(空指针),android,nullpointerexception,sensors,sensormanager,Android,Nullpointerexception,Sensors,Sensormanager,我目前正在尝试实现一个ScrollView,希望其中包含的ImageView可以通过RotationVectorSensor和SensorEventListener滚动 这是我目前的代码: import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; im

我目前正在尝试实现一个ScrollView,希望其中包含的ImageView可以通过RotationVectorSensor和SensorEventListener滚动

这是我目前的代码:

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.widget.HorizontalScrollView;
import android.widget.Toast;


public class MainActivity extends Activity implements SensorEventListener {

private SensorManager sensorManager;
private Sensor sensor;
private HorizontalScrollView scrollView;

private String TAG = MainActivity.class.getSimpleName();

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

    sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);

    if (sensor != null) {
        sensorManager.registerListener(this, sensor,
                SensorManager.SENSOR_DELAY_NORMAL);
        Log.d(TAG, "Sensor found.");
    } else {
        Log.e(TAG, "Sensor NOT found.");
        Toast.makeText(this, "ROTATION_VECTOR Sensor not found",
                Toast.LENGTH_LONG).show();
        finish();
    }
    scrollView = (HorizontalScrollView) findViewById(R.id.panoramaScrollView);
    Log.d(TAG, "Panorama Scroll View found.");
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub

}

@Override
public void onSensorChanged(SensorEvent event) {
    Toast.makeText(this, "rotating Yippi!", Toast.LENGTH_LONG).show();
    if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
        final float angle = event.values[2];
        scrollView.post(new Runnable() { 
            public void run() {
                if (scrollView != null) {
                    scrollView.scrollTo((int)angle, scrollView.getBottom());
                    Log.d(TAG, "scrollTo executed.");
                }
            } 
        });
    }

}


@Override
public void onResume() {
    super.onResume();
    sensorManager.registerListener(this,  sensor, SensorManager.SENSOR_DELAY_NORMAL);
    Log.d(TAG, "SensorListener registered");
}


@Override
public void onPause() {
    super.onPause();
    if (sensor != null) {
        sensorManager.unregisterListener(this);
        Log.d(TAG, "SensorListener unregistered");
    }
}

}
传感器初始化后直接出现空指针:

sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
因此,应用程序退出并打印:未找到传感器

有什么我忘了的吗?
提前谢谢

我找到了解决办法。android清单中缺少以下行:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>

您是否检查过您的设备是否有特定的传感器?看起来好像没有。我还没有想到这一点,但旋转传感器不仅仅是磁场传感器和加速计的组合吗?清单中可能缺少特定的权限吗?你说的对,它组合传感器,但通常也使用陀螺仪。你有陀螺吗?你在用什么设备?是的。我在三星S3上测试了它。我想它也可能使用指南针来计算旋转矢量,因此需要这些权限。