From 960f890ddd58ae2ac7b38e8c4c2dd14f40260b5d Mon Sep 17 00:00:00 2001 From: Li ZongYing Date: Tue, 6 Feb 2024 23:03:36 +0800 Subject: [PATCH] readme --- README.md | 2 +- .../java/com/lizongying/mytv/MainActivity.kt | 1 - .../java/com/lizongying/mytv/MainFragment.kt | 2 +- .../main/java/com/lizongying/mytv/TVList.kt | 891 +++++++++++++++++- .../java/com/lizongying/mytv/UpdateManager.kt | 5 + .../main/java/com/lizongying/mytv/Utils.kt | 32 +- .../main/java/com/lizongying/mytv/api/Info.kt | 2 +- screenshots/zfb.jpg | Bin 0 -> 74380 bytes 8 files changed, 911 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/com/lizongying/mytv/UpdateManager.kt create mode 100644 screenshots/zfb.jpg diff --git a/README.md b/README.md index 503024ec..f1592e0a 100644 --- a/README.md +++ b/README.md @@ -112,4 +112,4 @@ adb install my-tv.apk ## 赞赏 -![image](./screenshots/appreciate.jpeg) \ No newline at end of file +![image](./screenshots/zfb.jpg) \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/MainActivity.kt b/app/src/main/java/com/lizongying/mytv/MainActivity.kt index d2401295..f9ed1e43 100644 --- a/app/src/main/java/com/lizongying/mytv/MainActivity.kt +++ b/app/src/main/java/com/lizongying/mytv/MainActivity.kt @@ -46,7 +46,6 @@ class MainActivity : FragmentActivity() { override fun onCreate(savedInstanceState: Bundle?) { Log.i(TAG, "onCreate") - TVList.init(this) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) diff --git a/app/src/main/java/com/lizongying/mytv/MainFragment.kt b/app/src/main/java/com/lizongying/mytv/MainFragment.kt index 208fa69e..b537dcbe 100644 --- a/app/src/main/java/com/lizongying/mytv/MainFragment.kt +++ b/app/src/main/java/com/lizongying/mytv/MainFragment.kt @@ -139,7 +139,7 @@ class MainFragment : BrowseSupportFragment() { val cardPresenter = CardPresenter(viewLifecycleOwner) var idx: Long = 0 - for ((k, v) in TVList.list!!) { + for ((k, v) in TVList.list) { val listRowAdapter = ArrayObjectAdapter(cardPresenter) for ((idx2, v1) in v.withIndex()) { val tvViewModel = TVViewModel(v1) diff --git a/app/src/main/java/com/lizongying/mytv/TVList.kt b/app/src/main/java/com/lizongying/mytv/TVList.kt index 39e131d5..4446b741 100644 --- a/app/src/main/java/com/lizongying/mytv/TVList.kt +++ b/app/src/main/java/com/lizongying/mytv/TVList.kt @@ -6,19 +6,888 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.io.IOException -import kotlin.math.log object TVList { - @Volatile - var list: Map>? = null - get():Map>? { - //等待初始化完成 - while (this.list === null) { - Thread.sleep(10) - } - return this.list - } - + var list = mapOf( + "央视频道" to listOf( + TV( + 0, + "CCTV1 综合", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226231/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/d57905b93540bd15f0c48230dbbbff7ee0d645ff539e38866e2d15c8b9f7dfcd.png?imageMogr2/format/webp", + "600001859", + "2000210103", + "600001859", + false, + mustToken = false + ), + TV( + 1, + "CCTV2 财经", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226195/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/20115388de0207131af17eac86c33049b95d69eaff064e55653a1b941810a006.png?imageMogr2/format/webp", + "600001800", + "2000203603", + "600001800", + true, + mustToken = false + ), + TV( + 2, + "CCTV3 综艺", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226397/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/7b7a65c712450da3deb6ca66fbacf4f9aee00d3f20bd80eafb5ada01ec63eb3a.png?imageMogr2/format/webp", + "600001801", + "2000203803", + "600001801", + true, + mustToken = true + ), + TV( + 3, + "CCTV4 中文国际", + listOf( + "http://39.134.24.161/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226191/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226191/index.m3u8" + ), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/f357e58fdbcc076a3d65e1f958c942b2e14f14342c60736ceed98b092d35356a.png?imageMogr2/format/webp", + "600001814", + "2000204803", + "600001814", + false, + mustToken = false + ), + TV( + 4, + "CCTV5 体育", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226395/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/0a6a7138952675983a3d854df7688557b286d59aa06166edae51506f9204d655.png?imageMogr2/format/webp", + "600001818", + "2000205103", + "600001818", + true, + mustToken = false + ), + TV( + 5, + "CCTV6 电影", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226393/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/741515efda91f03f455df8a7da4ee11fa9329139c276435cf0a9e2af398d5bf2.png?imageMogr2/format/webp", + "600001802", + "2013693901", + "600001802", + true, + mustToken = true + ), + TV( + 6, + "CCTV7 国防军事", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226192/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/b29af94e295ebdf646cefb68122c429b9cd921f498ca20d2d8070252536f9ff9.png?imageMogr2/format/webp", + "600004092", + "2000510003", + "600004092", + true, + mustToken = false + ), + TV( + 7, + "CCTV8 电视剧", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226391/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/ad51de94426a0ba039e6dd6a8534ea98ecc813a6176bde87b4f18cc34d6d7590.png?imageMogr2/format/webp", + "600001803", + "2000203903", + "600001803", + true, + mustToken = true + ), + TV( + 8, + "CCTV9 记录", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226197/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/2ed1b4deeca179d5db806bb941790f82eb92a1b7299c1c38fe027f95a5caee5e.png?imageMogr2/format/webp", + "600004078", + "2000499403", + "600004078", + true, + mustToken = false + ), + TV( + 9, + "CCTV10 科教", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226189/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/aa6157ec65188cd41826e5a2f088c3d6d153205f5f6428258d12c59999e221aa.png?imageMogr2/format/webp", + "600001805", + "2000203503", + "600001805", + true, + mustToken = false + ), + TV( + 10, + "CCTV11 戏曲", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226240/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/ed12ed7c7a1034dae4350011fe039284c5d5a836506b28c9e32e3c75299625c0.png?imageMogr2/format/webp", + "600001806", + "2000204103", + "600001806", + true, + mustToken = false + ), + TV( + 11, + "CCTV12 社会与法", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226190/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/484083cffaa40df7e659565e8cb4d1cc740158a185512114167aa21fa0c59240.png?imageMogr2/format/webp", + "600001807", + "2000202603", + "600001807", + true, + mustToken = false + ), + TV( + 12, + "CCTV13 新闻", + listOf( + "https://live-play.cctvnews.cctv.com/cctv/merge_cctv13.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226233/index.m3u8" + ), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/266da7b43c03e2312186b4a999e0f060e8f15b10d2cc2c9aa32171819254cf1a.png?imageMogr2/format/webp", + "600001811", + "2000204603", + "600001811", + false, + mustToken = false + ), + TV( + 13, + "CCTV14 少儿", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226193/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/af6b603896938dc346fbb16abfc63c12cba54b0ec9d18770a15d347d115f12d5.png?imageMogr2/format/webp", + "600001809", + "2000204403", + "600001809", + true, + mustToken = false + ), + TV( + 14, + "CCTV15 音乐", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225785/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/2ceee92188ef684efe0d8b90839c4f3ad450d179dc64d59beff417059453af47.png?imageMogr2/format/webp", + "600001815", + "2000205003", + "600001815", + true, + mustToken = false + ), + TV( + 15, + "CCTV16 奥林匹克", + listOf( + "http://39.134.24.162/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226921/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226921/index.m3u8" + ), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/53793fa7bacd3a93ff6dc5d2758418985e1f952a316c335d663b572d8bdcd74d.png?imageMogr2/format/webp", + "600098637", + "2012375003", + "600098637", + true, + mustToken = false + ), + TV( + 16, + "CCTV17 农业农村", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226198/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/ddef563072f8bad2bea5b9e52674cb7b4ed50efb20c26e61994dfbdf05c1e3c0.png?imageMogr2/format/webp", + "600001810", + "2000204203", + "600001810", + true, + mustToken = false + ), + TV( + 17, + "CCTV5+ 体育赛事", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226221/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/649ad76a90bfef55b05db9fe52e006487280f619089099d5dc971e387fc6eff0.png?imageMogr2/format/webp", + "600001817", + "2000204503", + "600001817", + true, + mustToken = false + ), + TV( + 18, + "CCTV4K 超高清", + listOf(), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/3e9d06fd7244d950df5838750f1c6ac3456e172b51caca2c16d2282125b111e8.png?imageMogr2/format/webp", + "600002264", + "2000266303", + "600002264", + true, + mustToken = false + ), + TV( + 19, + "CCTV8K 超高清", + listOf(), + 0, + "央视频道", + "", + "600156816", + "2020603421", + "", + false, + mustToken = false + ), + TV( + 20, + "风云剧场", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226950/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/4d549e53e6d0f632d5a633d1945280797b153e588f919221a07faa869812cc89.png?imageMogr2/format/webp", + "600099658", + "2012513603", + "600099658", + true, + mustToken = true + ), + TV( + 21, + "第一剧场", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226959/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/a556bd7d93ce65e18f243a8892b5604f4faa994a4897315914216a710a706208.png?imageMogr2/format/webp", + "600099655", + "2012514403", + "600099655", + true, + mustToken = true + ), + TV( + 22, + "怀旧剧场", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226972/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/5661bd04fecdb6e899f801147a22ab5d3a475bf2b62e30aec2c0023190ebc9b1.png?imageMogr2/format/webp", + "600099620", + "2012511203", + "600099620", + true, + mustToken = true + ), + TV( + 23, + "世界地理", + listOf(), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/bb3c6c9e145d698137f5bb64a582021a01b51344b929003630eb769ea65832a9.png?imageMogr2/format/webp", + "600099637", + "2012513303", + "600099637", + true, + mustToken = true + ), + TV( + 24, + "风云音乐", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226953/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/bbf1d024c5228b8dd128b0e3cb1717d173fab4ee84c3a4c8a57b1a215362ca3b.png?imageMogr2/format/webp", + "600099660", + "2012514103", + "600099660", + true, + mustToken = true + ), + TV( + 25, + "兵器科技", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226975/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/4c6b6a6d3839889f34d33db3c2f80233b26b74d3489b393487635f8704e70796.png?imageMogr2/format/webp", + "600099649", + "2012513403", + "600099649", + true, + mustToken = true + ), + TV( + 26, + "风云足球", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226984/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/cd1e2bb52b06a991de168733e5ff0f1d85adc8042d40c8f393f723543e5dd08a.png?imageMogr2/format/webp", + "600099636", + "2012514203", + "600099636", + true, + mustToken = true + ), + TV( + 27, + "高尔夫网球", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226978/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/cdd1b31ede7a5ad049ed53d9a072422f829e72dd062ed2c19e077fdd01699071.png?imageMogr2/format/webp", + "600099659", + "2012512503", + "600099659", + true, + mustToken = true + ), + TV( + 28, + "女性时尚", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226969/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/fa28955ce8b2539d728bf4c6a13a46ff57ad76eae46627f7bcfb1ed8a613d3fc.png?imageMogr2/format/webp", + "600099650", + "2012513903", + "600099650", + true, + mustToken = true + ), + TV( + 29, + "央视文化精品", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226981/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/14ac5ce40482cacd3d4b37435222bfe86af2b452a2f04ecbfc1d13d76edd7c57.png?imageMogr2/format/webp", + "600099653", + "2012513803", + "600099653", + true, + mustToken = true + ), + TV( + 30, + "央视台球", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226956/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/10e14a92478011aa6c3c8562e62127f3b1908e29fcd78e4b2b24b9e6d3ec2fbc.png?imageMogr2/format/webp", + "600099652", + "2012513703", + "600099652", + true, + mustToken = true + ), + TV( + 31, + "电视指南", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888893/224/3221226987/index.m3u8"), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/244d72c0eb1615ed7d51c2f5db5a67f306aa3f58c05bc2d34de3aa7e956dc8c9.png?imageMogr2/format/webp", + "600099656", + "2012514003", + "600099656", + true, + mustToken = true + ), + TV( + 32, + "卫生健康", + listOf(), + 0, + "央视频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/54a6863656fdfd8f803be193ddf22441c5000a108833889816fd2d8911715ce8.png?imageMogr2/format/webp", + "600099651", + "2012513503", + "600099651", + true, + mustToken = true + ), + ), + "地方频道" to listOf( + TV( + 33, + "东方卫视", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226217/index.m3u8"), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/9bd372ca292a82ce3aa08772b07efc4af1f85c21d1f268ea33440c49e9a0a488.png?imageMogr2/format/webp", + "600002483", + "2000292403", + "600002483", + true, + mustToken = false + ), + TV( + 34, + "湖南卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226211/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/4120e89d3079d08aa17d382f69a2308ec70839b278367763c34a34666c75cb88.png?imageMogr2/format/webp", + "600002475", + "2000296203", + "600002475", + true, + mustToken = false + ), + TV( + 35, + "湖北卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226194/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/7a6be5a2bb1dc53a945c016ff1f525dc4a84c51db371c15c89aa55404b0ba784.png?imageMogr2/format/webp", + "600002508", + "2000294503", + "600002508", + true, + mustToken = false + ), + TV( + 36, + "辽宁卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226201/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/ac4ed6058a87c101ae7147ebc38905d0cae047fb73fd277ee5049b84f52bda36.png?imageMogr2/format/webp", + "600002505", + "2000281303", + "600002505", + true, + mustToken = false + ), + TV( + 37, + "江苏卫视", + listOf( + "http://39.134.24.166/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226200/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226200/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/380ad685c0c1d5b2c902246b8d2df6d3f9b45e2837abcfe493075bbded597a31.png?imageMogr2/format/webp", + "600002521", + "2000295603", + "600002521", + true, + mustToken = false + ), + TV( + 38, + "江西卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225764/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/3c760d0d00463855890e8a1864ea4a6b6dd66b90c29b4ac714a4b17c16519871.png?imageMogr2/format/webp", + "600002503", + "2000294103", + "600002503", + true, + mustToken = false + ), + TV( + 39, + "山东卫视", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226209/index.m3u8"), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/22d403f07a7cf5410b3ad3ddb65a11aa229a32475fac213f5344c9f0ec330ca1.png?imageMogr2/format/webp", + "600002513", + "2000294803", + "600002513", + true, + mustToken = false + ), + TV( + 40, + "广东卫视", + listOf("http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226216/index.m3u8"), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/28886880a4dc0f06fb7e0a528a1def0591d61a65870e29176ede0cc92033bbfd.png?imageMogr2/format/webp", + "600002485", + "2000292703", + "600002485", + true, + mustToken = false + ), + TV( + 41, + "广西卫视", + listOf( + "http://live.gxrb.com.cn/tv/gxtvlive03/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225770/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/54b7e97cb816bb223fe05f3fc44da2c7820eb66e8550c19d23100f2c414ecc38.png?imageMogr2/format/webp", + "600002509", + "2000294203", + "600002509", + true, + mustToken = false + ), + TV( + 42, + "重庆卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226202/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/657651f411de2673d1770d9a78b44c1265704f7468cc41d4be7f51d630768494.png?imageMogr2/format/webp", + "600002531", + "2000297803", + "600002531", + true, + mustToken = false + ), + TV( + 43, + "河南卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225767/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/74925962148a6d31c85808b6cd4e444c2a54bab393d2c5fc85e960b50e22fa86.png?imageMogr2/format/webp", + "600002525", + "2000296103", + "600002525", + true, + mustToken = false + ), + TV( + 44, + "河北卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225750/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/d545becdc81c60197b08c7f47380705e4665ed3fe55efc8b855e486f6e655378.png?imageMogr2/format/webp", + "600002493", + "2000293403", + "600002493", + true, + mustToken = false + ), + TV( + 45, + "贵州卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225793/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/4eb45f4781d33d872af027dc01c941559aab55667dd99cc5c22bef7037807b13.png?imageMogr2/format/webp", + "600002490", + "2000293303", + "600002490", + true, + mustToken = false + ), + TV( + 46, + "北京卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225728/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226222/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/f4f23633c578beea49a3841d88d3490100f029ee349059fa532869db889872c5.png?imageMogr2/format/webp", + "600002309", + "2000272103", + "600002309", + true, + mustToken = false + ), + TV( + 47, + "黑龙江卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226215/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/d8273ae9be698ce2db21f5b886ecac95a73429593f93713c60ed8c12c38bf0d3.png?imageMogr2/format/webp", + "600002498", + "2000293903", + "600002498", + true, + mustToken = false + ), + TV( + 48, + "浙江卫视", + listOf( + "http://hw-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226199/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/a66c836bd98ba3e41a2e9a570d4b9c50dedc6839e9de333e2e78212ad505f37e.png?imageMogr2/format/webp", + "600002520", + "2000295503", + "600002520", + true, + mustToken = false + ), + TV( + 49, + "安徽卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226203/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/f35fa04b51b1ee4984b03578b65403570868ebca03c6c01e11b097f999a58d9b.png?imageMogr2/format/webp", + "600002532", + "2000298003", + "600002532", + true, + mustToken = false + ), + TV( + 50, + "深圳卫视", + listOf( + "http://39.134.24.166/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226205/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221226205/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/d59fec04c902e3581c617136d02d4b9b8c4cbe64272781ddd3525e80c823edb7.png?imageMogr2/format/webp", + "600002481", + "2000292203", + "600002481", + true, + mustToken = false + ), + TV( + 51, + "四川卫视", + listOf( + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225768/index.m3u8", + "http://39.134.24.166/dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225768/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/3276a414ae0eaa0f116f2045cd913367967d0c7c1e978e8621ac3879436c6ed7.png?imageMogr2/format/webp", + "600002516", + "2000295003", + "600002516", + true, + mustToken = false + ), + TV( + 52, + "东南卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225766/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/3208fe6564a293c21b711333fb3edb05bb5b406cff840573c9a8d839680a1579.png?imageMogr2/format/webp", + "600002484", + "2000292503", + "600002484", + true, + mustToken = false + ), + TV( + 53, + "海南卫视", + listOf( + "http://ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8", + "http://dbiptv.sn.chinamobile.com/PLTV/88888890/224/3221225769/index.m3u8" + ), + 0, + "地方频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/6e060391fde0469801fc3d84dbf204b4f8d650d251f17d7595a6964c0bb99e81.png?imageMogr2/format/webp", + "600002506", + "2000291503", + "600002506", + true, + mustToken = false + ), + TV( + 54, + "天津卫视", + listOf(), + 0, + "地方频道", + "", + "600152137", + "2019927003", + "", + true, + mustToken = false + ), + TV( + 55, + "新疆卫视", + listOf(), + 0, + "地方频道", + "", + "600152138", + "2019927403", + "", + true, + mustToken = false + ), + ), + "国际频道" to listOf( + TV( + 56, + "CGTN", + listOf("http://live.cgtn.com/1000/prog_index.m3u8"), + 0, + "国际频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/a72dff758ca1c17cd0ecc8cedc11b893d208f409d5e6302faa0e9d298848abc3.png?imageMogr2/format/webp", + "600014550", + "2001656803", + "600014550", + false, + mustToken = false + ), + TV( + 57, + "CGTN 法语频道", + listOf("https://livefr.cgtn.com/1000f/prog_index.m3u8"), + 0, + "国际频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/a8d0046a47433d952bf6ed17062deb8bd2184ba9aec0f7781df6bf9487a3ffcf.png?imageMogr2/format/webp", + "600084704", + "2010153503", + "600084704", + false, + mustToken = false + ), + TV( + 58, + "CGTN 俄语频道", + listOf("http://liveru.cgtn.com/1000r/prog_index.m3u8"), + 0, + "国际频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/bf0a820893cbaf20dd0333e27042e1ef9c8806e5b602b6a8c95af399db0bc77a.png?imageMogr2/format/webp", + "600084758", + "2010152603", + "600084758", + false, + mustToken = false + ), + TV( + 59, + "CGTN 阿拉伯语频道", + listOf("http://livear.cgtn.com/1000a/prog_index.m3u8"), + 0, + "国际频道", + "https://resources.yangshipin.cn/assets/oms/image/202306/2e44e2aa3e7a1cedf07fd0ae59fe69e86a60a2632660a006e3e9e7397b2d107e.png?imageMogr2/format/webp", + "600084782", + "2010155203", + "600084782", + false, + mustToken = false + ), + TV( + 60, + "CGTN 西班牙语频道", + listOf( + "http://livees.cgtn.com/500e/prog_index.m3u8", + "http://livees.cgtn.com/1000e/prog_index.m3u8" + ), + 0, + "国际频道", + "https://resources.yangshipin.cn/assets/oms/image/202309/7c337e3dbe64402ec7e4678a619a4a6d95144e42f35161181ff78e143b7cf67a.png?imageMogr2/format/webp", + "600084744", + "2010152503", + "600084744", + false, + mustToken = false + ), + TV( + 61, + "CGTN 纪录频道", + listOf("https://livedoc.cgtn.com/500d/prog_index.m3u8"), + 0, + "国际频道", + "https://resources.yangshipin.cn/assets/oms/image/202309/74d3ac436a7e374879578de1d87a941fbf566d39d5632b027c5097891ed32bd5.png?imageMogr2/format/webp", + "600084781", + "2010155403", + "600084781", + false, + mustToken = false + ), + ) + ) /** * 初始化 diff --git a/app/src/main/java/com/lizongying/mytv/UpdateManager.kt b/app/src/main/java/com/lizongying/mytv/UpdateManager.kt new file mode 100644 index 00000000..02b054a5 --- /dev/null +++ b/app/src/main/java/com/lizongying/mytv/UpdateManager.kt @@ -0,0 +1,5 @@ +package com.lizongying.mytv + +class UpdateManager { + +} \ No newline at end of file diff --git a/app/src/main/java/com/lizongying/mytv/Utils.kt b/app/src/main/java/com/lizongying/mytv/Utils.kt index 206a4075..a4ae56a6 100644 --- a/app/src/main/java/com/lizongying/mytv/Utils.kt +++ b/app/src/main/java/com/lizongying/mytv/Utils.kt @@ -1,41 +1,55 @@ package com.lizongying.mytv import android.content.res.Resources +import android.os.SystemClock +import android.util.Log import android.util.TypedValue import com.google.gson.Gson import com.lizongying.mytv.api.TimeResponse +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import java.text.SimpleDateFormat -import java.util.* +import java.util.Date +import java.util.Locale object Utils { fun getDateFormat(format: String): String { return SimpleDateFormat(format, Locale.CHINA).format(Date()) } - suspend fun getDateTimestamp(): Long { - return getTimestampFromServer() / 1000 + fun getDateTimestamp(): Long { + return Date().time / 1000 + } + + + init { + CoroutineScope(Dispatchers.Default).launch { + updateTimestampFromServer() + } } /** * 从服务器获取时间戳 * @return Long 时间戳 */ - private suspend fun getTimestampFromServer(): Long { - return withContext(Dispatchers.IO) { - val client = okhttp3.OkHttpClient.Builder().connectTimeout(500, java.util.concurrent.TimeUnit.MILLISECONDS) + private suspend fun updateTimestampFromServer() { + val currentTimeMillis = withContext(Dispatchers.IO) { + val client = okhttp3.OkHttpClient.Builder() + .connectTimeout(500, java.util.concurrent.TimeUnit.MILLISECONDS) .readTimeout(1, java.util.concurrent.TimeUnit.SECONDS).build() client.newCall( - okhttp3.Request.Builder().url("https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp") + okhttp3.Request.Builder() + .url("https://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp") .build() ).execute().use { response -> if (!response.isSuccessful) throw java.io.IOException("Unexpected code $response") - val body = response.body() - val string = body?.toString() + val string = response.body()?.string() Gson().fromJson(string, TimeResponse::class.java).data.t.toLong() } } + SystemClock.setCurrentTimeMillis(currentTimeMillis) } fun dpToPx(dp: Float): Int { diff --git a/app/src/main/java/com/lizongying/mytv/api/Info.kt b/app/src/main/java/com/lizongying/mytv/api/Info.kt index 867acaa7..c4a3eeb1 100644 --- a/app/src/main/java/com/lizongying/mytv/api/Info.kt +++ b/app/src/main/java/com/lizongying/mytv/api/Info.kt @@ -11,7 +11,7 @@ data class InfoData( ) data class TimeResponse( - val api: String, val v: String, val ret: List, val data: Time + val data: Time ) { data class Time( val t: String diff --git a/screenshots/zfb.jpg b/screenshots/zfb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9bd85104315443c7f78f60a642fee5ff98900cb2 GIT binary patch literal 74380 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 rSCs*hcQKmL1y1t~0 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 iwf}1$jOw{=HE!%^