Commit a3eb444c a3eb444c40184fb4f8c6ca2f0b855d2f734b211a by 胡波

新增aidl服务模拟

1 parent a9850a1a
......@@ -4,10 +4,10 @@
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2024-10-12T05:40:06.328823Z">
<DropdownSelection timestamp="2024-10-14T01:44:33.742803Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="Default" identifier="serial=0123456789;connection=725ee2fc" />
<DeviceId pluginId="LocalEmulator" identifier="path=/Users/bohu/.android/avd/Pixel_Tablet_API_31.avd" />
</handle>
</Target>
</DropdownSelection>
......
......@@ -29,6 +29,7 @@ android {
buildFeatures{
buildConfig true
aidl true
}
flavorDimensions 'APP'
......
......@@ -9,6 +9,7 @@
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<permission android:name="com.android.smart.terminal.iptv.aidl.SERVICES" android:protectionLevel="normal"/>
<application
android:allowBackup="true"
......@@ -30,6 +31,11 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:exported="true" android:name="com.android.smart.terminal.iptv.aidl.ServiceCfg">
<intent-filter>
<action android:name="com.android.smart.terminal.iptv.aidl.ServiceCfg"/>
</intent-filter>
</service>
</application>
</manifest>
\ No newline at end of file
......
{
"iptvauthurl": "1http://epg.itv.cq.cn:8080/iptvepg/platform/index.jsp",
"iptvaccount": "kdspb2",
"userid": "kdspb2",
"iptvpassword": "159357",
"stbid": "0010059900E06810042094D505F12A7E",
"usertoken": "IlrUGIlrUG17tYxUgfawMrNRAmf8XV7S",
"epgdomain": "http://172.23.88.137:33200/EPG/jsp/xinaishangbanmuban/en/Category.jsp",
"epginfo": "",
"epggroupnmb": "xinaishangbanmuban",
"usergroupnmb": "717",
"productmodel": "",
"terminaltype": "",
"areaid": "",
"countyid": "",
"romversion": "",
"terminalversion": "",
"mac": "",
"iptvstate": "",
"ottcp": "",
"sessionid": "DF10A297F8449B9526B58811497FC4B4"
}
\ No newline at end of file
[{
"UserChannelID": "35",
"ChannelNo": "763",
"ChannelName": "时尚购物",
"ext": ""
}, {
"UserChannelID": "36",
"ChannelNo": "1486",
"ChannelName": "江苏卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "33",
"ChannelNo": "561019957",
"ChannelName": "环球购物",
"ext": ""
}, {
"UserChannelID": "34",
"ChannelNo": "3072",
"ChannelName": "家有购物(测试)",
"ext": ""
}, {
"UserChannelID": "39",
"ChannelNo": "1487",
"ChannelName": "深圳卫视(高清)",
"ext": ""
}, {
"UserChannelID": "37",
"ChannelNo": "1485",
"ChannelName": "浙江卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "38",
"ChannelNo": "1501",
"ChannelName": "东方卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "43",
"ChannelNo": "3332",
"ChannelName": "贵州卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "42",
"ChannelNo": "1484",
"ChannelName": "天津卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "41",
"ChannelNo": "1482",
"ChannelName": "山东卫视(高清)",
"ext": ""
}, {
"UserChannelID": "40",
"ChannelNo": "1490",
"ChannelName": "北京卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "202",
"ChannelNo": "754",
"ChannelName": "CQTV影视",
"ext": ""
}, {
"UserChannelID": "203",
"ChannelNo": "756",
"ChannelName": "CQTV社会与法",
"ext": ""
}, {
"UserChannelID": "2018",
"ChannelNo": "2652",
"ChannelName": "江苏晚会4K",
"ext": ""
}, {
"UserChannelID": "204",
"ChannelNo": "759",
"ChannelName": "CQTV时尚生活",
"ext": ""
}, {
"UserChannelID": "2019",
"ChannelNo": "3954",
"ChannelName": "聚精彩临时业务流",
"ext": ""
}, {
"UserChannelID": "205",
"ChannelNo": "757",
"ChannelName": "CQTV娱乐",
"ext": ""
}, {
"UserChannelID": "200",
"ChannelNo": "752",
"ChannelName": "重庆卫视频道",
"ext": ""
}, {
"UserChannelID": "201",
"ChannelNo": "753",
"ChannelName": "CQTV新闻",
"ext": ""
}, {
"UserChannelID": "22",
"ChannelNo": "3536",
"ChannelName": "CQTV社会与法(超高清)",
"ext": ""
}, {
"UserChannelID": "23",
"ChannelNo": "3535",
"ChannelName": "CQTV时尚生活(超高清)",
"ext": ""
}, {
"UserChannelID": "24",
"ChannelNo": "3533",
"ChannelName": "CQTV娱乐(超高清)",
"ext": ""
}, {
"UserChannelID": "25",
"ChannelNo": "3532",
"ChannelName": "CQTV新农村(超高清)",
"ext": ""
}, {
"UserChannelID": "26",
"ChannelNo": "4094",
"ChannelName": "CQTV少儿(高清)",
"ext": ""
}, {
"UserChannelID": "206",
"ChannelNo": "758",
"ChannelName": "CQTV新农村",
"ext": ""
}, {
"UserChannelID": "27",
"ChannelNo": "3733",
"ChannelName": "CQTV科教(超高清)",
"ext": ""
}, {
"UserChannelID": "28",
"ChannelNo": "4093",
"ChannelName": "CQTV汽摩(高清)",
"ext": ""
}, {
"UserChannelID": "168",
"ChannelNo": "3034",
"ChannelName": "城市剧场(测试)",
"ext": ""
}, {
"UserChannelID": "208",
"ChannelNo": "755",
"ChannelName": "CQTV科教",
"ext": ""
}, {
"UserChannelID": "29",
"ChannelNo": "4096",
"ChannelName": "CQTV移动(高清)",
"ext": ""
}, {
"UserChannelID": "3",
"ChannelNo": "2552",
"ChannelName": "CCTV-3综艺(高清)",
"ext": ""
}, {
"UserChannelID": "409",
"ChannelNo": "1552",
"ChannelName": "IPTV相声小品.",
"ext": ""
}, {
"UserChannelID": "2",
"ChannelNo": "1479",
"ChannelName": "CCTV-2财经(高清)",
"ext": ""
}, {
"UserChannelID": "408",
"ChannelNo": "1555",
"ChannelName": "IPTV谍战剧场.",
"ext": ""
}, {
"UserChannelID": "1",
"ChannelNo": "1491",
"ChannelName": "CCTV-1综合(高清)",
"ext": ""
}, {
"UserChannelID": "7",
"ChannelNo": "2532",
"ChannelName": "CCTV-6电影(高清)",
"ext": ""
}, {
"UserChannelID": "405",
"ChannelNo": "1594",
"ChannelName": "IPTV6+",
"ext": ""
}, {
"UserChannelID": "6",
"ChannelNo": "1596",
"ChannelName": "CCTV-5+体育赛事(高清)",
"ext": ""
}, {
"UserChannelID": "404",
"ChannelNo": "1593",
"ChannelName": "IPTV5+",
"ext": ""
}, {
"UserChannelID": "5",
"ChannelNo": "2533",
"ChannelName": "CCTV-5体育(高清)",
"ext": ""
}, {
"UserChannelID": "407",
"ChannelNo": "1496",
"ChannelName": "收视指南.",
"ext": ""
}, {
"UserChannelID": "4",
"ChannelNo": "3334",
"ChannelName": "CCTV-4中文国际(高清)",
"ext": ""
}, {
"UserChannelID": "406",
"ChannelNo": "1595",
"ChannelName": "IPTV8+",
"ext": ""
}, {
"UserChannelID": "401",
"ChannelNo": "1499",
"ChannelName": "少儿动画.",
"ext": ""
}, {
"UserChannelID": "2021",
"ChannelNo": "4113",
"ChannelName": "自贡灯会慢直播",
"ext": ""
}, {
"UserChannelID": "400",
"ChannelNo": "2832",
"ChannelName": "重广融媒",
"ext": ""
}, {
"UserChannelID": "2020",
"ChannelNo": "4153",
"ChannelName": "2020测试",
"ext": ""
}, {
"UserChannelID": "9",
"ChannelNo": "2512",
"ChannelName": "CCTV-8电视剧(高清)",
"ext": ""
}, {
"UserChannelID": "403",
"ChannelNo": "1592",
"ChannelName": "IPTV3+",
"ext": ""
}, {
"UserChannelID": "2023",
"ChannelNo": "4133",
"ChannelName": "2023测试",
"ext": ""
}, {
"UserChannelID": "8",
"ChannelNo": "1474",
"ChannelName": "CCTV-7国防军事(高清)",
"ext": ""
}, {
"UserChannelID": "402",
"ChannelNo": "1495",
"ChannelName": "魅力时尚.",
"ext": ""
}, {
"UserChannelID": "2022",
"ChannelNo": "4135",
"ChannelName": "2022测试",
"ext": ""
}, {
"UserChannelID": "215",
"ChannelNo": "1472",
"ChannelName": "CCTV-2财经",
"ext": ""
}, {
"UserChannelID": "216",
"ChannelNo": "2495",
"ChannelName": "CCTV-3综艺",
"ext": ""
}, {
"UserChannelID": "19",
"ChannelNo": "1014",
"ChannelName": "重庆卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "214",
"ChannelNo": "1435",
"ChannelName": "CCTV-1综合",
"ext": ""
}, {
"UserChannelID": "219",
"ChannelNo": "2498",
"ChannelName": "CCTV-6电影",
"ext": ""
}, {
"UserChannelID": "18",
"ChannelNo": "3754",
"ChannelName": "CCTV-17农业农村(高清)",
"ext": ""
}, {
"UserChannelID": "15",
"ChannelNo": "1475",
"ChannelName": "CCTV-少儿(高清)",
"ext": ""
}, {
"UserChannelID": "217",
"ChannelNo": "1734",
"ChannelName": "CCTV-4中文国际",
"ext": ""
}, {
"UserChannelID": "16",
"ChannelNo": "4294",
"ChannelName": "CCTV-15音乐(高清)",
"ext": ""
}, {
"UserChannelID": "218",
"ChannelNo": "2501",
"ChannelName": "CCTV-5体育",
"ext": ""
}, {
"UserChannelID": "13",
"ChannelNo": "1476",
"ChannelName": "CCTV-12社会与法(高清)",
"ext": ""
}, {
"UserChannelID": "14",
"ChannelNo": "4293",
"ChannelName": "CCTV-13新闻(高清)",
"ext": ""
}, {
"UserChannelID": "11",
"ChannelNo": "1477",
"ChannelName": "CCTV-10科教(高清)",
"ext": ""
}, {
"UserChannelID": "12",
"ChannelNo": "4313",
"ChannelName": "CCTV-11戏曲(高清)",
"ext": ""
}, {
"UserChannelID": "21",
"ChannelNo": "3534",
"ChannelName": "CQTV影视(超高清)",
"ext": ""
}, {
"UserChannelID": "418",
"ChannelNo": "3032",
"ChannelName": "地理(测试)",
"ext": ""
}, {
"UserChannelID": "20",
"ChannelNo": "3314",
"ChannelName": "CQTV新闻(超高清)",
"ext": ""
}, {
"UserChannelID": "417",
"ChannelNo": "3036",
"ChannelName": "音乐现场(测试)",
"ext": ""
}, {
"UserChannelID": "416",
"ChannelNo": "3038",
"ChannelName": "古装剧场(测试)",
"ext": ""
}, {
"UserChannelID": "415",
"ChannelNo": "3037",
"ChannelName": "军旅剧场(测试)",
"ext": ""
}, {
"UserChannelID": "419",
"ChannelNo": "3035",
"ChannelName": "美妆(测试)",
"ext": ""
}, {
"UserChannelID": "410",
"ChannelNo": "1554",
"ChannelName": "IPTV野外.",
"ext": ""
}, {
"UserChannelID": "414",
"ChannelNo": "2593",
"ChannelName": "开县本地电视1",
"ext": ""
}, {
"UserChannelID": "413",
"ChannelNo": "1497",
"ChannelName": "经典电影.",
"ext": ""
}, {
"UserChannelID": "412",
"ChannelNo": "1498",
"ChannelName": "热播剧场.",
"ext": ""
}, {
"UserChannelID": "411",
"ChannelNo": "1553",
"ChannelName": "IPTV法治.",
"ext": ""
}, {
"UserChannelID": "220",
"ChannelNo": "1436",
"ChannelName": "CCTV-7国防军事",
"ext": ""
}, {
"UserChannelID": "221",
"ChannelNo": "2496",
"ChannelName": "CCTV-8电视剧",
"ext": ""
}, {
"UserChannelID": "222",
"ChannelNo": "1453",
"ChannelName": "CCTV-9纪录",
"ext": ""
}, {
"UserChannelID": "223",
"ChannelNo": "1450",
"ChannelName": "CCTV-10科教",
"ext": ""
}, {
"UserChannelID": "1308",
"ChannelNo": "3253",
"ChannelName": "音乐直播(淘景立画)",
"ext": ""
}, {
"UserChannelID": "224",
"ChannelNo": "1473",
"ChannelName": "CCTV-11戏曲",
"ext": ""
}, {
"UserChannelID": "225",
"ChannelNo": "1471",
"ChannelName": "CCTV-12社会与法",
"ext": ""
}, {
"UserChannelID": "226",
"ChannelNo": "1469",
"ChannelName": "CCTV-13新闻",
"ext": ""
}, {
"UserChannelID": "227",
"ChannelNo": "1467",
"ChannelName": "CCTV-少儿",
"ext": ""
}, {
"UserChannelID": "228",
"ChannelNo": "1468",
"ChannelName": "CCTV-15音乐",
"ext": ""
}, {
"UserChannelID": "229",
"ChannelNo": "3753",
"ChannelName": "CCTV-17农业农村",
"ext": ""
}, {
"UserChannelID": "427",
"ChannelNo": "3000",
"ChannelName": "动画(测试)",
"ext": ""
}, {
"UserChannelID": "426",
"ChannelNo": "2999",
"ChannelName": "早教(测试)",
"ext": ""
}, {
"UserChannelID": "10",
"ChannelNo": "1478",
"ChannelName": "CCTV-9纪录(高清)",
"ext": ""
}, {
"UserChannelID": "429",
"ChannelNo": "3001",
"ChannelName": "鉴赏(测试)",
"ext": ""
}, {
"UserChannelID": "182",
"ChannelNo": "1094",
"ChannelName": "精彩导视",
"ext": ""
}, {
"UserChannelID": "428",
"ChannelNo": "3005",
"ChannelName": "好学生(测试)",
"ext": ""
}, {
"UserChannelID": "421",
"ChannelNo": "2994",
"ChannelName": "精选(测试)",
"ext": ""
}, {
"UserChannelID": "420",
"ChannelNo": "2995",
"ChannelName": "美人(测试)",
"ext": ""
}, {
"UserChannelID": "423",
"ChannelNo": "2996",
"ChannelName": "军事(测试)",
"ext": ""
}, {
"UserChannelID": "422",
"ChannelNo": "3039",
"ChannelName": "解密(测试)",
"ext": ""
}, {
"UserChannelID": "425",
"ChannelNo": "2998",
"ChannelName": "戏曲(测试)",
"ext": ""
}, {
"UserChannelID": "424",
"ChannelNo": "2997",
"ChannelName": "国学(测试)",
"ext": ""
}, {
"UserChannelID": "116",
"ChannelNo": "572965386",
"ChannelName": "世界地理HD",
"ext": ""
}, {
"UserChannelID": "79",
"ChannelNo": "1673",
"ChannelName": "CGTN中国国际电视台",
"ext": ""
}, {
"UserChannelID": "117",
"ChannelNo": "572965326",
"ChannelName": "女性时尚HD",
"ext": ""
}, {
"UserChannelID": "114",
"ChannelNo": "572965378",
"ChannelName": "风云音乐HD",
"ext": ""
}, {
"UserChannelID": "115",
"ChannelNo": "572964343",
"ChannelName": "第一剧场HD",
"ext": ""
}, {
"UserChannelID": "112",
"ChannelNo": "4353",
"ChannelName": "魅力足球HD",
"ext": ""
}, {
"UserChannelID": "113",
"ChannelNo": "576952605",
"ChannelName": "天元围棋HD",
"ext": ""
}, {
"UserChannelID": "110",
"ChannelNo": "4289",
"ChannelName": "游戏风云HD",
"ext": ""
}, {
"UserChannelID": "111",
"ChannelNo": "4290",
"ChannelName": "生活时尚HD",
"ext": ""
}, {
"UserChannelID": "118",
"ChannelNo": "572964340",
"ChannelName": "风云剧场HD",
"ext": ""
}, {
"UserChannelID": "119",
"ChannelNo": "572965329",
"ChannelName": "风云足球HD",
"ext": ""
}, {
"UserChannelID": "435",
"ChannelNo": "3008",
"ChannelName": "高网(测试)",
"ext": ""
}, {
"UserChannelID": "436",
"ChannelNo": "3009",
"ChannelName": "足球(测试)",
"ext": ""
}, {
"UserChannelID": "433",
"ChannelNo": "3010",
"ChannelName": "爱生活(测试)",
"ext": ""
}, {
"UserChannelID": "434",
"ChannelNo": "3007",
"ChannelName": "武术(测试)",
"ext": ""
}, {
"UserChannelID": "431",
"ChannelNo": "3003",
"ChannelName": "光影(测试)",
"ext": ""
}, {
"UserChannelID": "432",
"ChannelNo": "3004",
"ChannelName": "台球(测试)",
"ext": ""
}, {
"UserChannelID": "430",
"ChannelNo": "3002",
"ChannelName": "墨宝(测试)",
"ext": ""
}, {
"UserChannelID": "439",
"ChannelNo": "3012",
"ChannelName": "动作影院(测试)",
"ext": ""
}, {
"UserChannelID": "87",
"ChannelNo": "595279997",
"ChannelName": "先锋乒羽",
"ext": ""
}, {
"UserChannelID": "84",
"ChannelNo": "3793",
"ChannelName": "山东教育卫视.",
"ext": ""
}, {
"UserChannelID": "437",
"ChannelNo": "3006",
"ChannelName": "武侠剧场(测试)",
"ext": ""
}, {
"UserChannelID": "85",
"ChannelNo": "3813",
"ChannelName": "快乐垂钓(高清)",
"ext": ""
}, {
"UserChannelID": "438",
"ChannelNo": "3011",
"ChannelName": "喜剧影院(测试)",
"ext": ""
}, {
"UserChannelID": "67",
"ChannelNo": "1492",
"ChannelName": "嘉佳卡通.",
"ext": ""
}, {
"UserChannelID": "125",
"ChannelNo": "572964990",
"ChannelName": "央视文化精品HD",
"ext": ""
}, {
"UserChannelID": "66",
"ChannelNo": "1413",
"ChannelName": "金鹰卡通.",
"ext": ""
}, {
"UserChannelID": "126",
"ChannelNo": "572965325",
"ChannelName": "早期教育HD",
"ext": ""
}, {
"UserChannelID": "69",
"ChannelNo": "1441",
"ChannelName": "青海卫视.",
"ext": ""
}, {
"UserChannelID": "68",
"ChannelNo": "588989290",
"ChannelName": "陶瓷(高清)",
"ext": ""
}, {
"UserChannelID": "121",
"ChannelNo": "572965341",
"ChannelName": "兵器科技HD",
"ext": ""
}, {
"UserChannelID": "122",
"ChannelNo": "572964348",
"ChannelName": "央视台球HD",
"ext": ""
}, {
"UserChannelID": "123",
"ChannelNo": "572964980",
"ChannelName": "电视指南HD",
"ext": ""
}, {
"UserChannelID": "124",
"ChannelNo": "572965379",
"ChannelName": "高尔夫网球HD",
"ext": ""
}, {
"UserChannelID": "440",
"ChannelNo": "2979",
"ChannelName": "家庭影院(测试)",
"ext": ""
}, {
"UserChannelID": "441",
"ChannelNo": "3013",
"ChannelName": "星影(测试)",
"ext": ""
}, {
"UserChannelID": "442",
"ChannelNo": "3673",
"ChannelName": "爱上4K",
"ext": ""
}, {
"UserChannelID": "70",
"ChannelNo": "1440",
"ChannelName": "新疆卫视.",
"ext": ""
}, {
"UserChannelID": "71",
"ChannelNo": "1437",
"ChannelName": "西藏卫视.",
"ext": ""
}, {
"UserChannelID": "120",
"ChannelNo": "572965337",
"ChannelName": "怀旧剧场HD",
"ext": ""
}, {
"UserChannelID": "72",
"ChannelNo": "1597",
"ChannelName": "纪实(高清)",
"ext": ""
}, {
"UserChannelID": "59",
"ChannelNo": "512",
"ChannelName": "广东卫视(高清)",
"ext": ""
}, {
"UserChannelID": "58",
"ChannelNo": "1489",
"ChannelName": "湖南卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "57",
"ChannelNo": "1439",
"ChannelName": "内蒙古卫视.",
"ext": ""
}, {
"UserChannelID": "56",
"ChannelNo": "1481",
"ChannelName": "辽宁卫视(高清)",
"ext": ""
}, {
"UserChannelID": "55",
"ChannelNo": "1446",
"ChannelName": "吉林卫视.",
"ext": ""
}, {
"UserChannelID": "64",
"ChannelNo": "589239514",
"ChannelName": "中华美食(高清)",
"ext": ""
}, {
"UserChannelID": "65",
"ChannelNo": "1432",
"ChannelName": "卡酷动画.",
"ext": ""
}, {
"UserChannelID": "62",
"ChannelNo": "1454",
"ChannelName": "宁夏卫视.",
"ext": ""
}, {
"UserChannelID": "63",
"ChannelNo": "1443",
"ChannelName": "甘肃卫视.",
"ext": ""
}, {
"UserChannelID": "60",
"ChannelNo": "1452",
"ChannelName": "河南卫视.",
"ext": ""
}, {
"UserChannelID": "61",
"ChannelNo": "3333",
"ChannelName": "河北卫视(高清)",
"ext": ""
}, {
"UserChannelID": "49",
"ChannelNo": "1438",
"ChannelName": "山西卫视.",
"ext": ""
}, {
"UserChannelID": "48",
"ChannelNo": "1480",
"ChannelName": "安徽卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "145",
"ChannelNo": "1494",
"ChannelName": "财富天下.",
"ext": ""
}, {
"UserChannelID": "45",
"ChannelNo": "1672",
"ChannelName": "云南卫视.",
"ext": ""
}, {
"UserChannelID": "44",
"ChannelNo": "3352",
"ChannelName": "四川卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "47",
"ChannelNo": "1488",
"ChannelName": "黑龙江卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "46",
"ChannelNo": "1451",
"ChannelName": "广西卫视.",
"ext": ""
}, {
"UserChannelID": "51",
"ChannelNo": "1483",
"ChannelName": "湖北卫视(高清)",
"ext": ""
}, {
"UserChannelID": "52",
"ChannelNo": "4095",
"ChannelName": "海南卫视HD",
"ext": ""
}, {
"UserChannelID": "53",
"ChannelNo": "1448",
"ChannelName": "陕西卫视.",
"ext": ""
}, {
"UserChannelID": "54",
"ChannelNo": "3393",
"ChannelName": "东南卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "50",
"ChannelNo": "3734",
"ChannelName": "江西卫视(超高清)",
"ext": ""
}, {
"UserChannelID": "1011",
"ChannelNo": "971",
"ChannelName": "直播室1",
"ext": ""
}, {
"UserChannelID": "109",
"ChannelNo": "588988872",
"ChannelName": "东方财经HD",
"ext": ""
}, {
"UserChannelID": "108",
"ChannelNo": "4288",
"ChannelName": "金色频道HD",
"ext": ""
}, {
"UserChannelID": "107",
"ChannelNo": "4282",
"ChannelName": "法治天地HD",
"ext": ""
}, {
"UserChannelID": "106",
"ChannelNo": "4283",
"ChannelName": "乐游HD",
"ext": ""
}, {
"UserChannelID": "105",
"ChannelNo": "4287",
"ChannelName": "动漫秀场HD",
"ext": ""
}, {
"UserChannelID": "104",
"ChannelNo": "4284",
"ChannelName": "都市剧场HD",
"ext": ""
}, {
"UserChannelID": "103",
"ChannelNo": "4286",
"ChannelName": "欢笑剧场4K",
"ext": ""
}, {
"UserChannelID": "102",
"ChannelNo": "3993",
"ChannelName": "中国交通",
"ext": ""
}, {
"UserChannelID": "101",
"ChannelNo": "3913",
"ChannelName": "CETV1(高清)",
"ext": ""
}, {
"UserChannelID": "100",
"ChannelNo": "3855",
"ChannelName": "CETV4",
"ext": ""
}, {
"UserChannelID": "97",
"ChannelNo": "4196",
"ChannelName": "求索纪录(4K)",
"ext": ""
}, {
"UserChannelID": "96",
"ChannelNo": "4195",
"ChannelName": "精彩影视(高清)",
"ext": ""
}, {
"UserChannelID": "95",
"ChannelNo": "4173",
"ChannelName": "CHC影迷电影(高清)",
"ext": ""
}, {
"UserChannelID": "94",
"ChannelNo": "4175",
"ChannelName": "CHC动作电影(高清)",
"ext": ""
}, {
"UserChannelID": "93",
"ChannelNo": "4174",
"ChannelName": "CHC家庭影院(高清)",
"ext": ""
}, {
"UserChannelID": "92",
"ChannelNo": "3933",
"ChannelName": "梨园",
"ext": ""
}, {
"UserChannelID": "91",
"ChannelNo": "3935",
"ChannelName": "书画",
"ext": ""
}, {
"UserChannelID": "90",
"ChannelNo": "3936",
"ChannelName": "茶频道(高清)",
"ext": ""
}, {
"UserChannelID": "88",
"ChannelNo": "595280747",
"ChannelName": "武术世界(高清)",
"ext": ""
}, {
"UserChannelID": "89",
"ChannelNo": "595278931",
"ChannelName": "文物宝库(高清)",
"ext": ""
}, {
"UserChannelID": "240",
"ChannelNo": "1463",
"ChannelName": "四川卫视.",
"ext": ""
}, {
"UserChannelID": "241",
"ChannelNo": "1461",
"ChannelName": "辽宁卫视.",
"ext": ""
}, {
"UserChannelID": "245",
"ChannelNo": "1457",
"ChannelName": "河北卫视.",
"ext": ""
}, {
"UserChannelID": "244",
"ChannelNo": "1444",
"ChannelName": "湖北卫视.",
"ext": ""
}, {
"UserChannelID": "243",
"ChannelNo": "1456",
"ChannelName": "贵州卫视.",
"ext": ""
}, {
"UserChannelID": "242",
"ChannelNo": "1458",
"ChannelName": "黑龙江卫视.",
"ext": ""
}, {
"UserChannelID": "246",
"ChannelNo": "1455",
"ChannelName": "东南卫视.",
"ext": ""
}, {
"UserChannelID": "230",
"ChannelNo": "1465",
"ChannelName": "江苏卫视.",
"ext": ""
}, {
"UserChannelID": "1037",
"ChannelNo": "595282174",
"ChannelName": "游戏竞技频道2",
"ext": ""
}, {
"UserChannelID": "1036",
"ChannelNo": "3474",
"ChannelName": "直播室221",
"ext": ""
}, {
"UserChannelID": "239",
"ChannelNo": "1445",
"ChannelName": "天津卫视.",
"ext": ""
}, {
"UserChannelID": "232",
"ChannelNo": "1459",
"ChannelName": "东方卫视.",
"ext": ""
}, {
"UserChannelID": "231",
"ChannelNo": "1466",
"ChannelName": "湖南卫视.",
"ext": ""
}, {
"UserChannelID": "234",
"ChannelNo": "1412",
"ChannelName": "浙江卫视.",
"ext": ""
}, {
"UserChannelID": "233",
"ChannelNo": "1464",
"ChannelName": "北京卫视.",
"ext": ""
}, {
"UserChannelID": "236",
"ChannelNo": "1460",
"ChannelName": "安徽卫视.",
"ext": ""
}, {
"UserChannelID": "235",
"ChannelNo": "1433",
"ChannelName": "深圳卫视.",
"ext": ""
}, {
"UserChannelID": "238",
"ChannelNo": "1447",
"ChannelName": "广东卫视.",
"ext": ""
}, {
"UserChannelID": "237",
"ChannelNo": "1442",
"ChannelName": "山东卫视.",
"ext": ""
}, {
"UserChannelID": "2025",
"ChannelNo": "4375",
"ChannelName": "云阳慢直播",
"ext": ""
}, {
"UserChannelID": "2024",
"ChannelNo": "4134",
"ChannelName": "2024测试",
"ext": ""
}, {
"UserChannelID": "1017",
"ChannelNo": "977",
"ChannelName": "直播室7",
"ext": ""
}, {
"UserChannelID": "1016",
"ChannelNo": "976",
"ChannelName": "直播室6",
"ext": ""
}, {
"UserChannelID": "1013",
"ChannelNo": "973",
"ChannelName": "直播室3",
"ext": ""
}, {
"UserChannelID": "1012",
"ChannelNo": "972",
"ChannelName": "直播室2",
"ext": ""
}, {
"UserChannelID": "1015",
"ChannelNo": "975",
"ChannelName": "直播室5",
"ext": ""
}, {
"UserChannelID": "1014",
"ChannelNo": "974",
"ChannelName": "直播室4",
"ext": ""
}]
\ No newline at end of file
package com.android.smart.terminal.iptv.aidl;
import android.os.Binder;
import android.os.IBinder;
import android.os.IInterface;
import android.os.Parcel;
import android.os.RemoteException;
//aidl接口
public interface IServiceCfg extends IInterface {
boolean getBoolean(String key, boolean defValue) throws RemoteException;
int getInt(String key, int defValue) throws RemoteException;
String getString(String key, String defValue) throws RemoteException;
boolean putBoolean(String key, boolean value) throws RemoteException;
boolean putInt(String key, int value) throws RemoteException;
boolean putString(String key, String value) throws RemoteException;
abstract class Stub extends Binder implements IServiceCfg {
private static final String DESCRIPTOR = "com.android.smart.terminal.iptv.aidl.IServiceCfg";
static final int TRANSACTION_getBoolean = 6;
static final int TRANSACTION_getInt = 5;
static final int TRANSACTION_getString = 4;
static final int TRANSACTION_putBoolean = 3;
static final int TRANSACTION_putInt = 2;
static final int TRANSACTION_putString = 1;
public Stub() {
this.attachInterface(this, DESCRIPTOR);
}
@Override
public IBinder asBinder() {
return this;
}
public static IServiceCfg asInterface(IBinder obj) {
if (obj == null) return null;
IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
return (iin instanceof IServiceCfg) ? (IServiceCfg) iin : new Proxy(obj);
}
@Override
public boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
switch (code) {
case TRANSACTION_putString:
data.enforceInterface(DESCRIPTOR);
boolean resultPutString = putString(data.readString(), data.readString());
reply.writeNoException();
reply.writeInt(resultPutString ? 1 : 0);
return true;
case TRANSACTION_putInt:
data.enforceInterface(DESCRIPTOR);
boolean resultPutInt = putInt(data.readString(), data.readInt());
reply.writeNoException();
reply.writeInt(resultPutInt ? 1 : 0);
return true;
case TRANSACTION_putBoolean:
data.enforceInterface(DESCRIPTOR);
boolean resultPutBoolean = putBoolean(data.readString(), data.readInt() != 0);
reply.writeNoException();
reply.writeInt(resultPutBoolean ? 1 : 0);
return true;
case TRANSACTION_getString:
data.enforceInterface(DESCRIPTOR);
String resultGetString = getString(data.readString(), data.readString());
reply.writeNoException();
reply.writeString(resultGetString);
return true;
case TRANSACTION_getInt:
data.enforceInterface(DESCRIPTOR);
int resultGetInt = getInt(data.readString(), data.readInt());
reply.writeNoException();
reply.writeInt(resultGetInt);
return true;
case TRANSACTION_getBoolean:
data.enforceInterface(DESCRIPTOR);
boolean resultGetBoolean = getBoolean(data.readString(), data.readInt() != 0);
reply.writeNoException();
reply.writeInt(resultGetBoolean ? 1 : 0);
return true;
case 1598968902: // Interface descriptor
reply.writeString(DESCRIPTOR);
return true;
default:
return super.onTransact(code, data, reply, flags);
}
}
private static class Proxy implements IServiceCfg {
private final IBinder mRemote;
Proxy(IBinder remote) {
mRemote = remote;
}
@Override
public IBinder asBinder() {
return mRemote;
}
@Override
public boolean getBoolean(String key, boolean defValue) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
boolean result;
try {
data.writeInterfaceToken(DESCRIPTOR);
data.writeString(key);
data.writeInt(defValue ? 1 : 0);
mRemote.transact(TRANSACTION_getBoolean, data, reply, 0);
reply.readException();
result = reply.readInt() != 0;
} finally {
reply.recycle();
data.recycle();
}
return result;
}
@Override
public int getInt(String key, int defValue) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
int result;
try {
data.writeInterfaceToken(DESCRIPTOR);
data.writeString(key);
data.writeInt(defValue);
mRemote.transact(TRANSACTION_getInt, data, reply, 0);
reply.readException();
result = reply.readInt();
} finally {
reply.recycle();
data.recycle();
}
return result;
}
@Override
public String getString(String key, String defValue) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
String result;
try {
data.writeInterfaceToken(DESCRIPTOR);
data.writeString(key);
data.writeString(defValue);
mRemote.transact(TRANSACTION_getString, data, reply, 0);
reply.readException();
result = reply.readString();
} finally {
reply.recycle();
data.recycle();
}
return result;
}
@Override
public boolean putBoolean(String key, boolean value) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
boolean result;
try {
data.writeInterfaceToken(DESCRIPTOR);
data.writeString(key);
data.writeInt(value ? 1 : 0);
mRemote.transact(TRANSACTION_putBoolean, data, reply, 0);
reply.readException();
result = reply.readInt() != 0;
} finally {
reply.recycle();
data.recycle();
}
return result;
}
@Override
public boolean putInt(String key, int value) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
boolean result;
try {
data.writeInterfaceToken(DESCRIPTOR);
data.writeString(key);
data.writeInt(value);
mRemote.transact(TRANSACTION_putInt, data, reply, 0);
reply.readException();
result = reply.readInt() != 0;
} finally {
reply.recycle();
data.recycle();
}
return result;
}
@Override
public boolean putString(String key, String value) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
boolean result;
try {
data.writeInterfaceToken(DESCRIPTOR);
data.writeString(key);
data.writeString(value);
mRemote.transact(TRANSACTION_putString, data, reply, 0);
reply.readException();
result = reply.readInt() != 0;
} finally {
reply.recycle();
data.recycle();
}
return result;
}
}
}
}
package com.android.smart.terminal.iptv.aidl;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.text.TextUtils;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.smart.terminal.iptv.aidl.IServiceCfg.Stub;
import com.topdraw.iptvlaunchertest.IptvConfig;
import com.topdraw.iptvlaunchertest.TestConfig;
public class ServiceCfg extends Service {
private static final String TAG = "ServiceCfg";
private final Stub mBinder;
private IptvConfig mConfig;
public ServiceCfg() {
this.mConfig = null;
this.mBinder = new Stub() {
@Override
public boolean getBoolean(String key, boolean defValue) throws RemoteException {
Log.d(TAG, "getBoolean() key = " + key + ", defValue = " + defValue);
return defValue;
}
@Override
public int getInt(String key, int defValue) throws RemoteException {
Log.d(TAG, "getInt() key = " + key + ", defValue = " + defValue);
return defValue;
}
@Override
public String getString(String key, String defValue) throws RemoteException {
String value = defValue;
if (TextUtils.isEmpty(key)) {
return value;
}
switch (key.toLowerCase()) {
case "service/serviceinfo/iptvauthurl":
value = mConfig.getAuthAddress();
break;
case "service/serviceinfo/iptvaccount":
case "service/serviceinfo/userid":
value = mConfig.getBusinessUserId();
break;
case "service/serviceinfo/iptvpassword":
value = mConfig.getBusinessPasswd();
break;
case "service/serviceinfo/stbid":
value = mConfig.getStbID();
break;
case "service/serviceinfo/usertoken":
value = mConfig.getValue("usertoken");
break;
case "service/serviceinfo/epgdomain":
case "service/serviceinfo/epginfo":
value = mConfig.getValue("epgdomain");
break;
case "service/serviceinfo/epggroupnmb":
value = mConfig.getEPGGroupNMB();
break;
case "service/serviceinfo/usergroupnmb":
value = mConfig.getUserGroupNMB();
break;
case "service/serviceinfo/productmodel":
case "service/serviceinfo/terminaltype":
value = IptvConfig.getStbType();
break;
case "service/serviceinfo/areaid":
value = mConfig.getValue("areaid");
break;
case "service/serviceinfo/countyid":
value = mConfig.getValue("countyid");
break;
case "service/serviceinfo/romversion":
case "service/serviceinfo/terminalversion":
value = IptvConfig.getSoftVersion();
break;
case "service/serviceinfo/platforminfo":
value = getPlatform();
break;
case "service/serviceinfo/manufacturerinfo":
value = "Fiberhome";
break;
case "service/serviceinfo/mac":
value = mConfig.getMac();
break;
case "service/serviceinfo/livechannels":
value = mConfig.getValue("livechannels");
break;
case "service/serviceinfo/stbhdflag":
value = "HD";
break;
case "service/serviceinfo/adshowstatus":
value = getADShowStatus();
break;
case "service/serviceinfo/iptvstate":
value = mConfig.getIPTVState();
break;
case "service/serviceinfo/ottcp":
value = mConfig.getOttCp();
break;
default:
Log.e(TAG, "getString() unknown key = " + key);
break;
}
Log.d(TAG, "getString() key = " + key + ", value = " + value);
return value;
}
@Override
public boolean putBoolean(String key, boolean value) throws RemoteException {
Log.d(TAG, "putBoolean() key = " + key + ", value = " + value);
return false;
}
@Override
public boolean putInt(String key, int value) throws RemoteException {
Log.d(TAG, "putInt() key = " + key + ", value = " + value);
return false;
}
@Override
public boolean putString(String key, String value) throws RemoteException {
Log.d(TAG, "putString() key = " + key + ", value = " + value);
return false;
}
};
}
private String getADShowStatus() {
boolean logoStatus = false;
boolean anmiStatus = false;
boolean authStatus = false;
try {
JSONObject jsonData = new JSONObject();
JSONArray arrayName = new JSONArray();
JSONArray arrayValue = new JSONArray();
arrayName.put("logo");
arrayValue.put(logoStatus ? "1" : "2");
arrayName.put("anmi");
arrayValue.put(anmiStatus ? "1" : "2");
arrayName.put("auth");
arrayValue.put(authStatus ? "1" : "2");
jsonData.put("adtype", arrayName);
jsonData.put("advalue", arrayValue);
String status = jsonData.toString();
Log.d(TAG, "getADShowStatus() status = " + status);
return status;
} catch (JSONException e) {
Log.e(TAG, "getADShowStatus() failed to generate JSON", e);
return null;
}
}
private String getPlatform() {
Log.d(TAG, "getPlatform() platform = " + TestConfig.platform);
return TestConfig.platform;
}
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "service on bind");
return mBinder;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
mConfig = IptvConfig.getInstance(this);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
public void onRebind(Intent intent) {
Log.d(TAG, "service on rebind");
super.onRebind(intent);
}
@Override
public void onStart(Intent intent, int startId) {
Log.d(TAG, "service start id=" + startId);
}
@Override
public boolean onUnbind(Intent intent) {
Log.d(TAG, "service on unbind");
return super.onUnbind(intent);
}
}
package com.topdraw.iptvlaunchertest;
import android.content.Context;
import android.util.Log;
import com.topdraw.iptvlaunchertest.common.JsonReader;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* iptv 参数
*/
public class IptvConfig {
private static final String TAG = IptvConfig.class.getSimpleName();
private static final Map<String,String> iptvConfigMap = new HashMap<>();
private static volatile IptvConfig instance = null;
public static final String IPTV_AUTH_URL = "iptvauthurl";
public static final String IPTV_ACCOUNT = "iptvaccount";
public static final String USER_ID = "userid";
public static final String IPTV_PASSWORD = "iptvpassword";
public static final String STB_ID = "stbid";
public static final String USER_TOEKN = "usertoken";
public static final String EPG_DOMAIN = "epgdomain";
public static final String EPG_INFO = "epginfo";
public static final String EPG_GROUP_NMB = "epggroupnmb";
public static final String USER_GROUP_NMB = "usergroupnmb";
public static final String PRODUCT_MODEL = "productmodel";
public static final String TERMINAL_TYPE = "terminaltype";
public static final String AREA_ID = "areaid";
public static final String COUNTY_ID = "countyid";
public static final String ROM_VERSION = "romversion";
public static final String TERMINAL_VERSION = "terminalversion";
public static final String MAC = "mac";
public static final String IPTV_STATE = "iptvstate";
public static final String OT_TCP = "ottcp";
public static final String LIVE_CHANNELS = "LiveChannels";
private IptvConfig(Context context){
JSONObject param = JsonReader.readJsonFromAssets(context,"iptv_param.json");
JSONArray channels = JsonReader.readJsonArrFromAssets(context,"livechannels.json");
Log.d(TAG, "IptvConfig param:"+param.toString());
Log.d(TAG, "IptvConfig channels:"+channels.toString());
for (Iterator<String> it = param.keys(); it.hasNext(); ) {
String key = it.next();
iptvConfigMap.put(key,param.optString(key,""));
}
iptvConfigMap.put("LiveChannels",channels.toString());
}
public static IptvConfig getInstance(Context context) {
if(instance == null){
synchronized (IptvConfig.class){
if(instance==null){
instance = new IptvConfig(context);
}
}
}
return instance;
}
public static String getStbType() {
return TestConfig.stbType;
}
public static String getSoftVersion() {
return "1";
}
public String getAuthAddress() {
return iptvConfigMap.get(IPTV_AUTH_URL);
}
public String getBusinessUserId() {
return iptvConfigMap.get(IPTV_ACCOUNT);
}
public String getBusinessPasswd() {
return iptvConfigMap.get(IPTV_PASSWORD);
}
public String getStbID() {
return iptvConfigMap.get(STB_ID);
}
public String getValue(String key) {
return iptvConfigMap.get(key);
}
public String getEPGGroupNMB() {
return iptvConfigMap.get(EPG_GROUP_NMB);
}
public String getUserGroupNMB() {
return iptvConfigMap.get(USER_GROUP_NMB);
}
public String getMac() {
return iptvConfigMap.get(MAC);
}
public String getIPTVState() {
return iptvConfigMap.get(IPTV_STATE);
}
public String getOttCp() {
return iptvConfigMap.get(OT_TCP);
}
}
package com.topdraw.iptvlaunchertest;
import android.Manifest;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.webkit.WebSettings;
......@@ -12,6 +13,9 @@ import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import com.android.smart.terminal.iptv.aidl.ServiceCfg;
import com.topdraw.iptvlaunchertest.common.Authentication;
public class MainActivity extends AppCompatActivity {
private WebView webView;
......@@ -23,6 +27,7 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startService(new Intent(this, ServiceCfg.class));
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
......@@ -32,10 +37,10 @@ public class MainActivity extends AppCompatActivity {
});
webView = findViewById(R.id.webview);
initWeb();
initObject();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissions,0);
}
initObject();
webView.loadUrl(TestConfig.homeUrl);
}
......@@ -51,6 +56,7 @@ public class MainActivity extends AppCompatActivity {
//注册接口
private void initObject(){
webView.addJavascriptInterface(new Authentication(MainActivity.this),"Authentication");
if(TestConfig.testDist==TestConfig.Skyworth){
webView.addJavascriptInterface(new com.topdraw.iptvlaunchertest.sky.STBAppManager(this),"STBAppManager");
}else if(TestConfig.testDist==TestConfig.FiberHome){
......
......@@ -9,6 +9,11 @@ public class TestConfig {
//测试目标盒子
public static int testDist = FiberHome;
//测试平台
public static final String platform = "HUAWEI";//"ZTE"
//设备名称
public static final String stbType = "IPTV-TEST";
//启动页地址
public static final String homeUrl = "http://139.196.145.150:8060/JsAppLaunch/JsAppStartUp.html";
public static final String homeUrl = "http://172.23.51.26:8070/AppEngine/apps/startApp/jsview.html";
}
......
package com.topdraw.iptvlaunchertest.common;
import android.content.Context;
import android.webkit.JavascriptInterface;
import com.topdraw.iptvlaunchertest.IptvConfig;
import java.util.HashMap;
public class Authentication {
private static final HashMap<String,String> valueMap = new HashMap<>();
public static final String UserID = "UserID";
public static final String STBType = "STBType";
public static final String STBVersion = "STBVersion";
public static final String STBID = "STBID";
public static final String EPGDomain = "EPGDomain";
public static final String UserToken = "UserToken";
public static final String SessionID = "SessionID";
public Authentication(Context context) {
valueMap.put(UserID,IptvConfig.getInstance(context).getValue(IptvConfig.USER_ID));
valueMap.put(STBType, IptvConfig.getStbType());
valueMap.put(STBVersion, IptvConfig.getSoftVersion());
valueMap.put(STBID, IptvConfig.getInstance(context).getStbID());
valueMap.put(EPGDomain, IptvConfig.getInstance(context).getValue("epgdomain"));
valueMap.put(UserToken, IptvConfig.getInstance(context).getValue("usertoken"));
valueMap.put(SessionID, IptvConfig.getInstance(context).getValue("sessionid"));
}
@JavascriptInterface
public String CTCGetConfig(String encryToken){
return valueMap.get(encryToken);
}
@JavascriptInterface
public String CTCSetConfig(String key,String value){
return valueMap.put(key,value);
}
}
package com.topdraw.iptvlaunchertest.common;
import android.content.Context;
import android.content.res.AssetManager;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class JsonReader {
public static JSONObject readJsonFromAssets(Context context, String jsonFileName) {
AssetManager assetManager = context.getAssets();
JSONObject jsonObject = null;
try (InputStream inputStream = assetManager.open(jsonFileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
// 将 JSON 字符串转换为 JSONObject
jsonObject = new JSONObject(stringBuilder.toString());
} catch (IOException | org.json.JSONException e) {
e.printStackTrace();
}
return jsonObject;
}
public static JSONArray readJsonArrFromAssets(Context context, String jsonFileName) {
AssetManager assetManager = context.getAssets();
JSONArray jsonArray = null;
try (InputStream inputStream = assetManager.open(jsonFileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
StringBuilder stringBuilder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
// 将 JSON 字符串转换为 JSONObject
jsonArray = new JSONArray(stringBuilder.toString());
} catch (IOException | org.json.JSONException e) {
e.printStackTrace();
}
return jsonArray;
}
}