From 907b52a7001dc4f4c8df9577130391baec1b18bc Mon Sep 17 00:00:00 2001 From: MUQING <1966944300@qq.com> Date: Sun, 31 Dec 2023 19:02:57 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E6=90=9C=E7=B4=A2,?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E8=8B=A5=E5=B9=B2=E9=80=9A=E7=9F=A5?= =?UTF-8?q?=E6=A0=8FBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/debug/output-metadata.json | 4 +- app/src/main/AndroidManifest.xml | 5 +- app/src/main/java/com/muqingbfq/MP3.java | 6 ++ .../main/java/com/muqingbfq/MediaPlayer.java | 18 ++-- .../java/com/muqingbfq/{xm.java => XM.java} | 6 +- .../java/com/muqingbfq/activity_search.java | 85 ++++++++++--------- .../com/muqingbfq/api/FileDownloader.java | 20 ++--- .../main/java/com/muqingbfq/api/resource.java | 16 ++-- app/src/main/java/com/muqingbfq/api/url.java | 4 - app/src/main/java/com/muqingbfq/bfq.java | 6 +- app/src/main/java/com/muqingbfq/bfqkz.java | 70 +++++++-------- .../java/com/muqingbfq/fragment/Media.java | 5 +- .../java/com/muqingbfq/fragment/bfq_db.java | 4 - .../main/java/com/muqingbfq/fragment/gd.java | 22 ++--- .../com/muqingbfq/fragment/gd_adapter.java | 4 +- .../main/java/com/muqingbfq/fragment/mp3.java | 1 - .../java/com/muqingbfq/fragment/search.java | 8 +- .../java/com/muqingbfq/fragment/wode.java | 6 +- app/src/main/java/com/muqingbfq/home.java | 9 +- .../main/java/com/muqingbfq/list/yylb.java | 21 ----- .../muqingbfq/mq/FloatingLyricsService.java | 6 +- .../mq/NotificationManagerCompat.java | 70 ++++++++------- app/src/main/java/com/muqingbfq/mq/wl.java | 6 +- .../main/java/com/muqingbfq/view/LrcView.java | 10 +++ app/src/main/res/layout/activity_search.xml | 3 +- app/src/main/res/layout/float_lrcview.xml | 1 - app/src/main/res/layout/list_gd_b.xml | 3 +- 27 files changed, 210 insertions(+), 209 deletions(-) rename app/src/main/java/com/muqingbfq/{xm.java => XM.java} (66%) diff --git a/app/debug/output-metadata.json b/app/debug/output-metadata.json index 73f4637..222f507 100644 --- a/app/debug/output-metadata.json +++ b/app/debug/output-metadata.json @@ -12,8 +12,8 @@ "filters": [], "attributes": [], "versionCode": 1, - "versionName": "1.7.8", - "outputFile": "Cloud_music-debug-v1.7.8.apk" + "versionName": "1.8.0", + "outputFile": "Cloud_music-debug-v1.8.0.apk" } ], "elementType": "File" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5ccfa37..302517c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -24,7 +24,6 @@ - + android:exported="true" + tools:ignore="ExportedService"> + diff --git a/app/src/main/java/com/muqingbfq/MP3.java b/app/src/main/java/com/muqingbfq/MP3.java index 1bf0f65..45a1749 100644 --- a/app/src/main/java/com/muqingbfq/MP3.java +++ b/app/src/main/java/com/muqingbfq/MP3.java @@ -1,5 +1,11 @@ package com.muqingbfq; +import static android.support.v4.media.session.MediaSessionCompat.*; + +import android.support.v4.media.session.MediaSessionCompat; + import java.util.Objects; +import java.util.Queue; + public class MP3 { public String id, name, zz; // 音乐的贴图 diff --git a/app/src/main/java/com/muqingbfq/MediaPlayer.java b/app/src/main/java/com/muqingbfq/MediaPlayer.java index cdcbfa3..2f1eda9 100644 --- a/app/src/main/java/com/muqingbfq/MediaPlayer.java +++ b/app/src/main/java/com/muqingbfq/MediaPlayer.java @@ -138,7 +138,8 @@ public class MediaPlayer extends android.media.MediaPlayer { .listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, - @NonNull Target target, boolean isFirstResource) { + @NonNull Target target, + boolean isFirstResource) { bfq.bitmap = null; try { Mp3File mp3file = new Mp3File(wj.mp3 + bfqkz.xm.id); @@ -151,15 +152,22 @@ public class MediaPlayer extends android.media.MediaPlayer { } catch (Exception a) { gj.sc("yc:"+a); } - bfqkz.notify.setBitmap(); + if (bfqkz.notify != null) { + bfqkz.notify.tzl(); + } + Media.setImageBitmap(); return false; } @Override public boolean onResourceReady(@NonNull Bitmap bitmap, @NonNull Object model, Target target, - @NonNull DataSource dataSource, boolean isFirstResource) { + @NonNull DataSource dataSource, + boolean isFirstResource) { bfq.bitmap = bitmap; - bfqkz.notify.setBitmap(); + if (bfqkz.notify != null) { + bfqkz.notify.tzl(); + } + Media.setImageBitmap(); return false; } }) @@ -167,8 +175,8 @@ public class MediaPlayer extends android.media.MediaPlayer { } @SuppressLint("NotifyDataSetChanged") public void bfui() { - setTX(); String name = xm.name, zz = bfqkz.xm.zz; + setTX(); if (bfq.view != null) { Media.setProgress(0); bfq.setname(name); diff --git a/app/src/main/java/com/muqingbfq/xm.java b/app/src/main/java/com/muqingbfq/XM.java similarity index 66% rename from app/src/main/java/com/muqingbfq/xm.java rename to app/src/main/java/com/muqingbfq/XM.java index 6d3133c..6f8c74e 100644 --- a/app/src/main/java/com/muqingbfq/xm.java +++ b/app/src/main/java/com/muqingbfq/XM.java @@ -1,14 +1,14 @@ package com.muqingbfq; -public class xm { +public class XM { public String id, name; public Object picurl; - public xm(String id, String name, String picurl) { + public XM(String id, String name, String picurl) { this.id = id; this.name = name; this.picurl = picurl; } - public xm(String id, String name, int picurl) { + public XM(String id, String name, int picurl) { this.id = id; this.name = name; this.picurl = picurl; diff --git a/app/src/main/java/com/muqingbfq/activity_search.java b/app/src/main/java/com/muqingbfq/activity_search.java index 7ba8561..5548035 100644 --- a/app/src/main/java/com/muqingbfq/activity_search.java +++ b/app/src/main/java/com/muqingbfq/activity_search.java @@ -25,6 +25,8 @@ import com.google.android.flexbox.FlexDirection; import com.google.android.flexbox.FlexWrap; import com.google.android.flexbox.FlexboxLayoutManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.muqingbfq.databinding.ActivitySearchBinding; import com.muqingbfq.fragment.search; import com.muqingbfq.mq.FragmentActivity; @@ -33,7 +35,6 @@ import com.muqingbfq.mq.wj; import com.muqingbfq.mq.wl; import org.json.JSONArray; -import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; @@ -42,28 +43,25 @@ import java.util.List; public class activity_search extends FragmentActivity { private EditText editText; private ArrayAdapter adapter; - private SearchRecordAdapter recordAdapter; - private JSONObject json = new JSONObject(); - private final List json_list = new ArrayList<>(); + private List json_list = new ArrayList<>(); private final List list = new ArrayList<>(); ListView listPopupWindow; - ActivitySearchBinding inflate; + ActivitySearchBinding binding; + @SuppressLint("NotifyDataSetChanged") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - inflate = ActivitySearchBinding.inflate(getLayoutInflater()); - setContentView(inflate.getRoot()); - RecyclerView recyclerView = findViewById(R.id.list_recycler); + binding = ActivitySearchBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); FlexboxLayoutManager manager = new FlexboxLayoutManager(this); //设置主轴排列方式 manager.setFlexDirection(FlexDirection.ROW); //设置是否换行 manager.setFlexWrap(FlexWrap.WRAP); manager.setAlignItems(AlignItems.STRETCH); - recyclerView.setLayoutManager(manager); - new SearchRecordAdapter(); - recyclerView.setAdapter(recordAdapter); + binding.listRecycler.setLayoutManager(manager); + binding.listRecycler.setAdapter(new SearchRecordAdapter()); editText = findViewById(R.id.editview); editText.setOnEditorActionListener((v, actionId, event) -> { @@ -75,15 +73,15 @@ public class activity_search extends FragmentActivity { } return false; }); - inflate.deleat.setOnClickListener(v -> new MaterialAlertDialogBuilder(v.getContext()) + binding.deleat.setOnClickListener(v -> new MaterialAlertDialogBuilder( + activity_search.this) .setTitle("删除") .setMessage("清空历史记录?") .setNegativeButton("取消", null) .setPositiveButton("确定", (dialogInterface, i) -> { wj.sc(wj.filesdri + wj.lishi_json); - json = new JSONObject(); json_list.clear(); - recordAdapter.notifyDataSetChanged(); + binding.listRecycler.getAdapter().notifyDataSetChanged(); findViewById(R.id.xxbj1).setVisibility(View.GONE); }) .show()); @@ -150,38 +148,32 @@ public class activity_search extends FragmentActivity { } }); - inflate.editview.requestFocus();//获取焦点 + binding.editview.requestFocus();//获取焦点 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); //if (!imm.isActive()) //没有显示键盘,弹出 - imm.showSoftInput(inflate.editview, 0); + imm.showSoftInput(binding.editview, 0); } public void dismiss() { - inflate.editview.clearFocus(); + binding.editview.clearFocus(); listPopupWindow.setVisibility(View.GONE); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) //有显示键盘,隐藏 - imm.hideSoftInputFromWindow(inflate.editview.getWindowToken(), + imm.hideSoftInputFromWindow(binding.editview.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } + @SuppressLint("NotifyDataSetChanged") private void addSearchRecord(String name) { try { - if (!findViewById(R.id.xxbj1).isShown()) { - findViewById(R.id.xxbj1).setVisibility(View.VISIBLE); + if (!binding.xxbj1.isShown()) { + binding.xxbj1.setVisibility(View.VISIBLE); } - if (!json.has("list")) { - json.put("list", new JSONArray()); - } - if (!json_list.contains(name)) { - json_list.add(name); - JSONObject record = new JSONObject(); - record.put("name", name); - json.getJSONArray("list").put(record); - wj.xrwb(wj.filesdri + wj.lishi_json, json.toString()); - adapter.notifyDataSetChanged(); - } - } catch (JSONException e) { + json_list.remove(name); + json_list.add(0, name); + wj.xrwb(wj.filesdri + wj.lishi_json, new Gson().toJson(json_list)); + binding.listRecycler.getAdapter().notifyDataSetChanged(); + } catch (Exception e) { gj.sc(e); } } @@ -222,21 +214,16 @@ public class activity_search extends FragmentActivity { String dqwb = wj.dqwb(wj.filesdri + wj.lishi_json); if (dqwb != null) { try { - json = new JSONObject(dqwb); - JSONArray list1 = json.getJSONArray("list"); - int length = list1.length(); - for (int i = length - 1; i >= 0; i--) { - json_list.add(list1. - getJSONObject(i).getString("name")); - } - } catch (JSONException e) { + json_list = new Gson().fromJson(dqwb, new TypeToken>() { + }.getType()); + } catch (Exception e) { + wj.sc(wj.filesdri + wj.lishi_json); yc.start(activity_search.this, e); } } if (json_list.isEmpty()) { - inflate.xxbj1.setVisibility(View.INVISIBLE); + binding.xxbj1.setVisibility(View.INVISIBLE); } - recordAdapter = this; } @NonNull @@ -254,6 +241,19 @@ public class activity_search extends FragmentActivity { editText.setText(keyword); start(keyword); }); + holder.recordTextView.setOnLongClickListener(view -> { + new MaterialAlertDialogBuilder(activity_search.this). + setTitle("删除此记录:" + keyword) + .setPositiveButton("确定", (dialogInterface, i) -> { + json_list.remove(keyword); + wj.xrwb(wj.filesdri + wj.lishi_json, new Gson().toJson(json_list)); + notifyItemChanged(position); + }) + .setNegativeButton("取消", null) + .show(); + + return false; + }); } @Override @@ -285,6 +285,7 @@ public class activity_search extends FragmentActivity { finish(); } } + @Override public void finish() { super.finish(); diff --git a/app/src/main/java/com/muqingbfq/api/FileDownloader.java b/app/src/main/java/com/muqingbfq/api/FileDownloader.java index 5f6528f..82e3f55 100644 --- a/app/src/main/java/com/muqingbfq/api/FileDownloader.java +++ b/app/src/main/java/com/muqingbfq/api/FileDownloader.java @@ -8,16 +8,14 @@ import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.Color; import android.os.Build; -import android.os.Environment; +import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationCompat; import androidx.core.app.NotificationManagerCompat; import com.mpatric.mp3agic.ID3v2; -import com.mpatric.mp3agic.InvalidDataException; import com.mpatric.mp3agic.Mp3File; -import com.mpatric.mp3agic.UnsupportedTagException; import com.muqingbfq.MP3; import com.muqingbfq.R; import com.muqingbfq.bfq; @@ -37,10 +35,10 @@ import okhttp3.Request; import okhttp3.Response; public class FileDownloader { - private static final String CHANNEL_ID = "download_channel"; - private static final int NOTIFICATION_ID = 3; + private final String CHANNEL_ID = "download_channel"; + private final int NOTIFICATION_ID = 3; - public static void downloadFile(Context context, String url, MP3 x) { + public void downloadFile(Context context, String url, MP3 x) { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) @@ -50,18 +48,18 @@ public class FileDownloader { // 发起请求 client.newCall(request).enqueue(new Callback() { @Override - public void onFailure(Call call, IOException e) { + public void onFailure(@NonNull Call call, @NonNull IOException e) { e.printStackTrace(); // 下载失败处理 } @Override - public void onResponse(Call call, Response response) throws IOException { + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { if (!response.isSuccessful()) { // 下载失败处理 return; } - File outputFile = new File(wj.mp3, "nihao"); + File outputFile = new File(wj.mp3, x.id); File parentFile = outputFile.getParentFile(); if (!parentFile.isDirectory()) { parentFile.mkdirs(); @@ -122,7 +120,7 @@ public class FileDownloader { }); } - private static void createNotificationChannel(Context context) { + private void createNotificationChannel(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence name = "Download Channel"; String description = "Channel for file download"; @@ -139,7 +137,7 @@ public class FileDownloader { } } - private static void updateNotificationProgress(Context context, long fileSize, + private void updateNotificationProgress(Context context, long fileSize, long fileSizeDownloaded) { int progress = (int) ((fileSizeDownloaded * 100) / fileSize); diff --git a/app/src/main/java/com/muqingbfq/api/resource.java b/app/src/main/java/com/muqingbfq/api/resource.java index 5470388..b6d2530 100644 --- a/app/src/main/java/com/muqingbfq/api/resource.java +++ b/app/src/main/java/com/muqingbfq/api/resource.java @@ -6,7 +6,7 @@ import com.muqingbfq.main; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; import com.muqingbfq.mq.wl; -import com.muqingbfq.xm; +import com.muqingbfq.XM; import org.json.JSONArray; import org.json.JSONException; @@ -16,7 +16,7 @@ import java.util.List; public class resource { - public static void recommend(List list) { + public static void recommend(List list) { try { list.clear(); String hq; @@ -54,16 +54,16 @@ public class resource { } - public static xm Playlist_content(String UID) throws JSONException { + public static XM Playlist_content(String UID) throws JSONException { String hq = wl.get(main.api + "/playlist/detail?id=" + UID); JSONObject js = new JSONObject(hq).getJSONObject("playlist"); String id = js.getString("id"); String name = js.getString("name"); String coverImgUrl = js.getString("coverImgUrl"); - return new xm(id, name, coverImgUrl); + return new XM(id, name, coverImgUrl); } - public static void 排行榜(List list) { + public static void 排行榜(List list) { String hq; try { if (wj.cz(wj.gd_phb)) { @@ -88,7 +88,7 @@ public class resource { name += description; } String coverImgUrl = get.getString("coverImgUrl"); - list.add(new xm(id, name, coverImgUrl)); + list.add(new XM(id, name, coverImgUrl)); } } } catch (Exception e) { @@ -96,10 +96,10 @@ public class resource { } } - private static void add(JSONObject jsonObject, List list) throws Exception { + private static void add(JSONObject jsonObject, List list) throws Exception { String id = jsonObject.getString("id"); String name = jsonObject.getString("name"); String picUrl = jsonObject.getString("picUrl"); - list.add(new xm(id, name, picUrl)); + list.add(new XM(id, name, picUrl)); } } diff --git a/app/src/main/java/com/muqingbfq/api/url.java b/app/src/main/java/com/muqingbfq/api/url.java index 33c61cc..5b15d9e 100644 --- a/app/src/main/java/com/muqingbfq/api/url.java +++ b/app/src/main/java/com/muqingbfq/api/url.java @@ -1,16 +1,13 @@ package com.muqingbfq.api; import com.mpatric.mp3agic.ID3v2; -import com.mpatric.mp3agic.InvalidDataException; import com.mpatric.mp3agic.Mp3File; -import com.mpatric.mp3agic.UnsupportedTagException; import com.muqingbfq.MP3; import com.muqingbfq.bfq; import com.muqingbfq.fragment.Media; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; import com.muqingbfq.mq.wl; -import com.muqingbfq.xm; import com.muqingbfq.yc; import org.json.JSONArray; @@ -19,7 +16,6 @@ import org.json.JSONObject; import java.io.File; import java.io.FileOutputStream; -import java.io.IOException; import java.io.InputStream; import okhttp3.Call; diff --git a/app/src/main/java/com/muqingbfq/bfq.java b/app/src/main/java/com/muqingbfq/bfq.java index aea0cdc..bb4df8e 100644 --- a/app/src/main/java/com/muqingbfq/bfq.java +++ b/app/src/main/java/com/muqingbfq/bfq.java @@ -50,8 +50,8 @@ public class bfq extends AppCompatActivity { lrcView = binding.lrcView; ViewGroup.LayoutParams layoutParams = binding.cardview.getLayoutParams(); - layoutParams.height = main.k; - layoutParams.width = main.k; + layoutParams.height = main.k - 100; + layoutParams.width = main.k - 100; binding.cardview.setLayoutParams(layoutParams);/* bfqkz.mt.seekTo(Math.toIntExact(time)); if (!gj.isTablet(this)) { @@ -151,7 +151,7 @@ public class bfq extends AppCompatActivity { JSONArray data = json.getJSONArray("data"); JSONObject jsonObject = data.getJSONObject(0); String url = jsonObject.getString("url"); - FileDownloader.downloadFile(bfq.this, url, bfqkz.xm); + new FileDownloader().downloadFile(bfq.this, url, bfqkz.xm); } catch (JSONException e) { throw new RuntimeException(e); } diff --git a/app/src/main/java/com/muqingbfq/bfqkz.java b/app/src/main/java/com/muqingbfq/bfqkz.java index 1fe2122..ec323b2 100644 --- a/app/src/main/java/com/muqingbfq/bfqkz.java +++ b/app/src/main/java/com/muqingbfq/bfqkz.java @@ -85,63 +85,62 @@ public class bfqkz extends MediaBrowserServiceCompat { } - public static MediaSessionCompat mSession; - public static PlaybackStateCompat playback; + public MediaSessionCompat mSession; + public PlaybackStateCompat.Builder playback; + public PendingIntent pendingIntent; + + public MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); @Override public void onCreate() { super.onCreate(); - com.muqingbfq.api.playlist.hq_hc(bfqkz.lishi_list); - new BluetoothMusicController(this); - playback = new PlaybackStateCompat.Builder() - .setState(PlaybackStateCompat.STATE_NONE, 0, 1.0f) - .build(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setComponent(new ComponentName(this, home.class));//用ComponentName得到class对象 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);// 关键的一步,设置启动模式,两种情况 pendingIntent = com.muqingbfq.mq.NotificationManagerCompat.getActivity(this, intent); - mSession = new MediaSessionCompat(this, "MusicService", + com.muqingbfq.api.playlist.hq_hc(bfqkz.lishi_list); + new BluetoothMusicController(this); + mSession = new MediaSessionCompat(this, "MediaSessionCompat", home.componentName, pendingIntent); + playback = new PlaybackStateCompat.Builder(); + playback.setState(PlaybackStateCompat.STATE_NONE, 0, 1.0f) + .build(); mSession.setCallback(new callback()); - mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); - mSession.setPlaybackState(playback); -// mSession.setActive(true); + mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); + + playback.setActions(PlaybackStateCompat.ACTION_PLAY); + playback.setActions(PlaybackStateCompat.ACTION_STOP); + + mSession.setPlaybackState(playback.build()); setSessionToken(mSession.getSessionToken()); - + mSession.setActive(true); notify = new com.muqingbfq.mq.NotificationManagerCompat(this); - } class callback extends MediaSessionCompat.Callback { - @Override - public boolean onMediaButtonEvent(Intent mediaButtonEvent) { - mediaButtonEvent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); - return true; - } - @Override public void onPlay() { super.onPlay(); - if (playback.getState() == PlaybackStateCompat.STATE_PAUSED) { + if (playback.build().getState() == PlaybackStateCompat.STATE_PAUSED) { mt.start(); - playback = new PlaybackStateCompat.Builder() - .setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f) + playback.setState(PlaybackStateCompat.STATE_PLAYING, 0, 1.0f) .build(); - mSession.setPlaybackState(playback); + mSession.setPlaybackState(playback.build()); } + gj.sc(this.getClass()); + } @Override public void onPause() { super.onPause(); - if (playback.getState() == PlaybackStateCompat.STATE_PLAYING) { + if (playback.build().getState() == PlaybackStateCompat.STATE_PLAYING) { mt.pause(); - playback = new PlaybackStateCompat.Builder() - .setState(PlaybackStateCompat.STATE_PAUSED, 0, 1.0f) + playback.setState(PlaybackStateCompat.STATE_PAUSED, 0, 1.0f) .build(); - mSession.setPlaybackState(playback); + mSession.setPlaybackState(playback.build()); } } @@ -149,15 +148,14 @@ public class bfqkz extends MediaBrowserServiceCompat { @Override public void onPlayFromUri(Uri uri, Bundle extras) { try { - switch (playback.getState()) { + switch (playback.build().getState()) { case PlaybackStateCompat.STATE_PLAYING: case PlaybackStateCompat.STATE_PAUSED: case PlaybackStateCompat.STATE_NONE: // mp3(uri);/ - playback = new PlaybackStateCompat.Builder() - .setState(PlaybackStateCompat.STATE_CONNECTING, 0, 1.0f) + playback.setState(PlaybackStateCompat.STATE_CONNECTING, 0, 1.0f) .build(); - mSession.setPlaybackState(playback); + mSession.setPlaybackState(playback.build()); //我们可以保存当前播放音乐的信息,以便客户端刷新UI mSession.setMetadata(new MediaMetadataCompat.Builder() .putString(MediaMetadataCompat.METADATA_KEY_TITLE, extras.getString("title")) @@ -187,14 +185,4 @@ public class bfqkz extends MediaBrowserServiceCompat { public void onLoadChildren(@NonNull String parentId, @NonNull Result> result) { } - public static void updateNotification() { - try { - // 更新通知栏的播放状态 - if (bfqkz.notify != null && notify.notificationBuilder != null) { - notify.tzl(); - } - } catch (Exception e) { - gj.sc("bfqkz updateNotification:" + e); - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/muqingbfq/fragment/Media.java b/app/src/main/java/com/muqingbfq/fragment/Media.java index 5baae24..c2acd33 100644 --- a/app/src/main/java/com/muqingbfq/fragment/Media.java +++ b/app/src/main/java/com/muqingbfq/fragment/Media.java @@ -53,7 +53,10 @@ public class Media { bfq.kgsetImageResource(R.drawable.zt); } bfq_db.setkg(bool); - bfqkz.updateNotification(); + if (bfqkz.notify != null) { + bfqkz.notify.tzl_button(); + } + } public Media(ActivityBfqBinding binding) { diff --git a/app/src/main/java/com/muqingbfq/fragment/bfq_db.java b/app/src/main/java/com/muqingbfq/fragment/bfq_db.java index b0af1c2..849a463 100644 --- a/app/src/main/java/com/muqingbfq/fragment/bfq_db.java +++ b/app/src/main/java/com/muqingbfq/fragment/bfq_db.java @@ -12,10 +12,8 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; -import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.muqingbfq.MP3; -import com.muqingbfq.MediaPlayer; import com.muqingbfq.R; import com.muqingbfq.api.url; import com.muqingbfq.bfq; @@ -24,9 +22,7 @@ import com.muqingbfq.bfqkz; import com.muqingbfq.home; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; -import com.muqingbfq.xm; -import java.io.IOException; import java.lang.reflect.Type; import java.util.List; diff --git a/app/src/main/java/com/muqingbfq/fragment/gd.java b/app/src/main/java/com/muqingbfq/fragment/gd.java index 111cbc7..0bddaf9 100644 --- a/app/src/main/java/com/muqingbfq/fragment/gd.java +++ b/app/src/main/java/com/muqingbfq/fragment/gd.java @@ -29,7 +29,7 @@ import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; import com.muqingbfq.mq.wl; import com.muqingbfq.view.CardImage; -import com.muqingbfq.xm; +import com.muqingbfq.XM; import org.json.JSONArray; import org.json.JSONException; @@ -42,7 +42,7 @@ import java.util.Objects; public class gd extends com.muqingbfq.mq.FragmentActivity { public static String gdid; - private final List list = new ArrayList<>(); + private final List list = new ArrayList<>(); public static RecyclerView.Adapter adapter; int k; @@ -90,7 +90,7 @@ public class gd extends com.muqingbfq.mq.FragmentActivity { String id = jsonObject.getString("id"); String name = jsonObject.getString("name"); String coverImgUrl = jsonObject.getString("coverImgUrl"); - list.add(new xm(id, name, coverImgUrl)); + list.add(new XM(id, name, coverImgUrl)); } } catch (Exception e) { gj.sc(e); @@ -102,15 +102,15 @@ public class gd extends com.muqingbfq.mq.FragmentActivity { public static class baseadapter extends RecyclerView.Adapter{ Context context; - List list; + List list; - public baseadapter(Context context, List list) { + public baseadapter(Context context, List list) { this.context = context; this.list = list; } boolean bool = false; - public baseadapter(Context context, List list,boolean bool) { + public baseadapter(Context context, List list, boolean bool) { this.context = context; this.list = list; this.bool = bool; @@ -127,13 +127,13 @@ public class gd extends com.muqingbfq.mq.FragmentActivity { .inflate(R.layout.list_gd, parent, false)); } - public void setList(List list) { + public void setList(List list) { this.list = list; } @Override public void onBindViewHolder(@NonNull VH holder, int position) { - xm xm = list.get(position); + XM xm = list.get(position); CARD card = new CARD(xm); if (bool) { holder.itemView.setOnClickListener(card); @@ -180,9 +180,9 @@ public class gd extends com.muqingbfq.mq.FragmentActivity { class CARD implements View.OnClickListener , View.OnLongClickListener { - xm xm; + XM xm; - public CARD(xm xm) { + public CARD(XM xm) { this.xm = xm; } @Override @@ -212,7 +212,7 @@ public class gd extends com.muqingbfq.mq.FragmentActivity { if (wj.cz(wj.gd_xz)) { jsonObject = new JSONObject(Objects.requireNonNull(wj.dqwb(wj.gd_xz))); } - xm fh=resource.Playlist_content(xm.id); + XM fh=resource.Playlist_content(xm.id); JSONObject json = new JSONObject(); json.put("name", fh.name); json.put("picUrl", fh.picurl); diff --git a/app/src/main/java/com/muqingbfq/fragment/gd_adapter.java b/app/src/main/java/com/muqingbfq/fragment/gd_adapter.java index aa02c78..4bbb3ac 100644 --- a/app/src/main/java/com/muqingbfq/fragment/gd_adapter.java +++ b/app/src/main/java/com/muqingbfq/fragment/gd_adapter.java @@ -15,7 +15,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.muqingbfq.api.resource; import com.muqingbfq.main; -import com.muqingbfq.xm; +import com.muqingbfq.XM; import java.util.ArrayList; import java.util.List; @@ -26,7 +26,7 @@ public class gd_adapter extends Fragment { @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { FrameLayout layout = new FrameLayout(getContext()); - List list = new ArrayList<>(); + List list = new ArrayList<>(); RecyclerView recyclerView = new RecyclerView(layout.getContext()); int k = (int) (main.k / getResources().getDisplayMetrics().density + 0.5f); GridLayoutManager gridLayoutManager = new GridLayoutManager(layout.getContext(), k / 120); diff --git a/app/src/main/java/com/muqingbfq/fragment/mp3.java b/app/src/main/java/com/muqingbfq/fragment/mp3.java index fc37f99..77452cd 100644 --- a/app/src/main/java/com/muqingbfq/fragment/mp3.java +++ b/app/src/main/java/com/muqingbfq/fragment/mp3.java @@ -24,7 +24,6 @@ import com.muqingbfq.databinding.FragmentMp3Binding; import com.muqingbfq.list.MyViewHoder; import com.muqingbfq.main; import com.muqingbfq.mq.FragmentActivity; -import com.muqingbfq.xm; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/com/muqingbfq/fragment/search.java b/app/src/main/java/com/muqingbfq/fragment/search.java index d27d3ee..34fade6 100644 --- a/app/src/main/java/com/muqingbfq/fragment/search.java +++ b/app/src/main/java/com/muqingbfq/fragment/search.java @@ -26,7 +26,7 @@ import com.muqingbfq.list.MyViewHoder; import com.muqingbfq.main; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wl; -import com.muqingbfq.xm; +import com.muqingbfq.XM; import org.json.JSONArray; import org.json.JSONObject; @@ -37,7 +37,7 @@ import java.util.List; public class search extends Fragment { public static RecyclerView.Adapter lbspq; List list = new ArrayList<>(); - List xmList = new ArrayList<>(); + List xmList = new ArrayList<>(); public String name; public FragmentSearchBinding inflate; @@ -169,7 +169,7 @@ public class search extends Fragment { String name = js.getString("name"); String coverImgUrl = js.getString("coverImgUrl"); // gj.sc(name); - xmList.add(new xm(id, name, coverImgUrl)); + xmList.add(new XM(id, name, coverImgUrl)); return; } catch (Exception e) { gj.sc(e); @@ -185,7 +185,7 @@ public class search extends Fragment { String name = jsonObject.getString("name"); String coverImgUrl = jsonObject.getString("coverImgUrl"); // gj.sc(name); - xmList.add(new xm(id, name, coverImgUrl)); + xmList.add(new XM(id, name, coverImgUrl)); } } catch (Exception e) { gj.sc(e); diff --git a/app/src/main/java/com/muqingbfq/fragment/wode.java b/app/src/main/java/com/muqingbfq/fragment/wode.java index f81b512..fbbb7b8 100644 --- a/app/src/main/java/com/muqingbfq/fragment/wode.java +++ b/app/src/main/java/com/muqingbfq/fragment/wode.java @@ -25,7 +25,7 @@ import com.muqingbfq.login.user_message; import com.muqingbfq.main; import com.muqingbfq.mq.gj; import com.muqingbfq.mq.wj; -import com.muqingbfq.xm; +import com.muqingbfq.XM; import org.json.JSONObject; @@ -50,7 +50,7 @@ public class wode extends Fragment { {R.drawable.paihangbang, "排行榜", "排行榜"}, {R.drawable.icon, "开发中", ""} }; - private final List list = new ArrayList<>(); + private final List list = new ArrayList<>(); @Nullable @Override @@ -151,7 +151,7 @@ public class wode extends Fragment { JSONObject jsonObject = date.getJSONObject(id); String name = jsonObject.getString("name"); String picUrl = jsonObject.getString("picUrl"); - list.add(new xm(id, name, picUrl)); + list.add(new XM(id, name, picUrl)); } main.handler.post(() -> binding.recyclerview2.getAdapter().notifyDataSetChanged()); } catch (Exception e) { diff --git a/app/src/main/java/com/muqingbfq/home.java b/app/src/main/java/com/muqingbfq/home.java index c310cef..57a0301 100644 --- a/app/src/main/java/com/muqingbfq/home.java +++ b/app/src/main/java/com/muqingbfq/home.java @@ -5,6 +5,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.media.session.MediaSessionManager; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; @@ -25,7 +26,6 @@ import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; import com.muqingbfq.databinding.ActivityHomeBinding; -import com.muqingbfq.databinding.FloatLrcviewBinding; import com.muqingbfq.fragment.bfq_db; import com.muqingbfq.fragment.gd_adapter; import com.muqingbfq.fragment.wode; @@ -69,9 +69,9 @@ public class home extends AppCompatActivity { //初始化播放器组件 // 启动Service if (componentName == null) { - componentName = new ComponentName(this, bfqkz.class); + componentName = new ComponentName(getApplicationContext(), bfqkz.class); mBrowser = new MediaBrowserCompat( - this, componentName + getApplicationContext(), componentName ,//绑定服务端 browserConnectionCallback,//设置连接回调 null @@ -269,6 +269,7 @@ public class home extends AppCompatActivity { //当Service获取数据后会将数据发送回来,此时会触发SubscriptionCallback.onChildrenLoaded回调 mBrowser.subscribe(mediaId, browserSubscriptionCallback); } + gj.sc("连接成功"); } @Override @@ -284,6 +285,8 @@ public class home extends AppCompatActivity { @Override public void onChildrenLoaded(@NonNull String parentId, @NonNull List children) { + + gj.sc("onChildrenLoaded------"); } }; } \ No newline at end of file diff --git a/app/src/main/java/com/muqingbfq/list/yylb.java b/app/src/main/java/com/muqingbfq/list/yylb.java index 71c6f3b..d33d46e 100644 --- a/app/src/main/java/com/muqingbfq/list/yylb.java +++ b/app/src/main/java/com/muqingbfq/list/yylb.java @@ -1,25 +1,4 @@ package com.muqingbfq.list; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; - -import com.muqingbfq.R; -import com.muqingbfq.api.url; -import com.muqingbfq.bfq; -import com.muqingbfq.bfqkz; -import com.muqingbfq.fragment.bflb_db; -import com.muqingbfq.fragment.mp3; -import com.muqingbfq.home; -import com.muqingbfq.xm; - -import java.util.List; - public class yylb { } \ No newline at end of file diff --git a/app/src/main/java/com/muqingbfq/mq/FloatingLyricsService.java b/app/src/main/java/com/muqingbfq/mq/FloatingLyricsService.java index b6a5fc7..f7ac12b 100644 --- a/app/src/main/java/com/muqingbfq/mq/FloatingLyricsService.java +++ b/app/src/main/java/com/muqingbfq/mq/FloatingLyricsService.java @@ -65,7 +65,8 @@ public class FloatingLyricsService extends Service implements View.OnClickListen public static class SETUP { //0是关闭 1是打开 2是锁定 public int i; - public float TOP; + public float TOP, Alpha; + public String Color; public int Y; } @@ -94,6 +95,8 @@ public class FloatingLyricsService extends Service implements View.OnClickListen setup.i = 1; setup.TOP = 0; setup.Y = -main.g; + setup.Alpha = 0.9f; + setup.Color = "#0088FF"; } } catch (Exception e) { wj.sc(file.toString()); @@ -118,6 +121,7 @@ public class FloatingLyricsService extends Service implements View.OnClickListen params.y = setup.Y; lrcView = binding.lrcView; + lrcView.setTextColor(setup.Color); bfq_an.kz bfqAn = new bfq_an.kz(); binding.kg.setOnClickListener(this); binding.syq.setOnClickListener(bfqAn); diff --git a/app/src/main/java/com/muqingbfq/mq/NotificationManagerCompat.java b/app/src/main/java/com/muqingbfq/mq/NotificationManagerCompat.java index d0e3246..633bf86 100644 --- a/app/src/main/java/com/muqingbfq/mq/NotificationManagerCompat.java +++ b/app/src/main/java/com/muqingbfq/mq/NotificationManagerCompat.java @@ -5,15 +5,14 @@ import android.annotation.SuppressLint; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Build; +import android.support.v4.media.MediaMetadataCompat; import androidx.core.app.ActivityCompat; import androidx.core.app.NotificationCompat; -import androidx.media.MediaBrowserServiceCompat; import com.muqingbfq.MyButtonClickReceiver; import com.muqingbfq.R; @@ -58,13 +57,12 @@ public class NotificationManagerCompat { setAction("lrc")); style = new androidx.media.app.NotificationCompat.MediaStyle() .setShowActionsInCompactView(1, 2, 3) - .setMediaSession(bfqkz.mSession.getSessionToken()); + .setMediaSession(context.mSession.getSessionToken()); notificationManager = androidx.core.app.NotificationManagerCompat.from(context); notificationBuilder = getNotificationBuilder(context) .setSmallIcon(R.drawable.icon) - .setContentTitle(name).setContentText(zz) .setPriority(NotificationCompat.PRIORITY_LOW) - .setOngoing(true).setAutoCancel(false).setOnlyAlertOnce(true) + .setOngoing(true).setColorized(true).setShowWhen(false) .setVisibility(NotificationCompat.VISIBILITY_PUBLIC) .setContentIntent(context.pendingIntent) .setStyle(style); @@ -73,15 +71,38 @@ public class NotificationManagerCompat { yc.start(context, e); } } + androidx.media.app.NotificationCompat.MediaStyle style; + @SuppressLint("RestrictedApi") - public void tzl() { - if (bfqkz.xm != null) { - name = bfqkz.xm.name; - zz = bfqkz.xm.zz; + public void tzl_button() { + if (notificationBuilder == null) { + return; } notificationBuilder.mActions.clear(); notificationBuilder + .addAction(R.drawable.like, "like", pendingIntent_kg) // #0 + .addAction(R.drawable.syq, "syq", pendingIntent_syq) // #0 + .addAction(bfqkz.mt.isPlaying() ? R.drawable.bf : R.drawable.zt + , "kg", pendingIntent_kg) // #1 + .addAction(R.drawable.xyq, "xyq", pendingIntent_xyq) + .addAction(R.drawable.lock, "lrc", pendingIntent_lrc) + .setOngoing(bfqkz.mt.isPlaying()); + notificationManager_notify(); + } + + @SuppressLint("RestrictedApi") + public void tzl() { + if (notificationBuilder == null) { + return; + } + if (bfqkz.xm != null) { + name = bfqkz.xm.name; + zz = bfqkz.xm.zz; + } + notificationBuilder.mActions.clear(); + notificationBuilder + .setLargeIcon(bfq.bitmap) .addAction(R.drawable.like, "like", pendingIntent_kg) // #0 .addAction(R.drawable.syq, "syq", pendingIntent_syq) // #0 .addAction(bfqkz.mt.isPlaying() ? R.drawable.bf : R.drawable.zt @@ -91,6 +112,14 @@ public class NotificationManagerCompat { .setContentTitle(name) .setContentText(zz) .setOngoing(bfqkz.mt.isPlaying()); + + context.builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, name) + .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, zz) + .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, zz) + .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bfq.bitmap) + .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 100); + + context.mSession.setMetadata(context.builder.build()); notificationManager_notify(); } @@ -98,31 +127,13 @@ public class NotificationManagerCompat { pendingIntent_syq, pendingIntent_xyq, pendingIntent_lrc; - private final String CHANNEL_ID = "muqing_yy_id"; + private final String CHANNEL_ID = "MediaSessionCompat"; public void notificationManager_notify() { if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { return; } - notificationManager.notify(1, notificationBuilder.build()); - } - - public void setBitmap() { - Media.setImageBitmap(); - if (notificationManager != null) { - if (ActivityCompat.checkSelfPermission(home.appCompatActivity, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { - // TODO: Consider calling - // ActivityCompat#requestPermissions - // here to request the missing permissions, and then overriding - // public void onRequestPermissionsResult(int requestCode, String[] permissions, - // int[] grantResults) - // to handle the case where the user grants the permission. See the documentation - // for ActivityCompat#requestPermissions for more details. - return; - } - notificationBuilder.setLargeIcon(bfq.bitmap); - notificationManager.notify(1, notificationBuilder.build()); - } + notificationManager.notify(0, notificationBuilder.build()); } private NotificationCompat.Builder getNotificationBuilder(Context context) { @@ -142,7 +153,6 @@ public class NotificationManagerCompat { } - public static PendingIntent getActivity(Context context, Intent intent) { int flag; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { diff --git a/app/src/main/java/com/muqingbfq/mq/wl.java b/app/src/main/java/com/muqingbfq/mq/wl.java index d20b605..60f7d96 100644 --- a/app/src/main/java/com/muqingbfq/mq/wl.java +++ b/app/src/main/java/com/muqingbfq/mq/wl.java @@ -2,7 +2,7 @@ package com.muqingbfq.mq; import com.muqingbfq.main; -import com.muqingbfq.xm; +import com.muqingbfq.XM; import org.json.JSONException; import org.json.JSONObject; @@ -87,9 +87,9 @@ public class wl { public static class xz extends Thread { String url; - xm x; + XM x; - public xz(String url, xm x) { + public xz(String url, XM x) { this.url = url; this.x = x; start(); diff --git a/app/src/main/java/com/muqingbfq/view/LrcView.java b/app/src/main/java/com/muqingbfq/view/LrcView.java index 382e562..485796d 100644 --- a/app/src/main/java/com/muqingbfq/view/LrcView.java +++ b/app/src/main/java/com/muqingbfq/view/LrcView.java @@ -3,6 +3,7 @@ package com.muqingbfq.view; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; +import android.graphics.Color; import android.graphics.Rect; import android.text.TextUtils; import android.util.AttributeSet; @@ -74,6 +75,15 @@ public class LrcView extends RecyclerView { init(); } + public void setTextColor(int textColor) { + TextColor = textColor; + } + public void setTextColor(String textColor) { + TextColor = Color.parseColor(textColor); + } + + + private void init() { if (attrs != null) { TypedArray ta = getContext().obtainStyledAttributes(attrs, R.styleable.LrcView); diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index 64bf8e9..61d2cf6 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -59,8 +59,7 @@ + android:layout_height="wrap_content"/>