使用android写一个摇一摇音乐播放器
时间: 2024-03-23 18:43:16 浏览: 72
以下是一个简单的Android摇一摇音乐播放器的示例代码:
1. 在布局文件中添加一个播放按钮和一个用于显示当前歌曲的TextView:
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btn_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Play" />
<TextView
android:id="@+id/tv_song"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Current Song: " />
</RelativeLayout>
```
2. 在Java文件中添加以下代码:
```java
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor accelerometer;
private boolean isPlaying = false;
private MediaPlayer mediaPlayer;
private int currentSongIndex = 0;
private String[] songList = {"song1.mp3", "song2.mp3", "song3.mp3"};
private TextView tvSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvSong = (TextView) findViewById(R.id.tv_song);
// 初始化传感器
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// 初始化媒体播放器
mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
isPlaying = false;
}
});
// 播放按钮的点击事件
Button btnPlay = (Button) findViewById(R.id.btn_play);
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (isPlaying) {
mediaPlayer.pause();
isPlaying = false;
} else {
mediaPlayer.start();
isPlaying = true;
}
}
});
}
@Override
protected void onResume() {
super.onResume();
// 注册传感器监听器
sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
// 注销传感器监听器
sensorManager.unregisterListener(this);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
float x = sensorEvent.values[0];
float y = sensorEvent.values[1];
float z = sensorEvent.values[2];
// 计算加速度的大小
double acceleration = Math.sqrt(x * x + y * y + z * z);
// 如果加速度大于设定阈值,则播放下一首歌曲
if (acceleration > 15) {
currentSongIndex++;
if (currentSongIndex >= songList.length) {
currentSongIndex = 0;
}
playSong(songList[currentSongIndex]);
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
private void playSong(String songName) {
// 停止当前歌曲的播放
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
isPlaying = false;
// 更新当前歌曲的显示
tvSong.setText("Current Song: " + songName);
// 加载并播放新歌曲
try {
AssetFileDescriptor afd = getAssets().openFd(songName);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
mediaPlayer.start();
isPlaying = true;
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
这个代码段定义了一个名为`MainActivity`的活动,它实现了`SensorEventListener`接口来监听加速度计传感器的变化。当加速度大于15时,它会播放下一首歌曲。在`onCreate`方法中,它初始化了UI元素和媒体播放器,并设置了播放按钮的点击事件。在`playSong`方法中,它加载并播放新歌曲,并更新当前歌曲的显示。注意,这个示例使用了Android的AssetManager来加载嵌入在应用程序中的音频文件。如果您的音频文件存储在其他位置,请相应地更改代码。
阅读全文