1.获取在后台播放的音乐应用app的包名和歌曲详细信息 /** * 获取在后台播放的音乐应用app */ public void setMediaPlayMusic() { MediaSessionManager mediaSessionManager = (MediaSessionManager) this.getSystemService(HomeActivity.this.MEDIA_SESSION_SERVICE); List<MediaController> controllers = mediaSessionManager.getActiveSessions(null); if (controllers != null && !controllers.isEmpty()) { MediaController controller = controllers.get(0); // 假设只有一个活动的媒体会话 PlaybackState playbackState = controller.getPlaybackState(); if (playbackState != null) { // 获取播放状态(如 PLAYING, PAUSED 等)// 2 代表暂停 3 代表播放状态 int state = playbackState.getState(); packageName = controller.getPackageName(); android.util.Log.d(TAG, "setMediaPlayMusic: " + "播放状态:" + state + "应用包名:" + packageName); if (state == 3 && !TextUtils.isEmpty(packageName)) { binding.homeContent.homeLinear.setVisibility(View.VISIBLE); } else { binding.homeContent.homeLinear.setVisibility(View.GONE); } // 根据包名获取APP名称 PackageInfo info = null; PackageManager pm = getPackageManager(); try { info = pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } binding.homeContent.homePlay.setText(info.applicationInfo.loadLabel(pm).toString()); //binding.homeContent.homePlay.setText(packageName); MediaMetadata metadata = controller.getMetadata(); if (metadata != null) { String title = metadata.getString(MediaMetadata.METADATA_KEY_TITLE); // 获取歌曲名 String artist = metadata.getString(MediaMetadata.METADATA_KEY_ARTIST); // 获取艺术家名 Bitmap artist1 = metadata.getBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART); // 获取歌曲的图片 binding.homeContent.homeImage.setImageBitmap(artist1); android.util.Log.d(TAG, "setMediaPlayMusic: " + title + ":" + artist); } } } }
2.点击事件通过包名打开该应用
binding.homeContent.homeLinear.setOnClickListener(v -> {
android.util.Log.d(TAG, "initEvent click application packageName: " + packageName); AppUtils.startApp(HomeActivity.this, packageName);
});
3.通过包名打开当前应用app
public static boolean startApp(Context context,String packageName) { if (TextUtils.isEmpty(packageName) || !AppUtils.isInsatllApp(packageName)) { ToastManager.get().showBottomToast(context.getString(R.string.app_hint)); return false; } AppInfoUtils.startActivityForPackage(context, packageName); return true; }
public static boolean isInsatllApp(String pkgName) { final PackageManager packageManager = ContextUtil.getContext().getPackageManager(); try { PackageInfo packageInfo = packageManager.getPackageInfo(pkgName, PackageManager.MATCH_UNINSTALLED_PACKAGES); return packageInfo != null; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return false; } }
/** * 打开应用 */ public static void startActivityForPackage(Context context, String packName) { Intent intent = context.getPackageManager().getLaunchIntentForPackage(packName); context.startActivity(intent); }