From 94e9af1d25d7c5d2867f46b01d227fa453e1b820 Mon Sep 17 00:00:00 2001 From: lizixian <386707112@qq.com> Date: Mon, 28 Jan 2019 11:05:04 +0800 Subject: [PATCH] update readme --- README.md | 21 +++++++-- app/build.gradle | 2 +- .../java/com/lzx/musiclib/MainActivity.java | 2 +- build.gradle | 25 +++++----- gradle.properties | 2 - starrysky/build.gradle | 24 ++++++++-- .../java/com/lzx/starrysky/MusicService.java | 7 +-- .../manager/MediaSessionConnection.java | 2 +- .../lzx/starrysky/manager/MusicManager.java | 47 +++++++------------ .../lzx/starrysky/model/MusicProvider.java | 36 ++++++++++++-- .../com/lzx/starrysky/model/SongInfo.java | 2 +- .../notification/CustomNotification.java | 2 +- .../notification/SystemNotification.java | 4 +- .../utils/NotificationColorUtils.java | 2 +- .../notification/utils/NotificationUtils.java | 2 +- .../lzx/starrysky/playback/ExoPlayback.java | 3 +- .../starrysky/playback/PlaybackManager.java | 2 +- .../lzx/starrysky/playback/QueueHelper.java | 3 +- .../lzx/starrysky/playback/QueueManager.java | 2 +- 19 files changed, 114 insertions(+), 76 deletions(-) diff --git a/README.md b/README.md index 34a8de72..b4232f56 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # A Powerful and Streamline MusicLibrary - - - +[ ![](https://img.shields.io/badge/platform-android-green.svg) ](http://developer.android.com/index.html) +[ ![Download](https://api.bintray.com/packages/lizixian/StarrySky/StarrySkyJava/images/download.svg) ](https://bintray.com/lizixian/StarrySky/StarrySkyJava/_latestVersion) +[ ![](https://img.shields.io/badge/license-MIT-green.svg) ](http://choosealicense.com/licenses/mit/) @@ -33,6 +33,21 @@ StarrySky 是一个全新的版本,基于媒体浏览器服务(MediaBrowserSer 若在使用中发现 Bug 或者有什么建议问题的可以在 issues 中提出或者添加 QQ 群交流,欢迎反馈。 +## 集成 +```groovy +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.lzx:StarrySkyJava:2.0.0' +} +``` + +StarrySky 里面依赖的第三方库除了 ExoPlayer 之外还有 glide:4.8.0,用于封面的下载,如果版本跟你项目中的版本有冲突,建议通过导入源码的 +方式自己修改。 + +请使用 Java8。 + + + ## 使用文档 - [集成StarrySky](https://github.com/lizixian18/MusicLibrary/blob/StarrySkyJava/readme/%E9%9B%86%E6%88%90StarrySky.md) diff --git a/app/build.gradle b/app/build.gradle index c4a481cd..70aaba81 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,7 +28,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) //noinspection GradleCompatible - implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'com.android.support:appcompat-v7:28.0.0' implementation project(':starrysky') } } \ No newline at end of file diff --git a/app/src/main/java/com/lzx/musiclib/MainActivity.java b/app/src/main/java/com/lzx/musiclib/MainActivity.java index 427bcc63..eb41516d 100644 --- a/app/src/main/java/com/lzx/musiclib/MainActivity.java +++ b/app/src/main/java/com/lzx/musiclib/MainActivity.java @@ -2,6 +2,7 @@ import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; @@ -15,7 +16,6 @@ import java.util.ArrayList; import java.util.List; -import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { diff --git a/build.gradle b/build.gradle index 3db23457..9019695f 100644 --- a/build.gradle +++ b/build.gradle @@ -2,17 +2,16 @@ buildscript { repositories { - google() jcenter() - maven { url "https://jitpack.io" } - maven { - url 'https://maven.google.com/' - name 'Google' - } + google() +// maven { +// url 'https://maven.google.com/' +// name 'Google' +// } } dependencies { - classpath 'com.android.tools.build:gradle:3.3.0' - classpath 'com.novoda:bintray-release:0.8.1' + classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.novoda:bintray-release:0.9' } } @@ -20,11 +19,11 @@ allprojects { repositories { google() jcenter() - maven { url "https://jitpack.io" } - maven { - url 'https://maven.google.com/' - name 'Google' - } +// maven { url "https://jitpack.io" } +// maven { +// url 'https://maven.google.com/' +// name 'Google' +// } } tasks.withType(JavaCompile) { //设置全局编码 options.encoding = "UTF-8" diff --git a/gradle.properties b/gradle.properties index 9e6fce10..aac7c9b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,8 +9,6 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -android.enableJetifier=true -android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. diff --git a/starrysky/build.gradle b/starrysky/build.gradle index 6538d025..3e5c7a16 100644 --- a/starrysky/build.gradle +++ b/starrysky/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.library' +apply plugin: 'com.novoda.bintray-release' android { compileSdkVersion 28 @@ -6,8 +7,8 @@ android { defaultConfig { minSdkVersion 19 targetSdkVersion 28 - versionCode 1 - versionName "1.0" + versionCode 200 + versionName "2.0.0" compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -22,12 +23,27 @@ android { } } + lintOptions { + abortOnError false + } + + publish { + repoName = 'StarrySky' + userOrg = 'lizixian' + groupId = 'com.lzx' + artifactId = 'StarrySkyJava' + publishVersion = '2.0.0' + desc = 'A Powerful and Streamline MusicLibrary' + website = "https://github.com/lizixian18/StarrySky" + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.0.2' - implementation "androidx.media:media:1.0.0" +// implementation 'androidx.appcompat:appcompat:1.0.2' +// implementation "androidx.media:media:1.0.0" + //noinspection GradleCompatible + implementation 'com.android.support:appcompat-v7:28.0.0' if (findProject(':exoplayer-library-core') != null) { api project(':exoplayer-library-core') diff --git a/starrysky/src/main/java/com/lzx/starrysky/MusicService.java b/starrysky/src/main/java/com/lzx/starrysky/MusicService.java index 13aff645..cc8cb508 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/MusicService.java +++ b/starrysky/src/main/java/com/lzx/starrysky/MusicService.java @@ -10,7 +10,10 @@ import android.os.Handler; import android.os.Message; import android.os.RemoteException; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.media.MediaBrowserCompat; +import android.support.v4.media.MediaBrowserServiceCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaControllerCompat; import android.support.v4.media.session.MediaSessionCompat; @@ -28,9 +31,7 @@ import java.util.ArrayList; import java.util.List; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.media.MediaBrowserServiceCompat; + public class MusicService extends MediaBrowserServiceCompat implements QueueManager.MetadataUpdateListener, PlaybackManager.PlaybackServiceCallback { diff --git a/starrysky/src/main/java/com/lzx/starrysky/manager/MediaSessionConnection.java b/starrysky/src/main/java/com/lzx/starrysky/manager/MediaSessionConnection.java index bb803ca0..001291c3 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/manager/MediaSessionConnection.java +++ b/starrysky/src/main/java/com/lzx/starrysky/manager/MediaSessionConnection.java @@ -3,6 +3,7 @@ import android.content.ComponentName; import android.content.Context; import android.os.RemoteException; +import android.support.annotation.NonNull; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaControllerCompat; @@ -16,7 +17,6 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; -import androidx.annotation.NonNull; /** * 与服务端连接的管理类 diff --git a/starrysky/src/main/java/com/lzx/starrysky/manager/MusicManager.java b/starrysky/src/main/java/com/lzx/starrysky/manager/MusicManager.java index 76517b14..d1aa6248 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/manager/MusicManager.java +++ b/starrysky/src/main/java/com/lzx/starrysky/manager/MusicManager.java @@ -6,12 +6,10 @@ import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; -import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.PlaybackStateCompat; import android.text.TextUtils; -import com.lzx.starrysky.MusicService; import com.lzx.starrysky.model.MusicProvider; import com.lzx.starrysky.model.SongInfo; import com.lzx.starrysky.notification.NotificationConstructor; @@ -22,8 +20,6 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; -import androidx.annotation.NonNull; - /** * 用户操作管理类 */ @@ -90,13 +86,14 @@ public void playMusicById(String songId) { * 根据 SongInfo 播放,实际也是根据 songId 播放 */ public void playMusicByInfo(SongInfo info) { - List songInfos = MusicProvider.getInstance().getSongInfos(); - if (!songInfos.contains(info)) { - songInfos.add(info); - int index = songInfos.indexOf(info); - playMusic(songInfos, index, true); - } else { - playMusicById(info.getSongId()); + MediaSessionConnection connection = MediaSessionConnection.getInstance(sContext); + if (connection.isConnected()) { + boolean isAdd = MusicProvider.getInstance().addSongInfo(info); + if (isAdd) { + MusicProvider.getInstance().updateMediadata(connection, info.getSongId()); + } else { + connection.getTransportControls().playFromMediaId(info.getSongId(), null); + } } } @@ -106,13 +103,10 @@ public void playMusicByInfo(SongInfo info) { public void playMusicByIndex(int index) { MediaSessionConnection connection = MediaSessionConnection.getInstance(sContext); if (connection.isConnected()) { - connection.subscribe(MusicService.UPDATE_PARENT_ID, new MediaBrowserCompat.SubscriptionCallback() { - @Override - public void onChildrenLoaded(@NonNull String parentId, @NonNull List children) { - super.onChildrenLoaded(parentId, children); - connection.getTransportControls().playFromMediaId(children.get(index).getMediaId(), null); - } - }); + List list = MusicProvider.getInstance().getSongInfos(); + if (list != null && index >= 0 && index < list.size()) { + connection.getTransportControls().playFromMediaId(list.get(index).getSongId(), null); + } } } @@ -132,13 +126,9 @@ public void playMusic(List songInfos, int index, boolean isResetPlayLi MusicProvider.getInstance().nonInitialized(); MusicProvider.getInstance().setSongInfos(songInfos); } - connection.subscribe(MusicService.UPDATE_PARENT_ID, new MediaBrowserCompat.SubscriptionCallback() { - @Override - public void onChildrenLoaded(@NonNull String parentId, @NonNull List children) { - super.onChildrenLoaded(parentId, children); - connection.getTransportControls().playFromMediaId(songInfos.get(index).getSongId(), null); - } - }); + if (songInfos != null && index >= 0 && index < songInfos.size()) { + MusicProvider.getInstance().updateMediadata(connection, songInfos.get(index).getSongId()); + } } } @@ -313,12 +303,7 @@ public void updatePlayList(List songInfos) { if (connection.isConnected()) { MusicProvider.getInstance().nonInitialized(); MusicProvider.getInstance().setSongInfos(songInfos); - connection.subscribe(MusicService.UPDATE_PARENT_ID, new MediaBrowserCompat.SubscriptionCallback() { - @Override - public void onChildrenLoaded(@NonNull String parentId, @NonNull List children) { - super.onChildrenLoaded(parentId, children); - } - }); + MusicProvider.getInstance().updateMediadata(connection, null); } } diff --git a/starrysky/src/main/java/com/lzx/starrysky/model/MusicProvider.java b/starrysky/src/main/java/com/lzx/starrysky/model/MusicProvider.java index 1bba3ccd..4f930441 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/model/MusicProvider.java +++ b/starrysky/src/main/java/com/lzx/starrysky/model/MusicProvider.java @@ -6,6 +6,7 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.media.MediaBrowserCompat; import android.support.v4.media.MediaMetadataCompat; import android.text.TextUtils; @@ -17,7 +18,9 @@ import com.google.android.exoplayer2.source.ExtractorMediaSource; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.upstream.DataSource; +import com.lzx.starrysky.MusicService; import com.lzx.starrysky.R; +import com.lzx.starrysky.manager.MediaSessionConnection; import java.util.ArrayList; import java.util.Collections; @@ -26,10 +29,11 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; + /** * 媒体信息提供类 */ -public class MusicProvider { +public class MusicProvider { private List mSongInfos; private List metadatas; @@ -54,7 +58,7 @@ private MusicProvider() { } /** - * 获取原始的List + * 获取原始的List#SongInfo */ public List getSongInfos() { return mSongInfos; @@ -67,12 +71,21 @@ public void setSongInfos(List songInfos) { mSongInfos = songInfos; } + public boolean addSongInfo(SongInfo songInfo) { + if (!mSongInfos.contains(songInfo)) { + mSongInfos.add(songInfo); + return true; + } else { + return false; + } + } + public List getMetadatas() { return metadatas; } /** - * 获取 List 用于 onLoadChildren 回调 + * 获取 List#MediaBrowserCompat.MediaItem 用于 onLoadChildren 回调 */ public List getChildrenResult(String mediaId) { List mediaItems = new ArrayList<>(); @@ -112,6 +125,19 @@ public MediaMetadataCompat getMusic(String songId) { return music; } + public void updateMediadata(MediaSessionConnection connection, String songId) { + nonInitialized(); + connection.subscribe(MusicService.UPDATE_PARENT_ID, new MediaBrowserCompat.SubscriptionCallback() { + @Override + public void onChildrenLoaded(@NonNull String parentId, @NonNull List children) { + super.onChildrenLoaded(parentId, children); + if (!TextUtils.isEmpty(songId)) { + connection.getTransportControls().playFromMediaId(songId, null); + } + } + }); + } + /** * 异步加载给metadatasById和metadatas赋值 */ @@ -140,7 +166,7 @@ public void nonInitialized() { } /** - * 加载List的异步任务类 + * 加载 List#MediaMetadataCompat 的异步任务类 */ public static class UpdateCatalogTask extends AsyncTask> { @@ -243,7 +269,7 @@ private synchronized static List toMediaMetadata(Context co } /** - * List 转 ConcatenatingMediaSource + * List#MediaMetadataCompat 转 ConcatenatingMediaSource */ public ConcatenatingMediaSource toMediaSource(DataSource.Factory dataSourceFactory) { ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource(); diff --git a/starrysky/src/main/java/com/lzx/starrysky/model/SongInfo.java b/starrysky/src/main/java/com/lzx/starrysky/model/SongInfo.java index e3b7f3f3..61f7e062 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/model/SongInfo.java +++ b/starrysky/src/main/java/com/lzx/starrysky/model/SongInfo.java @@ -3,10 +3,10 @@ import android.graphics.Bitmap; import android.os.Parcel; import android.os.Parcelable; +import android.support.annotation.Nullable; import java.util.Objects; -import androidx.annotation.Nullable; /** * 面向用户的音频信息 diff --git a/starrysky/src/main/java/com/lzx/starrysky/notification/CustomNotification.java b/starrysky/src/main/java/com/lzx/starrysky/notification/CustomNotification.java index fe25b082..4bf285ad 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/notification/CustomNotification.java +++ b/starrysky/src/main/java/com/lzx/starrysky/notification/CustomNotification.java @@ -12,6 +12,7 @@ import android.graphics.Bitmap; import android.os.Build; import android.os.RemoteException; +import android.support.v4.app.NotificationCompat; import android.support.v4.media.MediaDescriptionCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaControllerCompat; @@ -31,7 +32,6 @@ import java.util.List; -import androidx.core.app.NotificationCompat; /** * 自定义通知栏 diff --git a/starrysky/src/main/java/com/lzx/starrysky/notification/SystemNotification.java b/starrysky/src/main/java/com/lzx/starrysky/notification/SystemNotification.java index 7f4b2de4..85080a41 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/notification/SystemNotification.java +++ b/starrysky/src/main/java/com/lzx/starrysky/notification/SystemNotification.java @@ -11,6 +11,7 @@ import android.graphics.Bitmap; import android.os.Build; import android.os.RemoteException; +import android.support.v4.app.NotificationCompat; import android.support.v4.media.MediaDescriptionCompat; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaControllerCompat; @@ -23,7 +24,6 @@ import com.lzx.starrysky.notification.factory.INotification; import com.lzx.starrysky.notification.utils.NotificationUtils; -import androidx.core.app.NotificationCompat; /** * 系统通知栏 @@ -206,7 +206,7 @@ private Notification createNotification() { final int playPauseButtonPosition = addActions(notificationBuilder); notificationBuilder - .setStyle(new androidx.media.app.NotificationCompat.MediaStyle() + .setStyle(new android.support.v4.media.app.NotificationCompat.MediaStyle() // show only play/pause in compact view .setShowActionsInCompactView(playPauseButtonPosition) .setShowCancelButton(true) diff --git a/starrysky/src/main/java/com/lzx/starrysky/notification/utils/NotificationColorUtils.java b/starrysky/src/main/java/com/lzx/starrysky/notification/utils/NotificationColorUtils.java index 1ac49021..efc81fb0 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/notification/utils/NotificationColorUtils.java +++ b/starrysky/src/main/java/com/lzx/starrysky/notification/utils/NotificationColorUtils.java @@ -6,6 +6,7 @@ import android.os.Build; import android.os.Handler; import android.os.Looper; +import android.support.v4.graphics.ColorUtils; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; @@ -14,7 +15,6 @@ import java.util.concurrent.CountDownLatch; -import androidx.core.graphics.ColorUtils; /** * 通知栏颜色工具类,主要是判断通知栏主题是白色还是黑色 diff --git a/starrysky/src/main/java/com/lzx/starrysky/notification/utils/NotificationUtils.java b/starrysky/src/main/java/com/lzx/starrysky/notification/utils/NotificationUtils.java index 0239e79f..08da857b 100644 --- a/starrysky/src/main/java/com/lzx/starrysky/notification/utils/NotificationUtils.java +++ b/starrysky/src/main/java/com/lzx/starrysky/notification/utils/NotificationUtils.java @@ -7,6 +7,7 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; +import android.support.annotation.RequiresApi; import android.text.TextUtils; import com.lzx.starrysky.MusicService; @@ -18,7 +19,6 @@ import java.util.List; -import androidx.annotation.RequiresApi; /** * 通知栏工具类,主要提供一些公共的方法 diff --git a/starrysky/src/main/java/com/lzx/starrysky/playback/ExoPlayback.java b/starrysky/src/main/java/com/lzx/starrysky/playback/ExoPlayback.java index 6e0a0b98..f0b4fb7b 100755 --- a/starrysky/src/main/java/com/lzx/starrysky/playback/ExoPlayback.java +++ b/starrysky/src/main/java/com/lzx/starrysky/playback/ExoPlayback.java @@ -17,6 +17,7 @@ import android.content.Context; import android.net.Uri; +import android.support.annotation.Nullable; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.PlaybackStateCompat; import android.text.TextUtils; @@ -57,8 +58,6 @@ import java.util.List; -import androidx.annotation.Nullable; - import static android.support.v4.media.session.MediaSessionCompat.QueueItem; import static com.google.android.exoplayer2.C.CONTENT_TYPE_MUSIC; import static com.google.android.exoplayer2.C.USAGE_MEDIA; diff --git a/starrysky/src/main/java/com/lzx/starrysky/playback/PlaybackManager.java b/starrysky/src/main/java/com/lzx/starrysky/playback/PlaybackManager.java index 3f10f28d..a41ad99c 100755 --- a/starrysky/src/main/java/com/lzx/starrysky/playback/PlaybackManager.java +++ b/starrysky/src/main/java/com/lzx/starrysky/playback/PlaybackManager.java @@ -20,13 +20,13 @@ import android.os.Bundle; import android.os.ResultReceiver; import android.os.SystemClock; +import android.support.annotation.NonNull; import android.support.v4.media.session.MediaSessionCompat; import android.support.v4.media.session.PlaybackStateCompat; import com.lzx.starrysky.notification.factory.INotification; import com.lzx.starrysky.notification.factory.NotificationFactory; -import androidx.annotation.NonNull; /** diff --git a/starrysky/src/main/java/com/lzx/starrysky/playback/QueueHelper.java b/starrysky/src/main/java/com/lzx/starrysky/playback/QueueHelper.java index 75b2acce..bdaecefb 100755 --- a/starrysky/src/main/java/com/lzx/starrysky/playback/QueueHelper.java +++ b/starrysky/src/main/java/com/lzx/starrysky/playback/QueueHelper.java @@ -22,7 +22,6 @@ import android.support.v4.media.session.MediaSessionCompat; import android.text.TextUtils; - import com.lzx.starrysky.model.MusicProvider; import java.util.ArrayList; @@ -88,7 +87,7 @@ private static List convertToQueue(List + * 获取乱序的 List#MediaSessionCompat.QueueItem */ public static List getRandomQueue(MusicProvider musicProvider) { List result = new ArrayList<>(); diff --git a/starrysky/src/main/java/com/lzx/starrysky/playback/QueueManager.java b/starrysky/src/main/java/com/lzx/starrysky/playback/QueueManager.java index 647dda8c..3ca0e6ae 100755 --- a/starrysky/src/main/java/com/lzx/starrysky/playback/QueueManager.java +++ b/starrysky/src/main/java/com/lzx/starrysky/playback/QueueManager.java @@ -16,6 +16,7 @@ package com.lzx.starrysky.playback; +import android.support.annotation.NonNull; import android.support.v4.media.MediaMetadataCompat; import android.support.v4.media.session.MediaSessionCompat; @@ -25,7 +26,6 @@ import java.util.Collections; import java.util.List; -import androidx.annotation.NonNull; public class QueueManager {