2016-05-06 8 views
-2

私は何度も試しましたが、良い結果は得られません。IntentService null値を表示

私はIntentServiceを作成しました。そこに加速度計のデータを読み込みました。 しかし、残念ながら私はnull値を得ました。

以下はマニフェストファイルです。

   <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秒間他のアクティビティに保持します。

答えて

0

onSensorChangedは、パラメータで受け取った新しい値で 'event'変数を設定する必要があります。

インスタンス変数で作業しますが、初期化はしません。

感覚的な方法を変更して、イベントを実際の意味を持たないリモートのインスタンスパラメータにパラメータとして使用します。あなたはあまりにも多くの属性を持っています...

+0

okとしばらくの間、加速度計の値を保持し、次に加速度計の登録を解除する方法です。例えば、xの値をcampareしたいという意味です。例えばxの値は2です。 x> 2の値は何かを示しています... –

+0

最後の浮動小数点[]の値をメモリに保持することで、配列だけで、sensoreventまたは各値を分離して保持する必要はありません。サービスの登録を解除するには、sensor.unregisterService(これ)が必要です。このコードを実行する条件を記述するだけです。 – AxelH

関連する問題