2012-05-12 22 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