2013-07-05 44 views
2

試圖製作一個簡單的步計數器。一切正常,直到屏幕熄滅。這就是爲什麼我想在在後臺運行加速度計unsuccesfull

how to keep application running in background? keep collecting data?

描述傳感器事件移動到服務我確實是最好的,我可以,但不能找到錯誤。 這裏是活動代碼

import android.annotation.SuppressLint; 
import android.annotation.TargetApi; 
import android.app.Activity; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.PowerManager; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

@TargetApi(Build.VERSION_CODES.CUPCAKE) 
public class Main extends Activity implements OnClickListener { 

    private Button btnStart, btnStop; 
    static TextView tvX, tvY, tvZ; 
    static boolean started = false; 
    protected static double x,y,z; 

    @SuppressLint("SdCardPath") 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     PowerManager powerManager = (PowerManager)getSystemService(Context.POWER_SERVICE); 
     PowerManager.WakeLock wL = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK,"My Tag"); 

     wL.acquire(); 

     startService(new Intent(this, Calculations.class)); 

     tvX= (TextView)findViewById(R.id.steps); 
     tvY= (TextView)findViewById(R.id.dist); 
     tvZ= (TextView)findViewById(R.id.cals); 
     btnStart = (Button) findViewById(R.id.btnStart); 
     btnStop = (Button) findViewById(R.id.btnStop); 
     btnStart.setOnClickListener(this); 
     btnStop.setOnClickListener(this); 
     tvX.setText("0.0"); 
     tvY.setText("0.0"); 
     tvZ.setText("0.0"); 
    } 

    static void run() { 
     if (started) { 
      tvX.setText(Double.toString(1.1)); 
      tvY.setText(Double.toString(y)); 
      tvZ.setText(Double.toString(z)); 
     } 
     else { 
      tvX.setText(Double.toString(5.5)); 
      tvY.setText(Double.toString(y)); 
      tvZ.setText(Double.toString(z));    
     } 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.btnStart: 
      btnStart.setEnabled(false); 
      btnStop.setEnabled(true); 
      started = true; 
      // run(); 
      break; 
     case R.id.btnStop: 
      btnStart.setEnabled(true); 
      btnStop.setEnabled(false); 
      started = false; 
      //run(); 
      break; 
     default: 
      break; 
     } 
    } 
} 

,這裏是服務代碼

import android.annotation.TargetApi; 
import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Build; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

@TargetApi(Build.VERSION_CODES.CUPCAKE) 
public class Calculations extends Service implements SensorEventListener { 

    private float[] gravity = new float[3]; 
    private SensorManager mSensorManager; 
    private Sensor mAccelerometer; 
    private static final String TAG = "Calculations"; 
    static boolean started = false; 

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

    @Override 
    public void onCreate() { 
     Toast.makeText(this, "My Service Created", Toast.LENGTH_LONG).show(); 
     Log.d(TAG, "onCreate"); 
     mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
     mSensorManager.registerListener(this, mAccelerometer , SensorManager.SENSOR_DELAY_GAME); 
    } 

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

    } 
    @Override 
    public void onDestroy() { 

     super.onDestroy(); 
     mSensorManager.unregisterListener(this); 
    } 
    @Override 
    public void onSensorChanged(SensorEvent event) { 

      final float alpha = 0.8f; 

      gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0]; 
      gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1]; 
      gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2]; 

      Main.x = event.values[0] - gravity[0]; 
      Main.y = event.values[1] - gravity[1]; 
      Main.z = event.values[2] - gravity[2]; 
      Main.run(); 
     //} 
    } 
} 

任何幫助將不勝感激。 謝謝。

+0

什麼是錯誤? – Gerard

回答

0

請檢查您是否已在您的清單文件中提到這一過程..服務

android:Process=".AnyName" 

請檢查此。如果它不在那裏,請添加。它應該是工作