在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:ForMusic开源软件地址:https://gitee.com/ningyuwen/XX-music开源软件介绍:码云上的代码已停止更新,github地址:https://github.com/ningyuwen/ForMusicForMusic这是一款支持Android系统的本地音乐播放器 界面第三方库Bugly:用于统计闪退、ANR异常情况,以及更新软件 //其中latest.release指代最新版本号,也可以指定明确的版本号,例如1.2.0 compile 'com.tencent.bugly:crashreport_upgrade:latest.release' //其中latest.release指代最新版本号,也可以指定明确的版本号 compile 'com.tencent.bugly:nativecrashreport:latest.release' fastjson:用于Json解析 // https://mvnrepository.com/artifact/com.alibaba/fastjson 解析json compile 'com.alibaba:fastjson:1.2.39' Glide:图片加载框架 //Glide compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.github.bumptech.glide:okhttp3-integration:1.5.0@aar' OkHttp:网络框架 compile 'com.squareup.okhttp3:okhttp:3.8.1' PlayPauseView:按钮播放暂停动画 //播放、暂停 compile 'com.github.Lauzy:PlayPauseView:1.0.4' android-image-cropper:用于图片裁剪 //剪切 compile 'com.theartofdev.edmodo:android-image-cropper:2.6.0' 极光统计平台 compile 'cn.jiguang.sdk:janalytics:1.1.1' compile 'cn.jiguang.sdk:jcore:1.1.8' ButterKnife:依赖注入框架 compile 'com.jakewharton:butterknife:8.5.1' circleImageView:圆形ImageView compile 'de.hdodenhof:circleimageview:2.2.0' 实现方案
Activity中代码: /** * Activity和Service传递数据 */ public interface IServiceDataTrans{ void initServiceData(ArrayList<Long> musicId); //初始化Service的数据,音乐路径 void playMusicFromClick(int position); //用户点击播放,传入position void playOrPause(); //播放或暂停 void replaceBackStageMusicList(ArrayList<Long> musicInfoList, int position);//修改后台播放列表,传入musicId,当前播放顺序 int getMusicPlayTimeStamp(); //获取播放进度,返回毫秒 long getPlayingMusicId(); //获取当前播放的音乐id,查询数据,便于显示 int getPlayPosition(); //获取播放位置position boolean isPlayingMusic(); //获取音乐播放状态,播放或者暂停 void changePlayingTime(int time); //计算好现在要开始播放的时间,并且将后台的正在播放的时间修改了 void cancelNotification(); //关闭状态栏 } /** * 初始化activity时启动服务,服务可能因为内存回收而自动关闭 */ public void startPlayMusicService(){ Intent intent = new Intent(BaseActivity.this, PlayMusicService.class); bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); } /** * 后台播放音乐Service,使用bindService启动,方便传输数据,startService不方便传输数据 * 当Service */ public ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { //使用MyBinder类获取PlayMusicService对象, PlayMusicService.MyBinder myBinder = (PlayMusicService.MyBinder)service; mServiceDataTrans = myBinder.getService(); //设置Service对Activity的监听回调 myBinder.setIServiceDataToActivity(mServiceDataToActivity); Log.i(TAG, "onServiceConnected: initServiceData"); //初始化Service的数据,使用接口回调 try { initServiceData(); }catch (NullPointerException e){ e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { Log.i(TAG, "onServiceConnected: transData33"); } }; Service中代码: /** * 将Service的数据传给Activity */ public interface IServiceDataToActivity { String getMusicFilePath(long pid); //获取音乐文件路径 void showLyricAtActivity(long pid); //展示歌词,通过pid查询到文件路径,再解析歌词文件 MusicData getPlayMusicData(long pid); //获取MusicData,展示通知栏时需要获取专辑图片,音乐名和专辑名 int getPositionFromDataOnPid(long pid); //根据pid查询歌曲在歌单中的位置,第一次进入app时需要用pid查询到mPosition void refreshPlayPauseAnimation(boolean play); //更新主页面的播放暂停动画 void sendCompleteMsgToRefreshPop(int position); //歌曲播放完成,向Activity发送通知,更新PopupWindow void calculateThisMusicIsAddCount(long playtime, long pid, int position); //用于计数排序 void exitApp(); } // IBinder是远程对象的基本接口,是为高性能而设计的轻量级远程调用机制的核心部分。但它不仅用于远程 // 调用,也用于进程内调用。这个接口定义了与远程对象交互的协议。 // 不要直接实现这个接口,而应该从Binder派生。 // Binder类已实现了IBinder接口 public class MyBinder extends Binder { /** * 获取Service的方法 * @return 返回PlayerService */ public PlayMusicService getService(){ return PlayMusicService.this; } /** * 传递Activity的context,绑定监听对象 * @param serviceDataToActivity serviceDataToActivity */ public void setIServiceDataToActivity(IServiceDataToActivity serviceDataToActivity){ mServiceDataToActivity = serviceDataToActivity; } }
下载酷安应用市场:点我下载 |
请发表评论