Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 30 additions & 13 deletions app/src/main/java/com/github/tvbox/osc/player/thirdparty/Kodi.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -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;
}
}