OneDayOneEx: 3 音乐播放器

本文将指导您如何使用Android开发一套音乐播放器应用,包括创建界面、绑定按钮事件、实现播放、停止和暂停功能。

MainActivity.java

package com.example.rrt;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

	// 创建标签
	private static final String TAG = "PlayMusic";
	// 获取按钮
	private Button playBtn;
	private Button stopBtn;
	private Button pauseBtn;
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		findView();
		bindButton();
	}
	
	private void findView()
	{
		playBtn = (Button)findViewById(R.id.play);
		stopBtn = (Button)findViewById(R.id.stop);
		pauseBtn = (Button)findViewById(R.id.pause);
	}
	
	// 为按钮绑定事件
	private void bindButton()
	{
		playBtn.setOnClickListener(this);
		stopBtn.setOnClickListener(this);
		pauseBtn.setOnClickListener(this);
	}

	// 重写onClick事件
	// 通过判断按钮ID,做不同处理
	@Override
	public void onClick(View v) {
		Log.d(TAG, "onClick : onClick()");

		int op = -1;
		// Intent: 组件之间的通讯中,主要是由Intent协助完成的。
		// 参考: http://bbs.hiapk.com/thread-7959-1-1.html
		Intent intent = new Intent("com.yang.Android.MUSIC");

		switch (v.getId()) {
		case R.id.play: // 播放
			Log.d(TAG, "onClick : play music");
			op = 1;
			break;
		case R.id.stop: // 停止
			Log.d(TAG, "onClick : stop music");
			op = 2;
			break;
		case R.id.pause: // 暂停
			Log.d(TAG, "onClick : pause music");
			op = 3;
			break;
		}

		// Bundle 是Android开发中的一个类,用于Activity之间传输数据用。
		// 参考: http://zhidao.baidu.com/question/187391685.html
		Bundle bundle = new Bundle();
		bundle.putInt("op", op);

		intent.putExtras(bundle);

		// Service 是android 系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行
		// 参考: http://ant-qingyun27sc.iteye.com/blog/1596073
		startService(intent);
	}
}

MusicService.java

package com.example.rrt;

import java.io.IOException;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;

public class MusicService extends Service {

	private static final String TAG = "MyService";
	private MediaPlayer mediaPlayer;
	
	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public void onCreate() {
		Log.v(TAG, "onCreate");
		if(mediaPlayer == null)
		{
			mediaPlayer = MediaPlayer.create(this, R.raw.test);
			mediaPlayer.setLooping(false);
		}
	}
	
	@Override
	public void onDestroy() {
		Log.v(TAG, "onDestroy");
		if(mediaPlayer != null)
		{
			mediaPlayer.stop();
			mediaPlayer.release();
		}
	}
	
	@Override
	public void onStart(Intent intent, int startId)
	{
		Log.v(TAG,"onStart");
		if(intent != null)
		{
			Bundle bundle = intent.getExtras();
			if(bundle != null)
			{
				int op = bundle.getInt("op");
				switch(op) {
				case 1:
					play();
					break;
				case 2:
					stop();
					break;
				case 3:
					pause();
					break;
				}
			}
		}
	}
	
	public void play() {
		Log.v(TAG,"play");
		if (!mediaPlayer.isPlaying()) {
			mediaPlayer.start();
		}
	}
	
	public void pause() {
		Log.v(TAG,"pause");
		if(mediaPlayer != null && mediaPlayer.isPlaying())
		{
			mediaPlayer.pause();
		}
	}
	
	public void stop() {
		Log.v(TAG,"stop");
		if( mediaPlayer != null )
		{
			mediaPlayer.stop();
			
			try{
				mediaPlayer.prepare();
			}
			catch (IOException ex) {
				ex.printStackTrace();
			}
		}
	}
}

AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.rrt"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.rrt.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <? 这里需要注册 "MusicService" ?>
        <service android:name=".MusicService" >
            <intent-filter>
                <action android:name="com.yang.Android.MUSIC" />

                <category android:name="android.intent.category.default" />
            </intent-filter>
        </service>
    </application>

</manifest>


内容概要:本文档系统性地介绍了2024年最新提出的两种智能优化算法——青蒿素优化算法与霜冰优化算法(RIME)的原理、实现方法及其性能对比分析,并提供了完整的Matlab代码实现。文档不仅聚焦于核心算法的仿真与验证,还整合了大量前沿科研资源,涵盖微电网优化、风电功率预测、无人机三维路径规划、电动汽车调度、图像融合、负荷预测、通信信号处理、电力系统故障恢复等多个高价值应用场景。所有案例均基于Matlab/Simulink平台进行建模与仿真,强调算法在复杂工程系统中的实际应用能力,旨在为科研人员提供一套从理论到代码再到应用的完整复现体系。; 适合人群:具备一定编程基础和科研背景的研究生、高校教师及工程技术人员,尤其适合从事智能优化算法研究、新能源系统优化、自动化控制、电力系统调度、无人机导航与路径规划等相关领域的研究人员。; 使用场景及目标:①用于高水平学术论文的复现与创新性研究,提升科研效率与成果产出;②应用于复杂工程系统的建模仿真与智能优化设计,如多能互补系统调度、无人机避障路径规划、微电网能量管理等;③作为智能优化算法的教学与学习资料,深入理解现代元启发式算法的设计思想与实现机制。; 阅读建议:建议读者结合文档中提供的Matlab代码与Simulink仿真模型,按照目录结构循序渐进地学习与实践,优先选择与自身研究方向契合的案例进行代码复现,重点关注算法参数设置、收敛曲线分析与多算法对比实验部分,以全面提升算法应用与科研创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值