pdlivexp/app/src/main/java/com/shayu/phonelive/activity/LauncherActivity.java
laopi cbd99e0664 1、声网里美颜(相心)so动态加载 开发基本完成
2、Gradle速度很慢,配置缓存等设置
2024-09-04 17:32:19 +08:00

805 lines
30 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.shayu.phonelive.AppContext;
import com.tencent.rtmp.ITXLivePlayListener;
import com.tencent.rtmp.TXLiveBase;
import com.tencent.rtmp.TXLiveConstants;
import com.tencent.rtmp.TXLivePlayer;
import com.tencent.rtmp.ui.TXCloudVideoView;
import com.tencent.ugc.TXUGCBase;
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.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<AdBean> mAdList;
private List<ImageView> mImageViewList;
private int mMaxProgressVal;
private int mCurProgressVal;
private int mAdIndex;
private int mInterval = 2000;
private View mBtnSkipImage;
private View mBtnSkipVideo;
private TXCloudVideoView mTXCloudVideoView;
private TXLivePlayer mPlayer;
private LauncherAdViewHolder mLauncherAdViewHolder;
private boolean mPaused;
private int mVideoLastProgress;
private boolean mForward;
@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());
if(CommonAppConfig.IS_GOOGLE_PLAY != 0){
//渠道包
mHandler.sendEmptyMessageDelayed(WHAT_GET_CONFIG, 1000);
}else {
//链接包 下载so库
checkFaceUnitySOFile();
checkAgoraSOFile();
}
}
private void checkFaceUnitySOFile() {
File outputDir = new File(mContext.getDir("lib", Context.MODE_PRIVATE).getAbsoluteFile(), Constants.DOWNLOAD_FaceUnity_SO);
String cpuAbi = "";
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){
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() = " + outputDir.getAbsolutePath());
String cpuAbi = "";
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() = " + fileSo.getAbsolutePath());
File fileSoList = new File(outputDir, cpuAbi);
Log.i("downLoad", "fileSoList.getAbsolutePath() = " + 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);
} 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<ConfigBean>() {
@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());
TXLiveBase.getInstance().setLicence(LauncherActivity.this, bean.getTxVideoUgcLicenceUrl(), bean.getTxVideoUgcKey());
TXUGCBase.getInstance().setLicence(LauncherActivity.this, bean.getTxPlayUgcLicenceUrl(), bean.getTxVideoUgcKey());
String adInfo = bean.getAdInfo();
if (!TextUtils.isEmpty(adInfo)) {
JSONObject obj = JSON.parseObject(adInfo);
Log.i(TAG, "callback: " + adInfo);
if (obj.getIntValue("switch") == 1) {
List<AdBean> 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() {
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() {
if (mPlayer != null) {
mPlayer.stopPlay(false);
mPlayer.setPlayListener(null);
}
mPlayer = null;
}
@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 (mPlayer != null && mPlayer.isPlaying()) {
mPlayer.setMute(true);
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
if (mPaused) {
if (mPlayer != null && mPlayer.isPlaying()) {
mPlayer.setMute(false);
}
}
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);
}
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);
}
@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();
}
}
}