Skip to content

Commit

Permalink
update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
EspoirX committed Jan 28, 2019
1 parent ed9ab64 commit 94e9af1
Show file tree
Hide file tree
Showing 19 changed files with 114 additions and 76 deletions.
21 changes: 18 additions & 3 deletions README.md
@@ -1,8 +1,8 @@
# A Powerful and Streamline MusicLibrary

<a href="http://developer.android.com/index.html"><img src="https://img.shields.io/badge/platform-android-green.svg"></a>
<a href="https://bintray.com/lizixian/MusicLibrary/MusicLibrary/_latestVersion"><img src="https://api.bintray.com/packages/lizixian/MusicLibrary/MusicLibrary/images/download.svg"></a>
<a href="http://choosealicense.com/licenses/mit/"><img src="https://img.shields.io/badge/license-MIT-green.svg"></a>
[ ![](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/)

<img src="art/logo.jpg"/>

Expand Down Expand Up @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion app/build.gradle
Expand Up @@ -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')
}
}
2 changes: 1 addition & 1 deletion app/src/main/java/com/lzx/musiclib/MainActivity.java
Expand Up @@ -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;
Expand All @@ -15,7 +16,6 @@
import java.util.ArrayList;
import java.util.List;

import androidx.appcompat.app.AppCompatActivity;


public class MainActivity extends AppCompatActivity {
Expand Down
25 changes: 12 additions & 13 deletions build.gradle
Expand Up @@ -2,29 +2,28 @@

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'
}
}

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"
Expand Down
2 changes: 0 additions & 2 deletions gradle.properties
Expand Up @@ -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.
Expand Down
24 changes: 20 additions & 4 deletions starrysky/build.gradle
@@ -1,13 +1,14 @@
apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release'

android {
compileSdkVersion 28

defaultConfig {
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
versionCode 200
versionName "2.0.0"

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
Expand All @@ -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')
Expand Down
7 changes: 4 additions & 3 deletions starrysky/src/main/java/com/lzx/starrysky/MusicService.java
Expand Up @@ -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;
Expand All @@ -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 {

Expand Down
Expand Up @@ -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;
Expand All @@ -16,7 +17,6 @@
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import androidx.annotation.NonNull;

/**
* 与服务端连接的管理类
Expand Down
47 changes: 16 additions & 31 deletions starrysky/src/main/java/com/lzx/starrysky/manager/MusicManager.java
Expand Up @@ -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;
Expand All @@ -22,8 +20,6 @@
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

import androidx.annotation.NonNull;

/**
* 用户操作管理类
*/
Expand Down Expand Up @@ -90,13 +86,14 @@ public void playMusicById(String songId) {
* 根据 SongInfo 播放,实际也是根据 songId 播放
*/
public void playMusicByInfo(SongInfo info) {
List<SongInfo> 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);
}
}
}

Expand All @@ -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<MediaBrowserCompat.MediaItem> children) {
super.onChildrenLoaded(parentId, children);
connection.getTransportControls().playFromMediaId(children.get(index).getMediaId(), null);
}
});
List<SongInfo> list = MusicProvider.getInstance().getSongInfos();
if (list != null && index >= 0 && index < list.size()) {
connection.getTransportControls().playFromMediaId(list.get(index).getSongId(), null);
}
}
}

Expand All @@ -132,13 +126,9 @@ public void playMusic(List<SongInfo> 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<MediaBrowserCompat.MediaItem> 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());
}
}
}

Expand Down Expand Up @@ -313,12 +303,7 @@ public void updatePlayList(List<SongInfo> 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<MediaBrowserCompat.MediaItem> children) {
super.onChildrenLoaded(parentId, children);
}
});
MusicProvider.getInstance().updateMediadata(connection, null);
}
}

Expand Down
36 changes: 31 additions & 5 deletions starrysky/src/main/java/com/lzx/starrysky/model/MusicProvider.java
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -26,10 +29,11 @@
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;


/**
* 媒体信息提供类
*/
public class MusicProvider {
public class MusicProvider {

private List<SongInfo> mSongInfos;
private List<MediaMetadataCompat> metadatas;
Expand All @@ -54,7 +58,7 @@ private MusicProvider() {
}

/**
* 获取原始的List<SongInfo>
* 获取原始的List#SongInfo
*/
public List<SongInfo> getSongInfos() {
return mSongInfos;
Expand All @@ -67,12 +71,21 @@ public void setSongInfos(List<SongInfo> songInfos) {
mSongInfos = songInfos;
}

public boolean addSongInfo(SongInfo songInfo) {
if (!mSongInfos.contains(songInfo)) {
mSongInfos.add(songInfo);
return true;
} else {
return false;
}
}

public List<MediaMetadataCompat> getMetadatas() {
return metadatas;
}

/**
* 获取 List<MediaBrowserCompat.MediaItem> 用于 onLoadChildren 回调
* 获取 List#MediaBrowserCompat.MediaItem 用于 onLoadChildren 回调
*/
public List<MediaBrowserCompat.MediaItem> getChildrenResult(String mediaId) {
List<MediaBrowserCompat.MediaItem> mediaItems = new ArrayList<>();
Expand Down Expand Up @@ -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<MediaBrowserCompat.MediaItem> children) {
super.onChildrenLoaded(parentId, children);
if (!TextUtils.isEmpty(songId)) {
connection.getTransportControls().playFromMediaId(songId, null);
}
}
});
}

/**
* 异步加载给metadatasById和metadatas赋值
*/
Expand Down Expand Up @@ -140,7 +166,7 @@ public void nonInitialized() {
}

/**
* 加载List<MediaMetadataCompat>的异步任务类
* 加载 List#MediaMetadataCompat 的异步任务类
*/
public static class UpdateCatalogTask extends AsyncTask<Void, Void, List<MediaMetadataCompat>> {

Expand Down Expand Up @@ -243,7 +269,7 @@ private synchronized static List<MediaMetadataCompat> toMediaMetadata(Context co
}

/**
* List<MediaMetadataCompat> 转 ConcatenatingMediaSource
* List#MediaMetadataCompat 转 ConcatenatingMediaSource
*/
public ConcatenatingMediaSource toMediaSource(DataSource.Factory dataSourceFactory) {
ConcatenatingMediaSource concatenatingMediaSource = new ConcatenatingMediaSource();
Expand Down

0 comments on commit 94e9af1

Please sign in to comment.