山东大学项目实训八——Android音乐播放器

在这里插入图片描述

音乐播放器说明

在这里插入图片描述

1.音乐播放器的逻辑,音乐列表数据封装在Service里面

Activity和Service进行交互–aidl(服务的代理类)-Handler BroadcastReceiver 和EventBus

2.显示音乐播放时间,演唱者,点击上一个音乐,歌词同步等在Activity做。

在这里插入图片描述

在这里插入图片描述

AIDL小案例

1.定义一个服务

```cpp
  public class MyService extends Service {

	private AIDLActivity callback;



	@Override
	public void onCreate() {
		Log.e("yangguangfu", "MyService.onCreate");
	}


	@Override
	public void onStart(Intent intent, int startId) {
		Log.e("yangguangfu", "MyService.onStart startId="+startId);
	}


	@Override
	public IBinder onBind(Intent t) {
		Log.e("yangguangfu", "MyService.onBind");
		return mBinder;
	}



	private String getNames(){
		Log.e("yangguangfu", "MyService.getName");
		return "name from service";
	}
	
	private int getAges(){
		Log.e("yangguangfu", "MyService.getAge");
		return 24;
	}

   //由aidl文件生成的
	private final AIDLService.Stub mBinder = new AIDLService.Stub() {

		@Override
		public void invokCallBack() throws RemoteException {
			Log.e("yangguangfu", "MyService.AIDLService.invokCallBack");
			Rect1 rect = new Rect1();
			rect.bottom=-1;
			rect.left=-1;
			rect.right=1;
			rect.top=1;
			callback.performAction(rect);
		}


		@Override
		public void registerTestCall(AIDLActivity cb) throws RemoteException {
			Log.e("yangguangfu", "MyService.AIDLService.registerTestCall");
			callback = cb;
		}


		@Override
		public String getName() throws RemoteException {
			Log.e("yangguangfu", "MyService.AIDLService.getName");
			return getNames();
		}


		@Override
		public int getAge() throws RemoteException {
			Log.e("yangguangfu", "MyService.AIDLService.getAge");
			return getAges();
		}
	};

}

2.定义aidl文件

  interface AIDLService {   
    void registerTestCall(AIDLActivity cb);   
    void invokCallBack();
    

    String getName();
    int getAge();

  }  

3.Service需要在功能清单文件注册

   <service android:name="com.yanguangfu.binder.MyService" >
        <intent-filter>
            <action android:name="com.yanguangfu.binder.action.AIDLService" />
        </intent-filter>
    </service>

4.绑定方式启动服务

               Bundle args = new Bundle();
    			Intent intent = new Intent();
    			intent.setAction("com.yanguangfu.binder.action.AIDLService");
    			intent.putExtras(args);
    			bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

//			 startService(intent);

创建MediaService.java和IMediaService.aidl

1.创建MediaService服务,里面写常用的方法,start,pause
在功能清单文件注册

	  public class MediaService extends Service {
	    @Nullable
	    @Override
	    public IBinder onBind(Intent intent) {
	        return null;
	    }
	
	    @Override
	    public void onCreate() {
	        super.onCreate();
	    }
	
	    /**
	     * 根据位置打开音乐
	     * @param position
	     */
	    private void openAudio(int position){
	
	    }
	
	    /**
	     * 播放音乐
	     */
	    private void start(){
	
	    }
	
	    /**
	     * 暂停音乐
	     */
	    private void pause(){
	
	    }
	
	    /**
	     * 下一首
	     */
	    private void next(){
	
	    }

	    /**
	     * 上一首
	     */
	    private void pre(){
	
	    }
	
	    /**
	     * 得到播放模式
	     * @return
	     */
	    private int getPlaymode(){
	        return  0;
	    }
	
	    /**
	     * 设置播放模式
	     * @param playmode
	     */
	    private void setPlaymode(int playmode){
	
	    }
	
	    /**
	     * 得到当前播放进度
	     * @return
	     */
	    private int getCurrentPosition(){
	        return  0;
	    }
	
	    /**
	     * 得到当前的总时长
	     * @return
	     */
	    private int getDuration(){
	        return  0;
	    }

	    /**
	     * 得到歌曲的名称
	     * @return
	     */
	    private String getName(){
	        return "";
	    }

	    /**
	     * 得到演唱者
	     * @return
	     */
	    private String getArtist(){
	        return "";
	    }
	
	    /**
	     * 音频的拖动
	     * @param seekto
	     */
	    private void seekTo(int seekto){
	        
	    }
	}

2.创建IMediaService.aidl

 interface IMediaService {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);
	/**
	 * 根据位置打开音乐
	 * @param position
	 */
	 void openAudio(int position);
	
	/**
	 * 播放音乐
	 */
	 void start();
	
	/**
	 * 暂停音乐
	 */
	 void pause();
	
	/**
	 * 下一首
	 */
	 void next();
	 
	/**
	 * 上一首
	 */
	 void pre();
	/**
	 * 得到播放模式
	 * @return
	 */
	 int getPlaymode();
	
	/**
	 * 设置播放模式
	 * @param playmode
	 */
	 void setPlaymode(int playmode);
	
	/**
	 * 得到当前播放进度
	 * @return
	 */
	 int getCurrentPosition();
	
	/**
	 * 得到当前的总时长
	 * @return
	 */
	 int getDuration();
	 
	/**
	 * 得到歌曲的名称
	 * @return
	 */
	 String getName();
	 
	/**
	 * 得到演唱者
	 * @return
	 */
	 String getArtist();	
	/**
	 * 音频的拖动
	 * @param seekto
	 */
	 void seekTo(int seekto);

}

3.在服务里面重新onBind

4.绑定方式启动服务

5.播放音乐

链接:https://pan.baidu.com/s/1Ex-eTqkc_q3TNzvNJ8F11A
提取码:kx22

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值