2012-05-12 12 views
0

あなたの助けとインターネット上のいくつかのガイドで、私はこのコードをノックアウトすることができます。しかし私はいくつかの問題を抱えています。アプリケーションは、私の考えによれば、電話が揺れたときにメディアプレーヤーを起動して一度起動する必要がありますが、今度は、電話が揺れるたびにメディアプレーヤーが起動します。さらに、私はそれをしたいと思い、アプリケーションが働いたと電話が振られた画面オフはメディアプレーヤーを起動し、画面が、一度だけ何かを始めるブール値を追加するには加速度計センサーとメディアプレイヤー

public class SensorTestActivity extends Activity implements SensorEventListener { 
private SensorManager sensorManager; 
private boolean color = false; 
private View view; 
private long lastUpdate; 
MediaPlayer mMediaPlayer; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
requestWindowFeature(Window.FEATURE_NO_TITLE); 
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
WindowManager.LayoutParams.FLAG_FULLSCREEN); 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
view = findViewById(R.id.textView); 
view.setBackgroundColor(Color.BLUE); 
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
sensorManager.registerListener(this, 
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
SensorManager.SENSOR_DELAY_NORMAL); 
lastUpdate = System.currentTimeMillis(); 
} 

@Override 
public void onSensorChanged(SensorEvent event) { 
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
getAccelerometer(event); 
} 
} 
private void getAccelerometer(SensorEvent event) { 
float[] values = event.values; 
// Movement 
float x = values[0]; 
float y = values[1]; 
float z = values[2]; 

float accelationSquareRoot = (x * x + y * y + z * z)/(SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH); 
long actualTime = System.currentTimeMillis(); 
if (accelationSquareRoot >= 2) // 
{ 
if (actualTime - lastUpdate < 200) { 
return; 
} 
lastUpdate = actualTime; 
Toast.makeText(this, "Device was shuffed", Toast.LENGTH_SHORT).show(); 
if (color) { 
view.setBackgroundColor(Color.GREEN); 

try { 

mMediaPlayer = MediaPlayer.create(getBaseContext(), R.raw.mymusic); 

mMediaPlayer.setLooping(false); 
mMediaPlayer.start(); 
mMediaPlayer.setOnCompletionListener(new 
OnCompletionListener() { 
public void onCompletion(MediaPlayer arg0) { 
// if (mMediaPlayer != null) { 
// mMediaPlayer.release(); 
// mMediaPlayer = null; 
// } 
} 
}); 
} catch (Exception e) { 
if (mMediaPlayer != null) { 
mMediaPlayer.release(); 
mMediaPlayer = null; 
} 
}     
} 
} else { 
view.setBackgroundColor(Color.RED); 
} 
color = !color; 
} 

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

@Override 
protected void onResume() { 
super.onResume(); 
// register this class as a listener for the orientation and 
// accelerometer sensors 
sensorManager.registerListener(this, 
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), 
SensorManager.SENSOR_DELAY_NORMAL); 
} 

@Override 
protected void onPause() { 
// unregister listener 
super.onPause(); 
sensorManager.unregisterListener(this); 
} 
} 

答えて

0

オンになっています。

boolean startOnce = true; 

if (startOnce) { 
.... 
startOnce = false; 
} 
+0

申し訳ありませんが、私のコードでは、 "if"構造でブール変数を挿入する必要がありますか? – bisssi

関連する問題