0

Android では、センサー値の変更をリッスンするサービスを作成しています。しかし、アプリケーションを開くたびにクラッシュし続けます。行を削除すると

 sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);

それは正常に動作します

次のように Service クラスを作成しました。

public class CustomSensorService extends Service implements SensorEventListener{

    static SensorManager sensorManager;
    static Sensor mAccelerometer;
    static Context mContext;
    static final String LOG_TAG = "SimpleService";

    @Override
    public void onCreate() {
        super.onCreate();
        Toast.makeText(this,"Service Created",Toast.LENGTH_SHORT).show();
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        sensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);

    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

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

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        Log.d( LOG_TAG, "onSensorChanged" );
        Toast.makeText(mContext,"Heelooo" , Toast.LENGTH_SHORT).show();

        stopSelf();


    }

}

そして私の活動として:

public class MainActivity extends Activity {

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

        intent = new Intent(this, CustomSensorService.class);
    }
    @Override 
    public void onResume(){
        super.onResume();
        startService(intent);  

    }
}

これがマニフェストです

 <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.learnandroidservice.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".CustomSensorService"/>
    </application>

痕跡: ここに画像の説明を入力

4

2 に答える 2

1

CustomSensorService クラス内: onSensorChanged() メソッド内: 初期化せずに mContext 変数値を使用しました。

あなたのコード: Toast.makeText(mContext,"Heelooo" , Toast.LENGTH_SHORT).show();

この問題を解決するために行う変更:

Toast.makeText(this, "Heelooo", Toast.LENGTH_SHORT).show();

上記の理由により、トーストの表示中に NullPointerException が発生しています。

于 2013-10-10T12:54:42.923 に答える