From b40abb9bc098e02b5243c460770822cb8b43c289 Mon Sep 17 00:00:00 2001 From: zlzw <583819556@qq.com> Date: Mon, 25 Sep 2023 09:54:39 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8DPK=E8=BF=87=E7=A8=8B?= =?UTF-8?q?=E4=B8=AD=E6=8C=82=E5=90=8E=E5=8F=B0=E5=AF=BC=E8=87=B4=E6=91=84?= =?UTF-8?q?=E5=83=8F=E5=A4=B4=E5=85=B3=E9=97=AD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yunbao/common/utils/LogUtil.java | 4 +- .../yunbao/common/utils/PluginManager.java | 39 ++++++++----- .../res/mipmap-mdpi/icon_rank_top_box.png | Bin 7155 -> 22091 bytes .../live/views/LivePushRyViewHolder.java | 53 ++++++++++++++++-- .../yunbao/live/views/LiveRoomViewHolder.java | 4 +- 5 files changed, 79 insertions(+), 21 deletions(-) diff --git a/common/src/main/java/com/yunbao/common/utils/LogUtil.java b/common/src/main/java/com/yunbao/common/utils/LogUtil.java index b5deb1c93..d3503a34d 100644 --- a/common/src/main/java/com/yunbao/common/utils/LogUtil.java +++ b/common/src/main/java/com/yunbao/common/utils/LogUtil.java @@ -158,7 +158,7 @@ public class LogUtil { public static void shareFile(Context context) { - try { + /* try { IMLoginModel bean = IMLoginManager.get(context).getUserInfo(); boolean isAnchor=false; if(bean!=null){ @@ -170,7 +170,7 @@ public class LogUtil { } } catch (Exception e) { return; - } + }*/ /* if (PermissionChecker.checkCallingOrSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PERMISSION_GRANTED) { ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100); return; diff --git a/common/src/main/java/com/yunbao/common/utils/PluginManager.java b/common/src/main/java/com/yunbao/common/utils/PluginManager.java index fc0ef13cf..17e723687 100644 --- a/common/src/main/java/com/yunbao/common/utils/PluginManager.java +++ b/common/src/main/java/com/yunbao/common/utils/PluginManager.java @@ -49,17 +49,17 @@ public class PluginManager { } public boolean isDownloadApk() { - if(!CommonAppConfig.IS_PLUGIN_MODEL){ + if (!CommonAppConfig.IS_PLUGIN_MODEL) { return true; } - return new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin_download" + File.separator + "anchorPlugin.apk").exists(); + return new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin_download" + File.separator + "anchorPlugin.apk.lock").exists(); } /** * 加载主播插件 */ public void loadAnchorPlugin(DialogInterface.OnDismissListener dismissListener) { - if(!CommonAppConfig.IS_PLUGIN_MODEL){ + if (!CommonAppConfig.IS_PLUGIN_MODEL) { dismissListener.onDismiss(null); return; } @@ -73,7 +73,8 @@ public class PluginManager { e.printStackTrace(); } File sdk = new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin_download" + File.separator + "anchorPlugin.apk"); - if (!sdk.exists()) { + if (!new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin_download" + File.separator + "anchorPlugin.apk.lock").exists() || !sdk.exists()) { + Log.i(TAG, "loadAnchorPlugin: 插件未下载"); if (StringUtil.isEmpty(anchorPluginDownloadUrl)) { Log.e(TAG, "主播下载地址为空"); return; @@ -97,8 +98,12 @@ public class PluginManager { * @param outDir 解压路径 */ private void loadFaceSo(File plugin, String outDir) { - if(!new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin"+File.separator+"lib").exists()) { - unzip(plugin.getAbsolutePath(), outDir, ".so"); + if (!new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin" + File.separator + "lib.lock").exists()) { + Log.i(TAG, "loadFaceSo: lib插件未解压"); + if (unzip(plugin.getAbsolutePath(), outDir, ".so")) { + new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin" + File.separator + "lib.lock").mkdirs(); + Log.i(TAG, "loadFaceSo: lib插件解压"); + } } String[] abis = Build.SUPPORTED_ABIS; String abi = Arrays.asList(abis).contains("arm64-v8a") ? "arm64-v8a" : "armeabi-v7a"; @@ -108,8 +113,8 @@ public class PluginManager { try { Field field = Class.forName("com.faceunity.wrapper.faceunity$LoadConfig").getDeclaredField("sLoadedLibrary"); field.setAccessible(true); - field.set(null,true); - }catch (Exception e){ + field.set(null, true); + } catch (Exception e) { e.printStackTrace(); } } @@ -121,8 +126,12 @@ public class PluginManager { * @param outDir 解压路径 */ private void loadFaceBundle(File plugin, String outDir) { - if(!new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin"+File.separator+"assets").exists()) { - unzip(plugin.getAbsolutePath(), outDir, ".bundle"); + if (!new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin" + File.separator + "assets.lock").exists()) { + Log.i(TAG, "loadFaceBundle: bundle未解压"); + if (unzip(plugin.getAbsolutePath(), outDir, ".bundle")) { + Log.i(TAG, "loadFaceBundle: bundle解压"); + new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin" + File.separator + "assets.lock").mkdirs(); + } } try { Object BUNDLE_AI_FACE = Class.forName("com.yunbao.faceunity.utils.FURenderer").getField("BUNDLE_AI_FACE").get(null); @@ -131,6 +140,7 @@ public class PluginManager { Class.forName("com.yunbao.faceunity.utils.FaceUnityConfig").getField("BUNDLE_FACE_BEAUTIFICATION").set(null, outDir + File.separator + "assets" + File.separator + BUNDLE_FACE_BEAUTIFICATION); } catch (Exception e) { e.printStackTrace(); + new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin" + File.separator + "assets.lock").delete(); } } @@ -148,6 +158,7 @@ public class PluginManager { Log.d(TAG, "加载成功 " + dir + File.separator + file); } else { Log.e(TAG, "不存在 " + dir + File.separator + file); + new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin" + File.separator + "lib.lock").delete(); } } @@ -160,6 +171,7 @@ public class PluginManager { @Override public void onSuccess(File file) { Log.d(TAG, "下载成功 " + file); + new File(CommonAppContext.sInstance.getFilesDir().getAbsolutePath() + File.separator + "plugin_download" + File.separator + "anchorPlugin.apk.lock").mkdirs(); loadAnchorPlugin(dismissListener); } @@ -170,7 +182,7 @@ public class PluginManager { @Override public void onError(Throwable e) { - + downloadAnchorSdk(dismissListener); } }); } @@ -187,13 +199,14 @@ public class PluginManager { FileOutputStream out; byte buffer[] = new byte[1024]; try { + Log.i(TAG, "unzip: " + outDir); ZipInputStream zis = new ZipInputStream(new FileInputStream(zip)); ZipEntry entry = zis.getNextEntry(); while (entry != null) { String name = entry.getName(); if (entry.isDirectory()) { File newDir = new File(outDir + entry.getName()); - newDir.mkdir(); + newDir.mkdirs(); } else if (name.endsWith(suffix)) { File outputFile = new File(outDir + File.separator + name); String outputPath = outputFile.getCanonicalPath(); @@ -206,7 +219,7 @@ public class PluginManager { outputFile = new File(outputPath, name); outputFile.createNewFile(); out = new FileOutputStream(outputFile); - + Log.i(TAG, "unzip: >>" + outputFile.getAbsolutePath()); int tmp = 0; while ((tmp = zis.read(buffer)) > 0) { out.write(buffer, 0, tmp); diff --git a/common/src/main/res/mipmap-mdpi/icon_rank_top_box.png b/common/src/main/res/mipmap-mdpi/icon_rank_top_box.png index 572bdb1b2b0299be4ab1462e5f03a6c9028d7b43..6241af8859d3aa1484bb9a8905eb14b8a9b7c0ce 100644 GIT binary patch literal 22091 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 FV1hP(!72a% literal 7155 zcmVPx&08mU+MMrQZP%ll-@c)0%HNvUw~ZOmZkHFtoC=f{-c}h z;C9ukm+JXu%ZsG)dz|~4T#Ywv7?)m#KTzIMVTW#lYi|c57;a!91=V!u1kMQ7L zuk35f^Yr>nUF2ny?%+v|{ZoUNWX`S3`EH-`Y^wOBvF`3jlZc@1{=DVlSElaK>fJl9 zaeLqWG<*GDkz#i0?`6Z_YQx<@fy(Cnp}+OuQkqqF>yx(f^<~9teC+K!eDhYVW1sVe ziQ`Oe=I~IW)ZO;5Y|-srx4_Br_8L~yKePQog`-=@rI6>XSH#|T)%HGT{-@UdwBO6r z^!>-^d2`vczVWwEzuf2e>$%{qj^CA=3$(DRXh+)-u0%U{Lu;P6g+y8cO*-AlFmoyu5*$}~;e`MAri zg567iXW@(E2BC;8T0xHKN|X=DU8`LQ>}b`29d%;QFSE`0e%6vf_em z)-X|te4^scM2prvZ@*o|^M+=84?+FUvm!x$_OrI%R=q%4o3ku({^9t{v-e?-;OU9J zXL`TSTbc3+J*zupk0L}vYpBee+LabpxuEg&V`0cgWH2_@V}#Uc2`jfseaAe0YLv?L zk4m*>HaKL7w2 zaY;l$RCwC#n0ru@*%^nup}4Mlnc`(zx9XxImR3|m1iB_97;ak)k_?;3C8Ll|ng|YF zNGI4?rqB!pD~3*m$Dr}3lNOz`ydoa6HG!rAY?e*JT2x%&G0dQ$>u1tI8*QV{Y+3KnArOR<8_ zrdF`>2Pp8t3jA#j{Lp~}5Cxw2Kps3?7S4Q~`scmpx^0^;#@pN1E`b=>@@V7~DGT=!$@Sr5jnOeeJSN1lW0?L7-gdduMC2u7KKF*EsLJE+B0FQtG zmzTH0yjg6vU4gTJcyz?aJICM+Q}CnC0@{GR5gccMLkf_E4_*?41+HvI1vUwE2q+8j z_87dQDX=XFlgxquoPz+DNmqxt^V!Y{YzDkH#l%EL#sKkzkl>JaaTYkY0lg;DDX_%= zTbMKRr3Rc*K=(p?Ok`Yd@8#Y&BqBa0J~%$a?%-WWfo)$9;U9ruHe(|E>?!cTvmk&> z1K>pmw1LSQ;o!lT$ljsRJEJ#m4)yk;IK&4B2fvKYnG8oq!2 zd=wnCw%)okdIJ>vp-k1O*L5F?wB_J`nF6BVjZ(ls23RbXv{0GKMIorJ>}aA49Dn?{ zR3X_QCyg*61`e(8o;y~6Euf$OHdO!4w6vC%hL(2I=)a#2w1R+}z>ORC4j-i~1AYHvd8Wt55wPz1=)vB;BFiflf1P}v~ z47VD^;NW0&WgkpK9D}~cPoMT1b3R$)<5Ix{edV2!rd6o z?zO8qoLv}ZSnRG?3rl2IT1aZbjI>mlrI!b{sDlY?2a7x#5_MlVou04BV#pqsiEDIEX z0R}dZVRg&zDF=F3uUAogUG=pMUPT2AgNmyZ z=a7QTqi|$qXJ%&73NE-!iV`bWBiNmfu0Vm5!%@PS1_gnOPGUiU7sCr1U`g`%*1W<8 z&CP|%jJ$lwvtdkr*8_<%L!`-5ip63sCRH2}?V!K~F9*wL1v}a7vJ@?j0HE&d)T=FK znbkUCQLB*=xB)L#s~)~ZZ`HT!B54Oz$%L%rEE--G53vHj@(K{=mR>xH$p#WLv4X@z z&EyIsNI_tcV0Rw6VsQk}2Xb`!#jah^=-m%Gf#pRq!1R*jS@~SCIF;|_R+9?gmsF$4 zXsrPiQJqJS$FggGd{i^42gfjgw2EWwaVAwvqr#`K*d*DNX&0=2%eu~RLR={wcA zx#~u%+5$0%1O=g?$;l^@CZmFPj#rVCWJKo|3a*|zdi0`^a4DNsz@J>fYGKiqBB4;Y z8!L+9a5!=~wjq|w(Jhf&?ic$N7?6SisRSNDjbMPEs^Qm&P|e&_Zl1~N#?4oz*6?d+ z16;X)8ALk(1wR1=^C<;vq98>JF}GOEW^*n?!7|dQZqV7R=)r(0S0yuRReBI)jw3M$ zy`Fq%(mHs&B|P3Ea&9arI9hO9L@q95XJ4cgP>X?*JP-vI67~yowg`n%sTBPSkyOg! zO#E<>7%Kn+Ve-5hHyi>D7kd!lg2h~AmyxfLNRR?}N>ChOg*zyi1HT;*1Mb+s&axdT z27}=m0B>5Y*)pcpwdl;~9A88EY86P*s!(g3h(r#sg6_!-G=hQ(TEQh~g-g_fOWE1f zEI3P6gm2GKZt~HJfYt=)gFvCc{#ktH3m>nD{Vi^TFc$orHK|;MoQpdi0)UH^i^cuR z^Y}(3zL1NR;(WPW!E{!z==~WVE?Z_-@SCz@3B|?54WOVnrPyG&ul>Hhp~aw0NhvN) zffoZvkeSS7W|a&%Nb254VsJhAKKWlIogh$GSOGQfZWmmo&P2DtfNfuJ7C3dvNFHg9 zA1}%&LcqSDNLXmEH$%$D;1A$qVbQTn)COT;iVWQ9az%t(gUXkqJ)^>h;UivK(l0F% z%N4MDkU;x&t%_g>4lu*%PCyD~!ziF)Kq=S(rM5J*H=IUg8w>;W*IMcgDG6{lAt529 z7#ygRAPXuq8%*Z7eK-bH$yCw7WEN6wae-F>3X;ghxvSKP=pu9hHt^}XvzU@oE2&3k zj-SaX${`lEqzfeuD+CAc3;eN;ShOU#eHF{X3YhsCGVH|uc^WPh%!1uiX(>~{lBbvS zmzOIPUJO>)+Ad>Pe<_oB-~cN;+(E&@86QnZ!7-@xbX{HDX;gJ_S^e0^-;Wtk`3VU- zcI-$%4opdCOu$?;S>i|xs*4)}1r>Udsy31Ca*-qUL?sUeb z?Km*3lQA`>Y(m%@?uJQX07IzcWfV;227_S|BQ_cdDBwy65@p4xfIblzYJkN9Q%_VF-FhgbtOz!Xg&pH3|oJ+D?!zO!MfeMuPn!y_=7BtUV7J+KDUx^4n!YfM=0V@QSQ=ciQmr@BXzhLlROk;dS-( zVTNI}RK^w|g2m7f-sTA)1UWvqPNV`E628}REok;xj_PG*2(K42*uV92s0z?E+irC2 zz%uA9VXvWNH+aLtyVX8&!VHVYA;tX7-NW~CLGMlIw1E*DK1Drn9{GT6B`6Vg?`Aat zwji1v6@KjVm;h^#JM+JK4FWeHaESsaMKquW9WH~U4wAxHrq*E*D8L!kW(CqRC1s@r z>4<=>0)rY=hVJfbZ5=Fvk>1Y;f~~AOWbfGF?38HsbHQa@Bm`IlmH8K6gTMd?lpz$31x&q0@{8mGYJ7-3qB?)@E`;h zg21dF4i4#qjV%#ifDm}bV`j6Z3uVjXz_o8M0+7L}-iMkWxR3K}0gff$kOh+>ZU~%1 zb`K7&W#3kZJAxD00*oNw7X<piCTCR@wgt5qfuUAZ=3nsd3)LAo59m~b|M=K@VYvHR zmCA+)00SGXQ0UUuglA{#Tdg+GhE>I=06~AU3KsLeK&S!)0TGZ52P3}jhB4_Sa0f%5k6W&fJXFSwKLc zR*6K=pHvHeE^vnl73BD0GBXxIB;sqZyl|AGdf3vTM+nSbA41SQJluGraR)}w+uNog z4PpMUygY@s1zWk|j~Q?XI)!O)sA{m4ebX9~bKP1~Zmr0Gd!hs=h{ejpY=AtXl1GqX zaKATGzbXU_v=~8LvYN&SsM$0prE|_ej|2!6m_UD0BK(Y>5ris$T=)6RvB_b5MDMfc zSp;4Sh5;OlS{of~ns;9^aJ0dI{~@M+N2I@q~v z*I1)i-nF5M|u28E@ zH&Ig6%1%hAbM3L?Pw#II@+4A78-5j5p@vg%$p*!u3WWv$iRP~bGx*XM>r zq7d$hFeK`*2nyJqh|;5gvjsF{LckD4RiDaKArU|!s9+IDOq5O>o|&znDo{HB0`1oM z2!6_+7qBV-Q;)g6B!2GD6UopU-+I|B)ky0KuW^LDo$NOwRh;_eC0vz;6_Z#HcB1@Q|dD zt6gMNHX1PkvBco=8$uKnj~k7|6CeUKtz%}PNh-wFnP+h<0W5?02;NMb8W9zg`*1CQ zn(uk?WDc%6HaRdn2lD}3zr*Zs#2l|)?K)}+etw_>RL}(kcA$oEn;_U$vOekfl(z*} zYNAOD1ZkjbI?{>v2(8s@;jcBpkOcNP757BDNGV1mf`23aom{QtMrGU-#R`Mp9dM_k zJkaeFgCjseE2L6p2I>PXw#`1fA1BwZwf55=2@(7vadyZWWZ5_{@Qgo!n1m}w?SG(W zXzK3WNB3}yzIyfFeW&;Rt+=7(Mk5gcvIPXesgmC;KtODPrlw};d4FuDV2?%DthlTV*MMW@K10{9kF zgH=^pcxij~@_szt-wz11?W$i35&S4|f}F62KA&R_5pY02=R*h}?&5{gy$27An~M)L zBa7VFwVgw7o3z1_lD8JB;5>?pHCL7ZgS{8eljz%1nMi}ou>G@Cm?jxJfcG@3X--qW{7kOocMPO-I`w+6W; zm&-_cBHU*5bE6!mi9JiHtSykL3lj*$##EKcj*gAbmD=y%Ez0$iXCWkGV-r;pxm>Pb zfB|KrD*CmBTLk9?iv-)Gl^_2J7X!q=A&8!y?L(JGA6>nA6|Iy;^B(SRZrPQ~55W0|AAi>FEcfk48rypyx~;o<^X(uc2m z0GE5>Y$-O#D^~0wLsC-{NdtDRT3yX=lkl7%kw{?Jh5L+yY}DjZxm1^t1_*c=oK-mQ zd~xTmS?A7W+1X9fvFn#ko;i6|2Y;l7FZM5`JLe%-G;g!a^#qmyADfGy>Y=N>JUaTg zEANxMzfTVhO-%s-P6X@MZ}`jW5O8}{ex>-UcK||V{vL8}mftDZELZU-$fiG_Jp!Ez z<4)bGPzYEUb(n!PliMs41Rw*k`0OpTOuJ(*D6oJ1<)uqsqK7O_o;-8rmOK$?6^jV) zr9kkI#gF+t!Y0CCSEQ&YnZstd=F69-FHZx3p~pkpxk`W+2^;>`zS*m`4Mt&@PT9KE zO@|Hvo7AB$HYtumO%ppdu76TW>On(F49*}^&}Iq(fdc`Jy@2)}It0=w&{;QN>fO-G z==uBfV_B9|OrbPKj+6B~d36-$drq>3y>zmSACi7Nz1_QA*093|%U^3>YPAX-uUF)7 zJ#e}nhygSB_7l(1ZlL)YP=Va=8T5O45rI$$9)v9uAkY*B2!V=!Ft07b0Oh)K_t&Sp zJ0hTNgVyKHTE8F{ce1<}@e4e~;(+~v8tMhB{elt@;DOj35rgvuGT`=A?^0K)eQ?zu z9wE?C3QffJ_x5ao{X?A+ff3BUr5cYp1c=~K$TdRa44(=3R3He*;jM!;rLU<;6s-B& zvMzlB-ffT~1w0OA7R0+o$}%}fW0}a2B98+ILK`(3M1bu>|HhR;1wV}O8cPNmQR9rf zLkPmVrtLwPFbRiAI2TjXG$96;JRE5b2!R(#ipAs9DcBJPX;MI@&9S-_2K>x8pDk_{ zGwh#wAHyqDOrR0tUedjQ5Kyv#w~0*`6hm+bf`yauqvaE5brMpLi!7xi8fULpq+rD~ zq!`fQdUvEC3{JiNbwgLx)5kq*UkL2JT5I4oSv2yCF-!!)HBdkRNFZ6X2|NvtUYHTqxD3lTx?J zl7g67@T?Fu&O!`40MdUEFI5dvu67{;jTjSM_7PCMtSS|q_fq!D!yz*GFge4aK$jx~ zTB+2_jn9HZ#o)OxAP8NfYZ!HS=_k70*EL;3{Z=CYJ^CU7@%sq=R!UWw=u*QnE+P;F zio%&gYQCqRCZ-_66CrjM6qaT|iS7iH?p~5~SFcm|hH-+w|337u74h;NWKl2IZKe3T zN#dc4iw`Nl3n^gd)PBG{&6I-eKb-}U6yy(;gUse3ns;zf00@9a3<5hD#WcG~YC|o& zo>k_ZlzoOU5dgy$ucdTSra%B}Z)O(oF!UVcW3sRz{5pQuv_ADuYbnKIwhgtwo?>K0 zjn{IxTG?d$j8BAAe;24(fCesB-zx$TSj_QuGE(j-uGv=g5xhygmGbwtRdFYUBd~#O p)ql3Op#JYg>#e~1ece~4`VBA0ieDgn>Bs;8002ovPDHLkV1iZJbF=^e diff --git a/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java index 37aca3580..36b819374 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java @@ -76,6 +76,7 @@ import cn.rongcloud.rtc.api.RCRTCMixConfig; import cn.rongcloud.rtc.api.RCRTCRemoteUser; import cn.rongcloud.rtc.api.RCRTCRoom; import cn.rongcloud.rtc.api.RCRTCRoomConfig; +import cn.rongcloud.rtc.api.callback.IRCRTCEngineEventListener; import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback; import cn.rongcloud.rtc.api.callback.IRCRTCResultDataCallback; import cn.rongcloud.rtc.api.callback.IRCRTCRoomEventsListener; @@ -85,6 +86,7 @@ import cn.rongcloud.rtc.api.stream.RCRTCVideoStreamConfig; import cn.rongcloud.rtc.api.stream.RCRTCVideoView; import cn.rongcloud.rtc.base.RCRTCParamsType; import cn.rongcloud.rtc.base.RCRTCRoomType; +import cn.rongcloud.rtc.base.RCRTCVideoEventCode; import cn.rongcloud.rtc.base.RTCErrorCode; import cn.rongcloud.rtc.core.CameraVideoCapturer; import cn.rongcloud.rtc.core.RendererCommon; @@ -123,6 +125,7 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX private ImageView avatarOther; private LinearLayout goto_room_view; private boolean isPk = false; + private boolean isNeedOpenCamera = false; //修改上面主播的头像 @Subscribe(threadMode = ThreadMode.MAIN) @@ -175,7 +178,7 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX @Override public void onFailed(RTCErrorCode rtcErrorCode) { - Log.e("ry", "远端失败" + list.size()); + Log.e("ry", "远端失败" + list.size() + "|errorCode:" + rtcErrorCode.toString()); ToastUtil.show(mContext.getString(R.string.live_pk_link_error)); } }); @@ -495,10 +498,10 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX btn_close.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - DialogUitl.showSimpleDialog(mContext,WordUtil.isNewZh()? "是否要斷開連麥?":"Do you want to disconnect Link?", new DialogUitl.SimpleCallback() { + DialogUitl.showSimpleDialog(mContext, WordUtil.isNewZh() ? "是否要斷開連麥?" : "Do you want to disconnect Link?", new DialogUitl.SimpleCallback() { @Override public void onConfirmClick(Dialog dialog, String content) { - Log.i("PK----->", "updateSub: "+isPk+"|"); + Log.i("PK----->", "updateSub: " + isPk + "|"); aheadOfScheduleEndPK(mPkUid, CommonAppConfig.getInstance().getUserBean().getUserNiceName(), (String) tv_avatarOther_name.getTag()); //断开连麦 LiveRyAnchorActivity.isDRPK = 0; @@ -695,10 +698,34 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX //设置摄像头最大缩放比例 boolean zoom = RCRTCEngine.getInstance().getDefaultVideoStream().setCameraZoomFactor(1.0f); // ToastUtil.show("设置比例="+zoom); + Log.i("摄像头", "onSuccess: 打开摄像头"); + isNeedOpenCamera = false; } @Override public void onFailed(RTCErrorCode errorCode) { + Log.i("摄像头", "onFailed: 打开摄像头失败 " + errorCode); + } + }); + RCRTCEngine.getInstance().registerEventListener(new IRCRTCEngineEventListener() { + @Override + public void onKicked(String roomId, RCRTCParamsType.RCRTCKickedReason kickedReason) { + + } + + @Override + public void onError(RTCErrorCode errorCode) { + super.onError(errorCode); + Log.i("摄像头", "onError: 错误码" + errorCode); + } + + @Override + public void onLocalVideoEventNotify(RCRTCVideoEventCode event) { + super.onLocalVideoEventNotify(event); + Log.i("摄像头", "onLocalVideoEventNotify: 本地视频事件" + event.code); + if (event == RCRTCVideoEventCode.END_CAMERA_ERROR_UNKNOWN) { + isNeedOpenCamera = true; + } } }); //设置摄像头最大缩放比例 @@ -918,6 +945,24 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX @Override public void onResume() { mPaused = false; + Log.i("摄像头", "onResume: " + isNeedOpenCamera); + if(isNeedOpenCamera){ + RCRTCEngine.getInstance().getDefaultVideoStream().startCamera(new IRCRTCResultDataCallback() { + @Override + public void onSuccess(Boolean data) { + //设置摄像头最大缩放比例 + boolean zoom = RCRTCEngine.getInstance().getDefaultVideoStream().setCameraZoomFactor(1.0f); + // ToastUtil.show("设置比例="+zoom); + Log.i("摄像头", "onSuccess: 打开摄像头"); + isNeedOpenCamera = false; + } + + @Override + public void onFailed(RTCErrorCode errorCode) { + Log.i("摄像头", "onFailed: 打开摄像头失败 " + errorCode); + } + }); + } } @Override @@ -1057,6 +1102,6 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX } else if (event.getType() == LIVE_PK_ING) { isPk = true; } - Log.i("PK----->", "updateSub: "+isPk+"|"+event.getType()); + Log.i("PK----->", "updateSub: " + isPk + "|" + event.getType()); } } diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index eb35482d8..e1320c7e6 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -2341,11 +2341,11 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis } if (Integer.parseInt(bean.getRedVal()) > 2) { mRedVal.setVisibility(View.VISIBLE); - mRedVal.setText(bean.getRedVal() + "連勝"); + mRedVal.setText(bean.getRedVal() + (WordUtil.isNewZh()?"連勝":"Win")); } if (Integer.parseInt(bean.getBlueVal()) > 2) { mBlueVal.setVisibility(View.VISIBLE); - mBlueVal.setText(bean.getBlueVal() + "連勝"); + mBlueVal.setText(bean.getBlueVal() + (WordUtil.isNewZh()?"連勝":"Win")); } mPkRankTopIcon.setVisibility(View.VISIBLE); ImgLoader.display(mContext, bean.getPkTopImgUrl(), mPkRankTopIcon);