优化了搜索,修复了若干通知栏BUG

This commit is contained in:
muqing 2023-12-31 19:02:57 +08:00
parent 69c7cd15b9
commit 907b52a700
27 changed files with 210 additions and 209 deletions

View File

@ -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"

View File

@ -24,7 +24,6 @@
<!--悬浮窗权限-->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<application
android:name=".main"
android:allowBackup="true"
@ -66,9 +65,11 @@
<service
android:name=".bfqkz"
android:exported="false">
android:exported="true"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</service>
<service android:name=".mq.floating" />

View File

@ -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;
// 音乐的贴图

View File

@ -138,7 +138,8 @@ public class MediaPlayer extends android.media.MediaPlayer {
.listener(new RequestListener<Bitmap>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model,
@NonNull Target<Bitmap> target, boolean isFirstResource) {
@NonNull Target<Bitmap> 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<Bitmap> 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);

View File

@ -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;

View File

@ -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<String> adapter;
private SearchRecordAdapter recordAdapter;
private JSONObject json = new JSONObject();
private final List<String> json_list = new ArrayList<>();
private List<String> json_list = new ArrayList<>();
private final List<String> 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<List<String>>() {
}.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();

View File

@ -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);

View File

@ -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<xm> list) {
public static void recommend(List<XM> 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<xm> list) {
public static void 排行榜(List<XM> 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<xm> list) throws Exception {
private static void add(JSONObject jsonObject, List<XM> 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));
}
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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<List<MediaBrowserCompat.MediaItem>> result) {
}
public static void updateNotification() {
try {
// 更新通知栏的播放状态
if (bfqkz.notify != null && notify.notificationBuilder != null) {
notify.tzl();
}
} catch (Exception e) {
gj.sc("bfqkz updateNotification:" + e);
}
}
}

View File

@ -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) {

View File

@ -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;

View File

@ -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<xm> list = new ArrayList<>();
private final List<XM> list = new ArrayList<>();
public static RecyclerView.Adapter<VH> 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<VH>{
Context context;
List<xm> list;
List<XM> list;
public baseadapter(Context context, List<xm> list) {
public baseadapter(Context context, List<XM> list) {
this.context = context;
this.list = list;
}
boolean bool = false;
public baseadapter(Context context, List<xm> list,boolean bool) {
public baseadapter(Context context, List<XM> 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<xm> list) {
public void setList(List<XM> 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);

View File

@ -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<xm> list = new ArrayList<>();
List<XM> 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);

View File

@ -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;

View File

@ -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<MyViewHoder> lbspq;
List<MP3> list = new ArrayList<>();
List<xm> xmList = new ArrayList<>();
List<XM> 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);

View File

@ -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<com.muqingbfq.xm> list = new ArrayList<>();
private final List<XM> 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) {

View File

@ -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<MediaBrowserCompat.MediaItem> children) {
gj.sc("onChildrenLoaded------");
}
};
}

View File

@ -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 {
}

View File

@ -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);

View File

@ -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) {

View File

@ -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();

View File

@ -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);

View File

@ -59,8 +59,7 @@
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"/>
android:layout_height="wrap_content"/>
</LinearLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/search_fragment"

View File

@ -10,7 +10,6 @@
android:layout_width="match_parent"
android:layout_height="100dp"
app:layout_constraintTop_toTopOf="parent"
app:TextColor="@color/purple_200"
tools:layout_editor_absoluteX="16dp" />
<androidx.constraintlayout.widget.ConstraintLayout

View File

@ -25,7 +25,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginTop="16dp"
android:paddingTop="16dp"
android:layout_marginEnd="16dp"
android:lines="2"
android:maxLines="2"
android:text="@string/name"