|
|
|
@ -3,6 +3,7 @@ package com.yunqiinnovation.qq_music |
|
|
|
import android.app.Activity |
|
|
|
import android.content.Context |
|
|
|
import android.content.SharedPreferences |
|
|
|
import android.content.pm.PackageManager |
|
|
|
import android.os.Handler |
|
|
|
import android.os.Looper |
|
|
|
import android.util.Log |
|
|
|
@ -56,7 +57,32 @@ class QQMusicSingleton private constructor() { |
|
|
|
loadSavedLoginInfo() |
|
|
|
Log.d(TAG, "QQ音乐单例初始化完成") |
|
|
|
} |
|
|
|
/** |
|
|
|
* 检查QQ音乐App是否已安装 |
|
|
|
*/ |
|
|
|
private fun isQQMusicInstalled(): Boolean { |
|
|
|
val packageName = when (Config.BIND_PLATFORM) { |
|
|
|
CommonCmd.AIDL_PLATFORM_TYPE_PHONE -> "com.tencent.qqmusic" |
|
|
|
CommonCmd.AIDL_PLATFORM_TYPE_CAR -> "com.tencent.qqmusiccar" |
|
|
|
CommonCmd.AIDL_PLATFORM_TYPE_TV -> "com.tencent.qqmusictv" |
|
|
|
else -> { |
|
|
|
Log.e(TAG, "不支持的平台类型: ${Config.BIND_PLATFORM}") |
|
|
|
return false |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return try { |
|
|
|
this.activity?.packageManager?.getPackageInfo(packageName, 0) |
|
|
|
Log.d(TAG, "QQ音乐app已安装: $packageName") |
|
|
|
true |
|
|
|
} catch (e: PackageManager.NameNotFoundException) { |
|
|
|
Log.w(TAG, "QQ音乐app未安装: $packageName") |
|
|
|
false |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e(TAG, "检查QQ音乐app安装状态失败", e) |
|
|
|
false |
|
|
|
} |
|
|
|
} |
|
|
|
/** |
|
|
|
* 检查是否已登录且未过期 |
|
|
|
*/ |
|
|
|
@ -88,6 +114,11 @@ class QQMusicSingleton private constructor() { |
|
|
|
* 登录接口 |
|
|
|
*/ |
|
|
|
fun login(callback: (Result<LoginResult>) -> Unit) { |
|
|
|
if (!isQQMusicInstalled()){ |
|
|
|
callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
// 先检查是否已经登录且未过期 |
|
|
|
if (isLoggedIn()) { |
|
|
|
Log.d(TAG, "用户已登录且未过期,直接返回登录信息") |
|
|
|
@ -140,6 +171,10 @@ class QQMusicSingleton private constructor() { |
|
|
|
searchType: Int = Data.SearchType.SEARCH_TYPE_SONG, |
|
|
|
callback: (Result<List<Map<String, Any?>>>) -> Unit |
|
|
|
) { |
|
|
|
if (!isQQMusicInstalled()){ |
|
|
|
callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) |
|
|
|
return |
|
|
|
} |
|
|
|
searchWithRetry(keyword, searchType, 0, callback) |
|
|
|
} |
|
|
|
|
|
|
|
@ -264,12 +299,16 @@ class QQMusicSingleton private constructor() { |
|
|
|
index: Int = 0, |
|
|
|
callback: (Result<Unit>) -> Unit |
|
|
|
) { |
|
|
|
|
|
|
|
val currentActivity = activity |
|
|
|
if (currentActivity == null) { |
|
|
|
callback(Result.failure(Exception("Activity not available"))) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
if (!isQQMusicInstalled()){ |
|
|
|
callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) |
|
|
|
return |
|
|
|
} |
|
|
|
ensureMusicManager(currentActivity) |
|
|
|
musicManager?.playSongs(songMids, index, object : QQMusicManager.PlayCallback { |
|
|
|
override fun onSuccess() { |
|
|
|
|