package com.shayu.phonelive.activity; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.util.Log; import android.view.Display; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityOptionsCompat; import androidx.core.app.NotificationManagerCompat; import com.alibaba.android.arouter.facade.annotation.Route; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.blankj.utilcode.util.LogUtils; import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.PlaybackException; import com.google.android.exoplayer2.Player; import com.google.android.exoplayer2.ui.AspectRatioFrameLayout; import com.google.android.exoplayer2.ui.StyledPlayerView; import com.google.android.exoplayer2.video.VideoSize; import com.shayu.phonelive.AppContext; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.bean.AdBean; import com.yunbao.common.bean.ConfigBean; import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.custom.CircleProgress; import com.yunbao.common.event.DataUserInfoEvent; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.CommonHttpConsts; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.interfaces.CommonCallback; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.imrongcloud.RongcloudIMManager; import com.yunbao.common.utils.DownloadUtil; import com.yunbao.common.utils.L; import com.yunbao.common.utils.LogUtil; import com.yunbao.common.utils.MD5Util; import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.live.views.LauncherAdViewHolder; import com.yunbao.main.activity.EntryActivity; import com.yunbao.main.activity.MainActivity; import com.yunbao.main.http.MainHttpConsts; import com.yunbao.main.http.MainHttpUtil; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import myname.pdlive.shayu.BuildConfig; import myname.pdlive.shayu.R; /** * Created by cxf on 2018/9/17. */ @Route(path = RouteUtil.PATH_LAUNCHER) public class LauncherActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "LauncherActivity"; private static final int WHAT_GET_CONFIG = 0; private static final int WHAT_COUNT_DOWN = 1; protected Context mContext; private Handler mHandler; private ViewGroup mRoot; private ImageView mCover; private ViewGroup mContainer; private CircleProgress mCircleProgress; private List mAdList; private List mImageViewList; private int mMaxProgressVal; private int mCurProgressVal; private int mAdIndex; private int mInterval = 2000; private View mBtnSkipImage; private View mBtnSkipVideo; private LauncherAdViewHolder mLauncherAdViewHolder; private boolean mPaused; private int mVideoLastProgress; private boolean mForward; private StyledPlayerView mPlayerView; private ExoPlayer mPlayerForExo; @Override public Resources getResources() { Resources res = super.getResources(); Configuration config = new Configuration(); config.setToDefaults(); config.locale = IMLoginManager.get(this).getLocaleLanguage(); res.updateConfiguration(config, res.getDisplayMetrics()); return res; } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); super.onCreate(savedInstanceState); EventBus.getDefault().register(this); setStatusBar(); setContentView(R.layout.activity_launcher); mContext = this; mRoot = findViewById(R.id.root); mCover = findViewById(R.id.cover); mCircleProgress = findViewById(R.id.progress); mContainer = findViewById(R.id.container); mBtnSkipImage = findViewById(R.id.btn_skip_img); mBtnSkipVideo = findViewById(R.id.btn_skip_video); mBtnSkipImage.setOnClickListener(this); mBtnSkipVideo.setOnClickListener(this); ImgLoader.display(mContext, R.mipmap.screen, mCover); mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case WHAT_GET_CONFIG: getConfig(); break; case WHAT_COUNT_DOWN: updateCountDown(); break; } } }; try { LogUtil.uploadErrorLog(AppContext.sInstance); } catch (Exception e) { e.printStackTrace(); } SpUtil.getInstance().setBooleanValue("NOTIFICATION", NotificationManagerCompat.from(this).areNotificationsEnabled()); Log.i("downLoad","架构: " + Build.CPU_ABI); if(CommonAppConfig.IS_GOOGLE_PLAY == 0){ //链接包 下载美颜so库 checkFaceUnitySOFile(); // checkAgoraSOFile(); } mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000); } private void checkFaceUnitySOFile() { File outputDir = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), Constants.DOWNLOAD_FaceUnity_SO); String cpuAbi = Build.CPU_ABI; if (!outputDir.exists()) { outputDir.mkdirs(); } File fileSo = new File(outputDir, Constants.FaceUnity_SO_Name); File fileSoList = new File(outputDir, cpuAbi); //解压后的文件数量必须要有2个 //如果文件存在,解压后 文件数量一致,直接进入下一步 if (fileSo.exists() && getFileCount(fileSoList.getAbsolutePath()) == 2){ MainActivity.faceSDKIsLoadSuceness = true; mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000); return; } // https://downs.yaoulive.com/androidLibs/t3/faceunity2-so-arm64-v8a.zip String soUrl = String.format("https://downs.yaoulive.com/androidLibs/t3/faceunity2-so-%s.zip", cpuAbi); Log.i("download", soUrl); if (!fileSo.exists()) { downloadSo(outputDir.getAbsolutePath(), soUrl,Constants.FaceUnity_SO_Name,false); }else if (fileSo.exists() && getFileCount(outputDir.getAbsolutePath()) < 3) { fileSo.delete(); downloadSo(outputDir.getAbsolutePath(), soUrl,Constants.FaceUnity_SO_Name,false); } } private void checkAgoraSOFile() { //存储路径 //检查是否下载过 File outputDir = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), Constants.DOWNLOAD_Agora_SO); Log.i("downLoad", "outputDir.getAbsolutePath() 1 = " + outputDir.getAbsolutePath()); String cpuAbi = Build.CPU_ABI; if (!outputDir.exists()) { Log.e("downLoad", "outputDir:>>>" + outputDir.exists()); outputDir.mkdirs(); } File fileSo = new File(outputDir, Constants.Agora_SO_Name); Log.i("downLoad", "fileSo.getAbsolutePath() 2 = " + fileSo.getAbsolutePath()); File fileSoList = new File(outputDir, cpuAbi); Log.i("downLoad", "fileSoList.getAbsolutePath() 3 = " + fileSoList.getAbsolutePath()); //解压后的文件数量必须要有22个 //如果文件存在,解压后 文件数量一致,直接进入下一步 if (fileSo.exists() && getFileCount(fileSoList.getAbsolutePath()) == 22){ mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000); return; } Log.i("download", cpuAbi); //如果沒下載,需要清楚之前的登錄信息,這樣用戶就有時間去下載so庫 , //根據手機cup 架構類型去下載支持不同類型的so 庫 //2开始下载 //检查压缩包是否已经下载过 String soUrl = String.format("https://downs.yaoulive.com/androidLibs/t1/agora-so-%s.zip", cpuAbi); // https://downs.yaoulive.com/androidLibs/t1/agora-so-arm64-v8a.zip Log.i("download", soUrl); if (!fileSo.exists()) { downloadSo(outputDir.getAbsolutePath(), soUrl,Constants.Agora_SO_Name,true); }else if (fileSo.exists() && getFileCount(outputDir.getAbsolutePath()) < 23) { fileSo.delete(); downloadSo(outputDir.getAbsolutePath(), soUrl,Constants.Agora_SO_Name,true); } } Dialog progressDialog; public ProgressBar progressBar; public TextView tvProgress; private void showDialog(Activity context) { progressDialog = new Dialog(context, com.yunbao.common.R.style.dialog); View view = LayoutInflater.from(context).inflate(com.yunbao.common.R.layout.dialog_progress, null); tvProgress = view.findViewById(com.yunbao.common.R.id.tvProgress); TextView tvDialogTitle = view.findViewById(com.yunbao.common.R.id.tvDialogTitle); tvDialogTitle.setText("首次安装,请等待"); progressBar = view.findViewById(com.yunbao.common.R.id.progressBar); progressDialog.setContentView(view); WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); int width = display.getWidth(); Window window = progressDialog.getWindow();// 这部分是设置dialog宽高的,宽高是我从sharedpreferences里面获取到的。之前程序启动的时候有获取 window.getDecorView().setPadding(0, 0, 0, 0); WindowManager.LayoutParams lp = window.getAttributes(); lp.width = width / 4 * 3; window.setAttributes(lp); progressDialog.setCancelable(false); progressDialog.show(); } public void downloadSo(String outputDir, String downloadUrl,String fileName,boolean isShowDialog) { DownloadUtil downloadUtil = new DownloadUtil(); if(isShowDialog){ showDialog(LauncherActivity.this); } downloadUtil.download("so", outputDir, fileName, downloadUrl, new DownloadUtil.Callback() { @Override public void onSuccess(File file) { if (isShowDialog){ progressDialog.dismiss(); mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 20); } File fileSo = new File(outputDir, fileName); try { unzip(fileSo.getAbsolutePath(), outputDir); MainActivity.faceSDKIsLoadSuceness = true; if (BuildConfig.DEBUG){ ToastUtil.showDebug("美颜SDK加载成功..."); } } catch (Exception e) { Log.e("ZipCheck", "Error reading ZIP file", e); throw new RuntimeException(e); } } @Override public void onProgress(int progress) { if (isShowDialog){ progressBar.setProgress(progress); } Log.i("downLoad", "progress:>>>" + progress); } @Override public void onError(Throwable e) { //资源下载失败 } }); } /** * 解压 .zip 文件到目标目录 */ public void unzip(String zipFilePath, String destDirectory) throws IOException { File destDir = new File(destDirectory); if (!destDir.exists()) { destDir.mkdirs(); } ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath)); ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { String filePath = destDirectory + File.separator + sanitizePath(entry.getName()); Log.d("Unzip", "Extracting: " + filePath); if (!entry.isDirectory()) { extractFile(zipIn, filePath); } else { new File(filePath).mkdirs(); } zipIn.closeEntry(); entry = zipIn.getNextEntry(); } zipIn.close(); } private String sanitizePath(String path) { return path.replaceAll("[^a-zA-Z0-9./_-]", "_"); } private void extractFile(ZipInputStream zipIn, String filePath) throws IOException { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath)); byte[] bytesIn = new byte[4096]; int read = 0; while ((read = zipIn.read(bytesIn)) != -1) { bos.write(bytesIn, 0, read); } bos.close(); } public int getFileCount(String directoryPath) { File directory = new File(directoryPath); if (!directory.exists() || !directory.isDirectory()) { // 目录不存在或不是目录 return -1; } File[] files = directory.listFiles(); if (files == null) { // 无法列出目录内容 return -1; } int fileCount = 0; for (File file : files) { if (file.isFile()) { fileCount++; } } return fileCount; } /** * 图片倒计时 */ private void updateCountDown() { mCurProgressVal += 100; if (mCurProgressVal > mMaxProgressVal) { return; } if (mCircleProgress != null) { mCircleProgress.setCurProgress(mCurProgressVal); } int index = mCurProgressVal / mInterval; if (index < mAdList.size() && mAdIndex != index) { View v = mImageViewList.get(mAdIndex); if (v != null && v.getVisibility() == View.VISIBLE) { v.setVisibility(View.INVISIBLE); } mAdIndex = mCurProgressVal / mInterval; } if (mCurProgressVal < mMaxProgressVal) { if (mHandler != null) { mHandler.sendEmptyMessageDelayed(WHAT_COUNT_DOWN, 100); } } else if (mCurProgressVal == mMaxProgressVal) { checkUidAndToken(); } } /** * 获取Config信息 */ private void getConfig() { CommonHttpUtil.getConfig(mContext, new CommonCallback() { @Override public void callback(ConfigBean bean) { if (bean != null) { L.e(TAG, "----------> getPaster360Url:" + bean.getBeautyKey() + " " + bean.getPaster360Url()); CommonAppConfig.getInstance().setBeautySdkType(bean.getSproutType()); //转盘开关 CommonAppConfig.getInstance().setTurnTableEnable(bean.getTurntableEnable()); CommonAppConfig.getInstance().setBeauty360TieZhiUrl(bean.getPaster360Url()); CommonAppConfig.getInstance().setAnchorPkTime(bean.getPkTime()); if (!TextUtils.isEmpty(bean.getTxVideoUgcLicenceUrl()) && !TextUtils.isEmpty(bean.getTxVideoUgcKey())) Log.i("tvv", bean.getTxVideoUgcLicenceUrl() + "是" + bean.getTxVideoUgcKey()); //sdk接口动态加载so TXLiveBase.setLibraryPath(); https://brands.cnblogs.com/tencentcloud/p/6137 String adInfo = bean.getAdInfo(); if (!TextUtils.isEmpty(adInfo)) { JSONObject obj = JSON.parseObject(adInfo); Log.i(TAG, "callback: " + adInfo); if (obj.getIntValue("switch") == 1) { List list = JSON.parseArray(obj.getString("list"), AdBean.class); if (list != null && list.size() > 0) { mAdList = list; mInterval = obj.getIntValue("time") * 1000; if (mContainer != null) { mContainer.setOnClickListener(LauncherActivity.this); } String[] uidAndToken = SpUtil.getInstance().getMultiStringValue( new String[]{SpUtil.UID, SpUtil.TOKEN}); final String uid = uidAndToken[0]; final String token = uidAndToken[1]; if (!TextUtils.isEmpty(uid) && !TextUtils.isEmpty(token)) { playAD(obj.getIntValue("type") == 0); } else { releaseVideo(); LauncherActivity.this.startActivity(new Intent(LauncherActivity.this, EntryActivity.class)); LauncherActivity.this.finish(); } } else { checkUidAndToken(); } } else { checkUidAndToken(); } } else { checkUidAndToken(); } } else { ToastUtil.show(getString(R.string.net_error)); } } }); } /** * 检查uid和token是否存在 */ private void checkUidAndToken() { if (mForward) { return; } mForward = true; if (mHandler != null) { mHandler.removeCallbacksAndMessages(null); mHandler = null; } IMLoginModel model = IMLoginManager.get(this).getUserInfo(); if (model != null) { IMLoginManager.get(this).upDataUserInfo(); //融云连接服务器 RongcloudIMManager.connectIM(this); forwardMainActivity(); } else { //兼容老版本 if (IMLoginManager.get(this).checkOLd()) { IMLoginManager.get(this).upDataUserInfo(); } else { releaseVideo(); this.startActivity(new Intent(this, EntryActivity.class)); this.finish(); } } } /** * 跳转到首页 */ private void forwardMainActivity() { releaseVideo(); Intent intent = new Intent( LauncherActivity.this, MainActivity.class); intent.putExtra(Constants.SHOW_INVITE, false); if (getIntent().getStringExtra("liveid") != null) { intent.putExtra("liveid", getIntent().getStringExtra("liveid")); } if (getIntent().getStringExtra("type") != null) { intent.putExtra("type", getIntent().getStringExtra("type")); } if (getIntent().getStringExtra("activityUrl") != null) { intent.putExtra("activityUrl", getIntent().getStringExtra("activityUrl")); } if (mImageViewList != null && mImageViewList.size() > 0) { Log.i(TAG, "forwardMainActivity: " + mImageViewList.size()); AdBean bean = mAdList.get(0); if (bean != null && bean.getAnimation() == 1) { intent.putExtra("ad_url", mAdList.get(0).getUrl()); Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation(LauncherActivity.this, mImageViewList.get(0), "ad_img_0").toBundle(); LauncherActivity.this.startActivity(intent, bundle); } else { LauncherActivity.this.startActivity(intent); } } else { LauncherActivity.this.startActivity(intent); } finish(); } @Override protected void onDestroy() { if (mPlayerForExo != null) { mPlayerForExo.release(); } EventBus.getDefault().unregister(this); if (mHandler != null) { mHandler.removeCallbacksAndMessages(null); mHandler = null; } MainHttpUtil.cancel(MainHttpConsts.GET_BASE_INFO); CommonHttpUtil.cancel(CommonHttpConsts.GET_CONFIG); releaseVideo(); if (mLauncherAdViewHolder != null) { mLauncherAdViewHolder.release(); } mLauncherAdViewHolder = null; super.onDestroy(); L.e(TAG, "----------> onDestroy"); } /** * 设置透明状态栏 */ private void setStatusBar() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(0); } } @Override public void onClick(View v) { int i = v.getId(); if (i == R.id.btn_skip_img || i == R.id.btn_skip_video) { if (mBtnSkipImage != null) { mBtnSkipImage.setClickable(false); } if (mBtnSkipVideo != null) { mBtnSkipVideo.setClickable(false); } checkUidAndToken(); } else if (i == R.id.container) { clickAD(); } } /** * 点击广告 */ private void clickAD() { if (mAdList != null && mAdList.size() > mAdIndex) { AdBean adBean = mAdList.get(mAdIndex); if (adBean != null) { String link = adBean.getLink(); if (!TextUtils.isEmpty(link)) { if (mHandler != null) { mHandler.removeCallbacksAndMessages(null); } if (mContainer != null) { mContainer.setClickable(false); } releaseVideo(); if (mLauncherAdViewHolder == null) { mLauncherAdViewHolder = new LauncherAdViewHolder(mContext, mRoot, link + "?uid=" + CommonAppConfig.getInstance().getUid() + "&token=" + CommonAppConfig.getInstance().getToken()); mLauncherAdViewHolder.addToParent(); mLauncherAdViewHolder.loadData(); mLauncherAdViewHolder.show(); mLauncherAdViewHolder.setActionListener(new LauncherAdViewHolder.ActionListener() { @Override public void onHideClick() { checkUidAndToken(); } }); } } } } } private void releaseVideo() { } @Override public void onBackPressed() { if (mLauncherAdViewHolder != null) { mLauncherAdViewHolder.release(); checkUidAndToken(); return; } super.onBackPressed(); } /** * 播放广告 */ private void playAD(boolean isImage) { if (mContainer == null) { return; } if (isImage) { int imgSize = mAdList.size(); if (imgSize > 0) { mImageViewList = new ArrayList<>(); for (int i = 0; i < imgSize; i++) { ImageView imageView = new ImageView(mContext); imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setBackgroundColor(0xffffffff); imageView.setTransitionName("ad_img_" + i); mImageViewList.add(imageView); ImgLoader.display(mContext, mAdList.get(i).getUrl(), imageView); } for (int i = imgSize - 1; i >= 0; i--) { mContainer.addView(mImageViewList.get(i)); } if (mBtnSkipImage != null && mBtnSkipImage.getVisibility() != View.VISIBLE) { mBtnSkipImage.setVisibility(View.VISIBLE); } mMaxProgressVal = imgSize * mInterval; if (mCircleProgress != null) { mCircleProgress.setMaxProgress(mMaxProgressVal); } if (mHandler != null) { mHandler.sendEmptyMessageDelayed(WHAT_COUNT_DOWN, 100); } if (mCover != null && mCover.getVisibility() == View.VISIBLE) { mCover.setVisibility(View.INVISIBLE); } } else { checkUidAndToken(); } } else { if (mAdList == null || mAdList.size() == 0) { checkUidAndToken(); return; } String videoUrl = mAdList.get(0).getUrl(); if (TextUtils.isEmpty(videoUrl)) { checkUidAndToken(); return; } String videoFileName = MD5Util.getMD5(videoUrl); if (TextUtils.isEmpty(videoFileName)) { checkUidAndToken(); return; } File file = new File(getCacheDir(), videoFileName); if (file.exists()) { playAdVideo(file); } else { downloadAdFile(videoUrl, videoFileName); } } } @Override protected void onPause() { mPaused = true; if (mPlayerForExo != null) { mPlayerForExo.pause(); } super.onPause(); } @Override protected void onResume() { super.onResume(); mPaused = false; } /** * 下载视频 */ private void downloadAdFile(String url, String fileName) { DownloadUtil downloadUtil = new DownloadUtil(); downloadUtil.download("ad_video", getCacheDir(), fileName, url, new DownloadUtil.Callback() { @Override public void onSuccess(File file) { playAdVideo(file); } @Override public void onProgress(int progress) { } @Override public void onError(Throwable e) { checkUidAndToken(); } }); } /** * 播放视频 */ private void playAdVideo(File videoFile) { if (mBtnSkipVideo != null && mBtnSkipVideo.getVisibility() != View.VISIBLE) { mBtnSkipVideo.setVisibility(View.VISIBLE); } checkUidAndToken(); /* mTXCloudVideoView = new TXCloudVideoView(mContext); mTXCloudVideoView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mTXCloudVideoView.setRenderMode(TXLiveConstants.RENDER_MODE_FULL_FILL_SCREEN); mContainer.addView(mTXCloudVideoView); mPlayer = new TXLivePlayer(mContext); mPlayer.setPlayerView(mTXCloudVideoView); mPlayer.setAutoPlay(true); mPlayer.setPlayListener(new ITXLivePlayListener() { @Override public void onPlayEvent(int e, Bundle bundle) { if (e == TXLiveConstants.PLAY_EVT_PLAY_END) {//获取到视频播放完毕的回调 checkUidAndToken(); L.e(TAG, "视频播放结束------>"); } else if (e == TXLiveConstants.PLAY_EVT_CHANGE_RESOLUTION) {////获取到视频宽高回调 float videoWidth = bundle.getInt("EVT_PARAM1", 0); float videoHeight = bundle.getInt("EVT_PARAM2", 0); if (mTXCloudVideoView != null && videoWidth > 0 && videoHeight > 0) { FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) mTXCloudVideoView.getLayoutParams(); int targetH = 0; if (videoWidth >= videoHeight) {//横屏 params.gravity = Gravity.CENTER_VERTICAL; targetH = (int) (mTXCloudVideoView.getWidth() / videoWidth * videoHeight); } else { targetH = ViewGroup.LayoutParams.MATCH_PARENT; } if (targetH != params.height) { params.height = targetH; mTXCloudVideoView.requestLayout(); } } } else if (e == TXLiveConstants.PLAY_EVT_RCV_FIRST_I_FRAME) { if (mCover != null && mCover.getVisibility() == View.VISIBLE) { mCover.setVisibility(View.INVISIBLE); } } else if (e == TXLiveConstants.PLAY_ERR_NET_DISCONNECT || e == TXLiveConstants.PLAY_ERR_FILE_NOT_FOUND) { ToastUtil.show(mContext.getString(R.string.live_play_error)); checkUidAndToken(); } else if (e == TXLiveConstants.PLAY_EVT_PLAY_PROGRESS) { int progress = bundle.getInt("EVT_PLAY_PROGRESS_MS"); if (mVideoLastProgress == progress) { L.e(TAG, "视频播放结束------>"); checkUidAndToken(); } else { mVideoLastProgress = progress; } } } @Override public void onNetStatus(Bundle bundle) { } }); mPlayer.startPlay(videoFile.getAbsolutePath(), TXLivePlayer.PLAY_TYPE_LOCAL_VIDEO); */ /* mPlayerForExo.addListener(new Player.Listener() { @Override public void onIsPlayingChanged(boolean isPlaying) { Player.Listener.super.onIsPlayingChanged(isPlaying); } @Override public void onPlaybackStateChanged(int playbackState) { Player.Listener.super.onPlaybackStateChanged(playbackState); if (playbackState == Player.STATE_ENDED) { // 播放完成的处理逻辑 checkUidAndToken(); } } @Override public void onVideoSizeChanged(VideoSize videoSize) { Player.Listener.super.onVideoSizeChanged(videoSize); Bundle bundle = new Bundle(); bundle.putInt("EVT_PARAM1", videoSize.width); bundle.putInt("EVT_PARAM2", videoSize.height); } @Override public void onRenderedFirstFrame() { Player.Listener.super.onRenderedFirstFrame(); } @Override public void onPlayerError(PlaybackException error) { Player.Listener.super.onPlayerError(error); LogUtils.e(error); } @Override public void onPlayerErrorChanged(@Nullable PlaybackException error) { Player.Listener.super.onPlayerErrorChanged(error); LogUtils.e(error); } }); mPlayerView.setPlayer(mPlayerForExo);*/ /* mPlayerView = new StyledPlayerView(mContext); mPlayerView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mContainer.addView(mPlayerView); // 准备媒体项并开始播放 MediaItem mediaItem = MediaItem.fromUri(videoFile.getAbsolutePath()); mPlayerForExo.setMediaItem(mediaItem); mPlayerForExo.prepare(); mPlayerForExo.play();*/ } @Subscribe(threadMode = ThreadMode.MAIN) public void onDataUserInfoEvent(DataUserInfoEvent event) { if (event.isUpDataSuccess()) { //融云连接服务器 RongcloudIMManager.connectIM(getApplication()); forwardMainActivity(); } else { releaseVideo(); this.startActivity(new Intent(this, EntryActivity.class)); this.finish(); } } }