From 80bb0ce4d4854b25aa372ec7d3722e4155bfd3f9 Mon Sep 17 00:00:00 2001 From: developer-wlj Date: Tue, 25 Nov 2025 13:41:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(kodi):=20=E6=94=AF=E6=8C=81=E6=96=B0?= =?UTF-8?q?=E7=89=88Kodi=E5=85=A5=E5=8F=A3Activity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加支持Kodi 20及以上版本 - 修改启动逻辑,遍历所有Activity入口并尝试启动 - 优化异常处理逻辑,确保启动失败时能尝试其他入口 - 提升Kodi播放器兼容性,适配不同版本的Kodi应用 --- .../tvbox/osc/player/thirdparty/Kodi.java | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/com/github/tvbox/osc/player/thirdparty/Kodi.java b/app/src/main/java/com/github/tvbox/osc/player/thirdparty/Kodi.java index 8d65ad2f99..c2e32a48ca 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/thirdparty/Kodi.java +++ b/app/src/main/java/com/github/tvbox/osc/player/thirdparty/Kodi.java @@ -17,8 +17,15 @@ public class Kodi { public static final String TAG = "ThirdParty.Kodi"; private static final String PACKAGE_NAME = "org.xbmc.kodi"; + // 定义所有已知的Kodi入口Activity private static final String PLAYBACK_ACTIVITY = "org.xbmc.kodi.Splash"; + private static final String MAIN_ACTIVITY_NEW = "org.xbmc.kodi.Main"; // 新版入口 (Kodi 20及以后) + // 用字符串数组来存储所有可能的Activity类名 + private static final String[] KODI_ACTIVITIES = { + MAIN_ACTIVITY_NEW, // 优先尝试新版入口,因为它更可能被用户安装 + PLAYBACK_ACTIVITY // 如果新版失败,再尝试旧版 + }; private static class KodiPackageInfo { final String packageName; final String activityName; @@ -77,9 +84,6 @@ public static boolean run(Activity activity, String url, String title, String su try { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setPackage(packageInfo.packageName); - intent.setClassName(packageInfo.packageName, packageInfo.activityName); if (headers != null && headers.size() > 0) { url = url + "|"; int idx = 0; @@ -91,18 +95,31 @@ public static boolean run(Activity activity, String url, String title, String su idx ++; } } - intent.setData(Uri.parse(url)); - intent.putExtra("title", title); - intent.putExtra("name", title); + } catch (Exception e) { + Log.e(TAG, "Failed to build Kodi URL", e); + return false; + } - if (subtitle != null && !subtitle.isEmpty()) { - intent.putExtra("subs", subtitle); + // 遍历所有可能的 Activity 入口,逐个尝试启动 + for (String activityName : KODI_ACTIVITIES) { + try { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setPackage(PACKAGE_NAME); + intent.setClassName(PACKAGE_NAME, activityName); // 设置要尝试的 Activity + intent.setData(Uri.parse(url)); + intent.putExtra("title", title); + intent.putExtra("name", title); + + if (subtitle != null && !subtitle.isEmpty()) { + intent.putExtra("subs", subtitle); + } + activity.startActivity(intent); + return true; + } catch (Exception ex) { + Log.e(TAG, "Can't run Kodi", ex); + // 什么也不做,继续循环,尝试下一个 Activity } - activity.startActivity(intent); - return true; - } catch (Exception ex) { - Log.e(TAG, "Can't run Kodi", ex); - return false; } + return false; } } \ No newline at end of file