IntentService显示null值

时间:2016-05-06 14:05:29

标签: android

我尝试了很多次但却无法获得任何好结果。

我创建了IntentService,其中读取了accelrometer数据。 但不幸的是我得到了空值。

以下是清单文件;

              <uses-feature  android:name="android.hardware.sensor.accelerometer" android:required="false"/>
            <service android:name=".MyIntentSericee"
        android:exported="false">

    </service>

    <activity android:name=".About"></activity>

这是java类;

public class MyIntentSericee extends IntentService
                    implements SensorEventListener {       
           final static String TAG = " com.example.prince.life_activity";
       StringBuilder sb;
      float x, y;
     double z;
      private Handler handler;
      private SensorManager sensor;
      private boolean mIsServiceStarted = false;
    final int intervalTime = 10000; // 10 sec
    SensorEvent event;

     public MyIntentSericee() {
    super("service");
   }


     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {


    sensor = (SensorManager) getSystemService(SENSOR_SERVICE);
    accelerometer = sensor.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    sensor.registerListener(this, accelerometer,
               SensorManager.SENSOR_DELAY_NORMAL);        


    sb = new StringBuilder();
    sb.append(x).toString();
    Toast.makeText(getBaseContext(),sb,Toast.LENGTH_LONG).show();


    return START_NOT_STICKY;

}

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
protected void onHandleIntent(Intent intent) {
    synchronized (this)
    {
        try
        {
            int count=0;
            while(count<5) {
                sb.append("" + x).toString();
                Toast.makeText(getBaseContext(), sb, Toast.LENGTH_LONG).show();
                wait(10000);
                count++;
                sensor.unregisterListener(this);
            }

        }
        catch (Exception e)
        {
          //sensor.unregisterListener(this);
        }
    }
    }


      @Override
   public void onCreate() {
    super.onCreate();


         }


           @Override
       public void onSensorChanged(final SensorEvent event) {


        sensro();


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

      }
    public boolean isServiceStarted()
      {
    return mIsServiceStarted;
}

    public  void sensro()
    {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {


            x = event.values[0];
            y = event.values[1];
            z = event.values[2] - 9.8;

        }
    }
     }

任何人都可以帮助显示加速度计值,我的意思是将加速度计值保持10秒,然后取消注册加速度计。 并传递这些存储的值,保持10秒钟到其他活动。

1 个答案:

答案 0 :(得分:0)

onSensorChanged应该使用参数中收到的新值设置'event'变量。

您使用实例变量但从未初始化它。

我会改变sensro方法,将事件作为参数转发给远程那个实际上没有意义的实例参数。你有太多的归属......