diff --git a/app/build.gradle b/app/build.gradle
index 908a59d..cba597e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -25,7 +25,7 @@ android {
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.2.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.0.2'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'androidx.work:work-runtime:2.4.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78504a1..3760c8e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -25,6 +25,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/yutou/nas_music_player/containers/MediaBrowserHelper.java b/app/src/main/java/com/yutou/nas_music_player/containers/MediaBrowserHelper.java
index ab632ba..4686f5c 100644
--- a/app/src/main/java/com/yutou/nas_music_player/containers/MediaBrowserHelper.java
+++ b/app/src/main/java/com/yutou/nas_music_player/containers/MediaBrowserHelper.java
@@ -4,9 +4,16 @@ import android.content.ComponentName;
import android.content.Context;
import android.os.RemoteException;
import android.support.v4.media.MediaBrowserCompat;
+import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
import com.yutou.nas_music_player.services.MusicService;
+import com.yutou.nas_music_player.views.MainActivity;
+
+import java.util.ArrayList;
+import java.util.List;
public class MediaBrowserHelper {
private MediaControllerCompat controllerCompat;
@@ -36,6 +43,10 @@ public class MediaBrowserHelper {
public MediaControllerCompat.TransportControls getTransportControls() {
return controllerCompat.getTransportControls();
}
+ private List callbacks=new ArrayList<>();
+ public void regPlayListener(MediaControllerCompat.Callback playListener) {
+ callbacks.add(playListener);
+ }
private class MediaBrowserConnectionCallback extends MediaBrowserCompat.ConnectionCallback {
@Override
@@ -57,7 +68,37 @@ public class MediaBrowserHelper {
private class MediaControllerCallback extends MediaControllerCompat.Callback {
+ @Override
+ public void onPlaybackStateChanged(PlaybackStateCompat state) {
+ super.onPlaybackStateChanged(state);
+ for (MediaControllerCompat.Callback callback : callbacks) {
+ callback.onPlaybackStateChanged(state);
+ }
+ }
+ @Override
+ public void onMetadataChanged(MediaMetadataCompat metadata) {
+ super.onMetadataChanged(metadata);
+ for (MediaControllerCompat.Callback callback : callbacks) {
+ callback.onMetadataChanged(metadata);
+ }
+ }
+
+ @Override
+ public void onSessionDestroyed() {
+ super.onSessionDestroyed();
+ for (MediaControllerCompat.Callback callback : callbacks) {
+ callback.onSessionDestroyed();
+ }
+ }
+
+ @Override
+ public void onQueueChanged(List queue) {
+ super.onQueueChanged(queue);
+ for (MediaControllerCompat.Callback callback : callbacks) {
+ callback.onQueueChanged(queue);
+ }
+ }
}
public class MediaBrowserSubscriptionCallback extends MediaBrowserCompat.SubscriptionCallback {
diff --git a/app/src/main/java/com/yutou/nas_music_player/containers/MediaNotificationManager.java b/app/src/main/java/com/yutou/nas_music_player/containers/MediaNotificationManager.java
index bb2e670..1b4f1f9 100644
--- a/app/src/main/java/com/yutou/nas_music_player/containers/MediaNotificationManager.java
+++ b/app/src/main/java/com/yutou/nas_music_player/containers/MediaNotificationManager.java
@@ -1,4 +1,154 @@
package com.yutou.nas_music_player.containers;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Build;
+import android.support.v4.media.MediaDescriptionCompat;
+import android.support.v4.media.MediaMetadataCompat;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.core.app.NotificationCompat;
+import androidx.core.graphics.drawable.IconCompat;
+import androidx.media.session.MediaButtonReceiver;
+
+import com.yutou.nas_music_player.MyApplication;
+import com.yutou.nas_music_player.R;
+import com.yutou.nas_music_player.services.MusicService;
+import com.yutou.nas_music_player.views.MainActivity;
+
public class MediaNotificationManager {
+ public static final int NOTIFICATION_ID = 412;
+ private static final String CHANNEL_ID = MyApplication.application.getPackageName() + ".music_channel";
+ private MusicService mService;
+ private NotificationCompat.Action mPlayAction;
+ private NotificationCompat.Action mPauseAction;
+ private NotificationCompat.Action mNextAction;
+ private NotificationCompat.Action mPrevAction;
+ private NotificationManager mNotificationManager;
+
+ public MediaNotificationManager(MusicService musicService) {
+ this.mService = musicService;
+ mNotificationManager =
+ (NotificationManager) mService.getSystemService(Context.NOTIFICATION_SERVICE);
+
+ mPlayAction =
+ new NotificationCompat.Action(
+ android.R.drawable.ic_media_play,
+ "播放",
+ MediaButtonReceiver.buildMediaButtonPendingIntent(
+ mService,
+ PlaybackStateCompat.ACTION_PLAY));
+ mPauseAction =
+ new NotificationCompat.Action(
+ android.R.drawable.ic_media_pause,
+ "暂停",
+ MediaButtonReceiver.buildMediaButtonPendingIntent(
+ mService,
+ PlaybackStateCompat.ACTION_PAUSE));
+ mNextAction =
+ new NotificationCompat.Action(
+ android.R.drawable.ic_media_next,
+ "下一首",
+ MediaButtonReceiver.buildMediaButtonPendingIntent(
+ mService,
+ PlaybackStateCompat.ACTION_SKIP_TO_NEXT));
+ mPrevAction =
+ new NotificationCompat.Action(
+ android.R.drawable.ic_media_previous,
+ "上一首",
+ MediaButtonReceiver.buildMediaButtonPendingIntent(
+ mService,
+ PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS));
+
+ // Cancel all notifications to handle the case where the Service was killed and
+ // restarted by the system.
+ mNotificationManager.cancelAll();
+ }
+
+ public NotificationManager getManager() {
+ return mNotificationManager;
+ }
+ public Notification getNotification(MediaMetadataCompat metadata,
+ @NonNull PlaybackStateCompat state,
+ MediaSessionCompat.Token token) {
+ boolean isPlaying = state.getState() == PlaybackStateCompat.STATE_PLAYING;
+ MediaDescriptionCompat description = metadata.getDescription();
+ NotificationCompat.Builder builder =
+ buildNotification(state, token, isPlaying, metadata);
+ return builder.build();
+ }
+
+ private NotificationCompat.Builder buildNotification(@NonNull PlaybackStateCompat state,
+ MediaSessionCompat.Token token,
+ boolean isPlaying,
+ MediaMetadataCompat metadata) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ createChannel();
+ }
+ MediaDescriptionCompat description = metadata.getDescription();
+ NotificationCompat.Builder builder = new NotificationCompat.Builder(mService, CHANNEL_ID);
+ builder.setStyle(new androidx.media.app.NotificationCompat.MediaStyle()
+ .setMediaSession(token)
+ .setShowActionsInCompactView(0,1,2)
+ .setShowCancelButton(true)
+ .setCancelButtonIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(mService,PlaybackStateCompat.ACTION_STOP))
+ );
+ builder.setColor(Color.BLUE);
+ if(metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON)!=null){
+ builder.setLargeIcon(metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON));
+ }
+ builder.setSmallIcon(R.mipmap.ic_launcher);
+ builder.setContentIntent(mService.mediaSession.getController().getSessionActivity());
+ builder.setContentTitle(description.getTitle());
+ builder.setContentText(description.getSubtitle());
+ builder.setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(
+ mService, PlaybackStateCompat.ACTION_STOP));
+ builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
+ if ((state.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS) != 0) {
+ builder.addAction(mPrevAction);
+ }
+ builder.addAction(isPlaying ? mPauseAction : mPlayAction);
+ if ((state.getActions() & PlaybackStateCompat.ACTION_SKIP_TO_NEXT) != 0) {
+ builder.addAction(mNextAction);
+ }
+ return builder;
+ }
+
+ // Does nothing on versions of Android earlier than O.
+ @RequiresApi(Build.VERSION_CODES.O)
+ private void createChannel() {
+ if (mNotificationManager.getNotificationChannel(CHANNEL_ID) == null) {
+ // The user-visible name of the channel.
+ CharSequence name = "NAS音乐播放器";
+ // The user-visible description of the channel.
+ String description = "NAS音乐播放器通知栏";
+ int importance = NotificationManager.IMPORTANCE_LOW;
+ NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, importance);
+ // Configure the notification channel.
+ mChannel.setDescription(description);
+ mChannel.enableLights(true);
+ // Sets the notification light color for notifications posted to this
+ // channel, if the device supports this feature.
+ mChannel.setLightColor(Color.RED);
+ mChannel.enableVibration(true);
+ mChannel.setVibrationPattern(
+ new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
+ mNotificationManager.createNotificationChannel(mChannel);
+ }
+ }
+ private PendingIntent createContentIntent() {
+ Intent openUI = new Intent(mService, MainActivity.class);
+ openUI.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ return PendingIntent.getActivity(
+ mService, 233, openUI, PendingIntent.FLAG_CANCEL_CURRENT);
+ }
}
diff --git a/app/src/main/java/com/yutou/nas_music_player/containers/MusicContainer.java b/app/src/main/java/com/yutou/nas_music_player/containers/MusicContainer.java
index c51811e..baf6608 100644
--- a/app/src/main/java/com/yutou/nas_music_player/containers/MusicContainer.java
+++ b/app/src/main/java/com/yutou/nas_music_player/containers/MusicContainer.java
@@ -13,6 +13,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Random;
+import static android.media.MediaMetadata.METADATA_KEY_DISPLAY_ICON;
+
public class MusicContainer {
private static MusicContainer container;
@@ -24,8 +26,23 @@ public class MusicContainer {
private MusicContainer() {
mediaPlayer = new MediaPlayer();
+ initMediaPlayer();
libs = new MusicLibs();
}
+ private void initMediaPlayer(){
+ mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+ @Override
+ public void onCompletion(MediaPlayer mp) {
+
+ }
+ });
+ }
+ public MediaPlayer getMediaPlayer(){
+ return mediaPlayer;
+ }
+ public MusicData getNowPlayData(){
+ return nowPlayData;
+ }
public static MusicContainer getInstance() {
if (container == null) {
@@ -44,8 +61,7 @@ public class MusicContainer {
}
public void play(MusicData data) {
- String url = NetworkTool.NetworkAPI.HOME + NetworkTool.NetworkAPI.MUSIC_PLAY
- + "?random=false&token=" + NetworkTool.NetworkAPI.HTTP_KEY + "&filePath=" + data.getPlayFile();
+ String url =data.getPlayUrl();
try {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
@@ -76,6 +92,10 @@ public class MusicContainer {
builder.putLong(MediaMetadataCompat.METADATA_KEY_YEAR, Long.parseLong(data.getYear()));
builder.putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, Long.parseLong(data.getTrack()));
builder.putLong(MediaMetadataCompat.METADATA_KEY_DISC_NUMBER, Long.parseLong(data.getDisc_no()));
+ builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION,3*60*1000);
+ if(data.getImg()!=null){
+ builder.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON,data.getImg());
+ }
return builder.build();
}
diff --git a/app/src/main/java/com/yutou/nas_music_player/containers/MusicData.java b/app/src/main/java/com/yutou/nas_music_player/containers/MusicData.java
index dc12177..e7c3c58 100644
--- a/app/src/main/java/com/yutou/nas_music_player/containers/MusicData.java
+++ b/app/src/main/java/com/yutou/nas_music_player/containers/MusicData.java
@@ -1,8 +1,13 @@
package com.yutou.nas_music_player.containers;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.util.Base64;
+import com.alibaba.fastjson.JSONObject;
+import com.yutou.nas_music_player.Interfaces.NetworkInterface;
+import com.yutou.nas_music_player.tools.NetworkTool;
import com.yutou.nas_music_player.tools.StringUtil;
public class MusicData {
@@ -18,6 +23,7 @@ public class MusicData {
private String lastDir;//上一个文件夹
private String file;
private boolean isDir = false;
+ private Bitmap img;
public MusicData() {
}
@@ -55,8 +61,8 @@ public class MusicData {
}
public String getYear() {
- if(StringUtil.isEmpty(year)){
- year="8888";
+ if (StringUtil.isEmpty(year)) {
+ year = "8888";
}
return year;
}
@@ -66,7 +72,7 @@ public class MusicData {
}
public String getTrack() {
- if(StringUtil.isEmpty(track)){
+ if (StringUtil.isEmpty(track)) {
return "0";
}
return track;
@@ -77,7 +83,7 @@ public class MusicData {
}
public String getDisc_no() {
- if(StringUtil.isEmpty(disc_no)){
+ if (StringUtil.isEmpty(disc_no)) {
return "0";
}
return disc_no;
@@ -123,10 +129,47 @@ public class MusicData {
public String getFile() {
return file;
}
+
public void setFile(String file) {
this.file = file;
}
- public String getPlayFile(){
- return new String(Base64.encode(file.getBytes(),Base64.DEFAULT));
+
+ public String getPlayFileBase64() {
+ return new String(Base64.encode(file.getBytes(), Base64.DEFAULT));
+ }
+
+ public String getPlayUrl() {
+ return NetworkTool.NetworkAPI.HOME + NetworkTool.NetworkAPI.MUSIC_PLAY
+ + "?random=false&token=" + NetworkTool.NetworkAPI.HTTP_KEY + "&filePath=" + getPlayFileBase64();
+ }
+
+ private boolean isDownloadImg = false;
+
+ public Bitmap getImg() {
+ if (img != null) {
+ return img;
+ }
+ if (isDownloadImg) {
+ return null;
+ }
+ isDownloadImg = true;
+ JSONObject json = new JSONObject();
+ json.put("fileName", getPlayFileBase64());
+ NetworkTool.init().httpGet(NetworkTool.NetworkAPI.MUSIC_IMAGE, json, new NetworkInterface() {
+ @Override
+ public void httpGetData(Object data, int state) {
+ JSONObject json = JSONObject.parseObject(data.toString());
+ if (json.getInteger("code") == 0) {
+ byte[] bytes = json.getBytes("data");
+ img = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
+ }
+ }
+
+ @Override
+ public void httpError(Exception e) {
+ isDownloadImg = false;
+ }
+ });
+ return img;
}
}
diff --git a/app/src/main/java/com/yutou/nas_music_player/services/MusicService.java b/app/src/main/java/com/yutou/nas_music_player/services/MusicService.java
index 2bac270..8ca59a9 100644
--- a/app/src/main/java/com/yutou/nas_music_player/services/MusicService.java
+++ b/app/src/main/java/com/yutou/nas_music_player/services/MusicService.java
@@ -1,9 +1,11 @@
package com.yutou.nas_music_player.services;
+import android.app.Notification;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
+import android.os.SystemClock;
import android.support.v4.media.MediaBrowserCompat;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaSessionCompat;
@@ -13,29 +15,41 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.media.MediaBrowserServiceCompat;
+import com.yutou.nas_music_player.containers.MediaNotificationManager;
import com.yutou.nas_music_player.containers.MusicContainer;
import com.yutou.nas_music_player.containers.MusicData;
import com.yutou.nas_music_player.tools.AppData;
import java.util.ArrayList;
import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
public class MusicService extends MediaBrowserServiceCompat {
- private MediaSessionCompat mediaSession;
+ public MediaSessionCompat mediaSession;
private PlaybackStateCompat.Builder stateBuilder;
+ private MediaNotificationManager notificationManager;
+ private int mState = PlaybackStateCompat.STATE_PLAYING;
+
+ private static final long MEDIA_SESSION_ACTIONS = PlaybackStateCompat.ACTION_PLAY
+ | PlaybackStateCompat.ACTION_PAUSE
+ | PlaybackStateCompat.ACTION_PLAY_PAUSE
+ | PlaybackStateCompat.ACTION_SKIP_TO_NEXT
+ | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS
+ | PlaybackStateCompat.ACTION_STOP
+ | PlaybackStateCompat.ACTION_SEEK_TO;
@Override
public void onCreate() {
super.onCreate();
+ notificationManager = new MediaNotificationManager(this);
mediaSession = new MediaSessionCompat(getApplicationContext(), "MEDIA_LOG");
mediaSession.setFlags(
MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
stateBuilder = new PlaybackStateCompat.Builder()
- .setActions(
- PlaybackStateCompat.ACTION_PLAY |
- PlaybackStateCompat.ACTION_PLAY_PAUSE);
+ .setActions(MEDIA_SESSION_ACTIONS);
mediaSession.setPlaybackState(stateBuilder.build());
mediaSession.setCallback(new MediaSessionCallback());
setSessionToken(mediaSession.getSessionToken());
@@ -50,10 +64,10 @@ public class MusicService extends MediaBrowserServiceCompat {
@Override
public void onLoadChildren(@NonNull String parentId, @NonNull Result> result) {
List mediaItems = new ArrayList<>();
- MediaMetadataCompat compat=MusicContainer.getInstance().getNowPlayMetadataCompat();
+ MediaMetadataCompat compat = MusicContainer.getInstance().getNowPlayMetadataCompat();
System.out.println(compat);
- if(compat!=null){
- MediaBrowserCompat.MediaItem mediaItem=new MediaBrowserCompat.MediaItem(compat.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE);
+ if (compat != null) {
+ MediaBrowserCompat.MediaItem mediaItem = new MediaBrowserCompat.MediaItem(compat.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE);
mediaItems.add(mediaItem);
}
result.sendResult(mediaItems);
@@ -64,15 +78,77 @@ public class MusicService extends MediaBrowserServiceCompat {
public void onPlay() {
super.onPlay();
System.out.println("接收到播放指令");
- MediaMetadataCompat metadataCompat=MusicContainer.getInstance().getNowPlayMetadataCompat();
+ MediaMetadataCompat metadataCompat = MusicContainer.getInstance().getNowPlayMetadataCompat();
mediaSession.setMetadata(metadataCompat);
mediaSession.setActive(true);
+ Notification notification = notificationManager.getNotification(metadataCompat, builderState(0).build(), getSessionToken());
+ startForeground(MediaNotificationManager.NOTIFICATION_ID, notification);
+ new Timer().schedule(new TimerTask() {
+ long position = 0;
+
+ @Override
+ public void run() {
+ position += 1000;
+ MusicData data=MusicContainer.getInstance().getNowPlayData();
+ data.setTitle(position+"");
+ MediaMetadataCompat metadataCompat = MusicContainer.getInstance().getMetadataCompat(data);
+ Notification notification = notificationManager.getNotification(metadataCompat, builderState(position).build(), getSessionToken());
+ notificationManager.getManager()
+ .notify(MediaNotificationManager.NOTIFICATION_ID, notification);
+ mediaSession.setPlaybackState(new PlaybackStateCompat.Builder()
+ .setActions(MEDIA_SESSION_ACTIONS)
+ .setState(PlaybackStateCompat.STATE_PLAYING,position,1.0f,SystemClock.elapsedRealtime()).build());
+ }
+ }, 0, 1000);
}
@Override
public void onPause() {
super.onPause();
}
+
+ @Override
+ public void onSeekTo(long pos) {
+ super.onSeekTo(pos);
+ }
+
+ public PlaybackStateCompat.Builder builderState(long position) {
+ PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder();
+ stateBuilder.setActions(getAvailableActions());
+ stateBuilder.setState(mState,
+ position,
+ 1.0f,
+ SystemClock.elapsedRealtime());
+ return stateBuilder;
+ }
+
+ private long getAvailableActions() {
+ long actions = PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID
+ | PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH
+ | PlaybackStateCompat.ACTION_SKIP_TO_NEXT
+ | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS;
+ switch (mState) {
+ case PlaybackStateCompat.STATE_STOPPED:
+ actions |= PlaybackStateCompat.ACTION_PLAY
+ | PlaybackStateCompat.ACTION_PAUSE;
+ break;
+ case PlaybackStateCompat.STATE_PLAYING:
+ actions |= PlaybackStateCompat.ACTION_STOP
+ | PlaybackStateCompat.ACTION_PAUSE
+ | PlaybackStateCompat.ACTION_SEEK_TO;
+ break;
+ case PlaybackStateCompat.STATE_PAUSED:
+ actions |= PlaybackStateCompat.ACTION_PLAY
+ | PlaybackStateCompat.ACTION_STOP;
+ break;
+ default:
+ actions |= PlaybackStateCompat.ACTION_PLAY
+ | PlaybackStateCompat.ACTION_PLAY_PAUSE
+ | PlaybackStateCompat.ACTION_STOP
+ | PlaybackStateCompat.ACTION_PAUSE;
+ }
+ return actions;
+ }
}
}
diff --git a/app/src/main/java/com/yutou/nas_music_player/views/MainActivity.java b/app/src/main/java/com/yutou/nas_music_player/views/MainActivity.java
index 87d6778..2b53ebc 100644
--- a/app/src/main/java/com/yutou/nas_music_player/views/MainActivity.java
+++ b/app/src/main/java/com/yutou/nas_music_player/views/MainActivity.java
@@ -3,37 +3,80 @@ package com.yutou.nas_music_player.views;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
+import android.support.v4.media.MediaMetadataCompat;
+import android.support.v4.media.session.MediaControllerCompat;
+import android.support.v4.media.session.MediaSessionCompat;
+import android.support.v4.media.session.PlaybackStateCompat;
import android.view.View;
import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.MediaController;
import com.yutou.nas_music_player.R;
import com.yutou.nas_music_player.containers.MediaBrowserHelper;
import com.yutou.nas_music_player.containers.MusicContainer;
+import java.util.List;
+
public class MainActivity extends AppCompatActivity {
- private ImageButton play,previous,next;
+ private ImageButton play, previous, next;
private MediaBrowserHelper browserHelper;
+ private ImageView imageView2;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MusicContainer.getInstance();
- play=findViewById(R.id.play);
- next=findViewById(R.id.next);
+ play = findViewById(R.id.play);
+ next = findViewById(R.id.next);
+ previous = findViewById(R.id.previous);
+ imageView2 = findViewById(R.id.imageView2);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- browserHelper=new MediaBrowserHelper(MainActivity.this);
+
}
});
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- browserHelper.getTransportControls().play();
+
+ }
+ });
+ previous.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
}
});
- // browserHelper=new MediaBrowserHelper(this);
+ browserHelper = new MediaBrowserHelper(this);
+ browserHelper.regPlayListener(new PlayListener());
+ }
+ private class PlayListener extends MediaControllerCompat.Callback {
+ @Override
+ public void onPlaybackStateChanged(PlaybackStateCompat state) {
+ super.onPlaybackStateChanged(state);
+ }
+
+ @Override
+ public void onMetadataChanged(MediaMetadataCompat metadata) {
+ super.onMetadataChanged(metadata);
+ if(metadata!=null){
+ imageView2.setImageBitmap(metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON));
+ }
+ }
+
+ @Override
+ public void onSessionDestroyed() {
+ super.onSessionDestroyed();
+ }
+
+ @Override
+ public void onQueueChanged(List queue) {
+ super.onQueueChanged(queue);
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 1525f7f..d623804 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -31,10 +31,11 @@
+
+
+
+
+
+
+
\ No newline at end of file