CntvPlayerActivity.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. package com.guangzhou.haochuan.jxtv.activity;
  2. import android.app.Activity;
  3. import android.app.ActivityManager;
  4. import android.app.AlertDialog;
  5. import android.content.DialogInterface;
  6. import android.content.Intent;
  7. import android.content.res.Configuration;
  8. import android.graphics.drawable.AnimationDrawable;
  9. import android.os.Bundle;
  10. import android.os.Handler;
  11. import android.os.Looper;
  12. import android.util.Log;
  13. import android.view.KeyEvent;
  14. import android.view.View;
  15. import android.widget.FrameLayout;
  16. import android.widget.ImageView;
  17. import android.widget.RelativeLayout;
  18. import android.widget.SeekBar;
  19. import android.widget.TextView;
  20. import android.widget.Toast;
  21. import com.guangzhou.haochuan.jxtv.R;
  22. import com.guangzhou.haochuan.jxtv.util.CrashHandler;
  23. import com.guangzhou.haochuan.jxtv.util.LocalStore;
  24. import com.guangzhou.haochuan.jxtv.util.OttLoginUtil;
  25. import java.util.LinkedHashMap;
  26. import java.util.List;
  27. import java.util.Timer;
  28. import java.util.TimerTask;
  29. import tv.icntv.been.IcntvPlayerInfo;
  30. import tv.icntv.icntvplayersdk.IcntvPlayer;
  31. import tv.icntv.icntvplayersdk.iICntvPlayInterface;
  32. public class CntvPlayerActivity extends Activity implements iICntvPlayInterface,
  33. VideoEndDialog.OnClickListener{
  34. private IcntvPlayer icntvPlayer = null; //cntv播放器实例
  35. private FrameLayout playerContainer; //播放器容器
  36. // 计时器
  37. private Timer timer_pay;
  38. private Timer timer_video_time;
  39. private TimerTask task_video_timer;
  40. private TimerTask task_pay;
  41. //延迟执行滑动播放
  42. private Timer delaySeekTimer;
  43. private TimerTask delaySeekTimerTask;
  44. //UI参数
  45. private TextView videoTitle; //视频标题
  46. private ImageView loadingAnimation; //加载动画
  47. private FrameLayout loadingContainer; //加载动画容器
  48. private TextView payNotice; //提示计费文本
  49. private ImageView playOrPause; //暂停/播放按钮
  50. private SeekBar seekBar; //播放进度条
  51. private TextView currentTime; //当前播放时间
  52. private TextView duration; //视频时长
  53. private RelativeLayout topBar; //顶部栏
  54. private RelativeLayout bottomBar; //顶部栏
  55. //控制参数
  56. private int seekPercent = 1; //视频跳跃百分比;
  57. private int delayHiddenBarTime = 3000; //延后隐藏操作条时间
  58. private final String appId = "5aa0b1a82cf0a"; //未来电视视频播放ID
  59. private final String fSource = "1018"; //日志数据来源
  60. //上一个页面传过来的参数
  61. private String videoSourceId = ""; //素材ID
  62. private String videoTitleValue = ""; //素材标题
  63. private String videoUrl = ""; //素材播放地址
  64. private String isFee = ""; //该素材是否免费
  65. private String examineId = ""; //未来审核ID
  66. private String examineStatus = ""; //审核状态。10,通过;20,未通过;40,下架
  67. private String examineType=""; //审核类型
  68. //退出菜单
  69. private boolean showVideoEndDialog = false;
  70. String TAG = "CntvPlayerActivity";
  71. @Override
  72. public void onConfigurationChanged(Configuration configuration){
  73. super.onConfigurationChanged(configuration);
  74. }
  75. @Override
  76. protected void onCreate(Bundle savedInstanceState) {
  77. super.onCreate(savedInstanceState);
  78. setContentView(R.layout.activity_cntv_player);
  79. //Toast.makeText(this,"uid:" + uId,Toast.LENGTH_SHORT).show();
  80. getDataFromIntent();
  81. initComponent();
  82. showBarOnBeginPlay();
  83. //String msg = OttLoginUtil.getInstance().getLoginStateMsg();
  84. String deviceId = OttLoginUtil.getInstance().getDeviceId();
  85. if(deviceId.isEmpty() || deviceId == null){
  86. // Log.i(TAG,",重新初始化ott,msg:" + msg);
  87. OttLoginUtil.getInstance().init(this, new OttLoginUtil.OnLoginListener() {
  88. @Override
  89. public void OnSuccess() {
  90. initPlayer();
  91. }
  92. @Override
  93. public void onFail(String msg) {
  94. new AlertDialog.Builder(CntvPlayerActivity.this)
  95. .setMessage("抱歉!播放器初始化失败,点击'确定'退出当前播放")
  96. .setNegativeButton("确定", new DialogInterface.OnClickListener() {
  97. @Override
  98. public void onClick(DialogInterface dialog, int which) {
  99. playerRelease();
  100. destroyPayTask();
  101. CntvPlayerActivity.this.finish();
  102. System.exit(0);
  103. }
  104. }).show();
  105. }
  106. });
  107. }else{
  108. initPlayer();
  109. }
  110. }
  111. @Override
  112. protected void onResume(){
  113. super.onResume();
  114. if(icntvPlayer != null){
  115. if(!icntvPlayer.isPlaying()){
  116. icntvPlayer.startVideo();
  117. }
  118. }
  119. }
  120. @Override
  121. protected void onPause(){
  122. super.onPause();
  123. if(icntvPlayer != null){
  124. if(icntvPlayer.isPlaying()){
  125. icntvPlayer.pauseVideo();
  126. }
  127. }
  128. }
  129. @Override
  130. protected void onStop(){
  131. super.onStop();
  132. playerRelease();
  133. destroyPayTask();
  134. killWebProcess();
  135. }
  136. private void getDataFromIntent(){
  137. Intent intent = getIntent();
  138. videoSourceId = intent.getStringExtra("sourceId");
  139. videoTitleValue = intent.getStringExtra("title");
  140. videoUrl = intent.getStringExtra("url");
  141. isFee = intent.getStringExtra("isFee");
  142. examineId = intent.getStringExtra("examineId");
  143. examineStatus = intent.getStringExtra("examineStatus");
  144. examineType = intent.getStringExtra("examineType");
  145. }
  146. //开场显示上下条,一段时间后隐藏
  147. private void showBarOnBeginPlay(){
  148. showBar();
  149. new Thread(){
  150. public void run(){
  151. Looper.prepare();
  152. new Handler().postDelayed(new Runnable() {
  153. @Override
  154. public void run() {
  155. CntvPlayerActivity.this.runOnUiThread(new Runnable() {
  156. @Override
  157. public void run() {
  158. hiddenBar();
  159. }
  160. });
  161. }
  162. },delayHiddenBarTime);
  163. Looper.loop();
  164. }
  165. }.start();
  166. }
  167. @Override
  168. protected void onDestroy(){
  169. //将全局参数赋值为null
  170. videoSourceId = null;
  171. videoTitle = null;
  172. icntvPlayer = null;
  173. playerContainer = null;
  174. timer_pay = null;
  175. timer_video_time = null;
  176. task_video_timer = null;
  177. task_pay = null;
  178. delaySeekTimer = null;
  179. delaySeekTimerTask = null;
  180. videoTitle = null;
  181. loadingAnimation = null;
  182. loadingContainer = null;
  183. payNotice = null;
  184. playOrPause = null;
  185. seekBar = null;
  186. currentTime= null;
  187. duration = null;
  188. topBar = null;
  189. bottomBar= null;
  190. super.onDestroy();
  191. }
  192. private void initComponent(){
  193. videoTitle = findViewById(R.id.title);
  194. payNotice = findViewById(R.id.pay_notice);
  195. playOrPause = findViewById(R.id.play_pause);
  196. loadingAnimation = findViewById(R.id.loading_animation);
  197. loadingContainer = findViewById(R.id.loading);
  198. seekBar = findViewById(R.id.seek_bar);
  199. currentTime = findViewById(R.id.time_current);
  200. duration = findViewById(R.id.time_total);
  201. topBar = findViewById(R.id.top_bar);
  202. bottomBar = findViewById(R.id.bottom_bar);
  203. playerContainer = findViewById(R.id.video_view);
  204. videoTitle.setText(videoTitleValue);
  205. if(!LocalStore.getInstance().getIsVip(this)){
  206. if(isFee.equals("1")){
  207. payNotice.setVisibility(View.INVISIBLE);
  208. }else {
  209. payNotice.setVisibility(View.VISIBLE);
  210. }
  211. }else{
  212. payNotice.setVisibility(View.INVISIBLE);
  213. }
  214. //开启加载动画
  215. initLoadingAnimation();
  216. }
  217. private void initLoadingAnimation(){
  218. loadingAnimation.setImageResource(R.drawable.tv_load_animation);
  219. AnimationDrawable a = (AnimationDrawable)loadingAnimation.getDrawable();
  220. a.start();
  221. }
  222. /* private void setPlayerData(){
  223. new SearchSingleSourceViewModel(this,videoSourceId).addObserver(this);
  224. }*/
  225. private void initPlayer(){
  226. try{
  227. IcntvPlayerInfo icntvPlayerInfo = new IcntvPlayerInfo(); //播放器所需传入参数实例
  228. icntvPlayerInfo.setPlayUrl(videoUrl);
  229. icntvPlayerInfo.setApp_id(appId);
  230. icntvPlayerInfo.setCheckType(examineType);
  231. icntvPlayerInfo.setfSource(fSource);
  232. icntvPlayerInfo.setProgramID(examineId);
  233. icntvPlayerInfo.setDuration(0); //还未实现,等待接口更新
  234. icntvPlayerInfo.setPlayType("0");
  235. Log.d(TAG,"初始化播放器");
  236. if(icntvPlayer != null){
  237. playerRelease();
  238. icntvPlayer = null;
  239. }
  240. icntvPlayer = new IcntvPlayer(this, playerContainer, icntvPlayerInfo, this);
  241. }catch (Exception e){
  242. e.printStackTrace();
  243. }
  244. }
  245. private void showBar(){
  246. topBar.setVisibility(View.VISIBLE);
  247. bottomBar.setVisibility(View.VISIBLE);
  248. initUpdatePlayTimeTask();
  249. }
  250. private void hiddenBar(){
  251. topBar.setVisibility(View.GONE);
  252. bottomBar.setVisibility(View.GONE);
  253. destroyUpdatePlayTimeTask();
  254. }
  255. private void destroyPayTask(){
  256. if(task_pay != null){
  257. task_pay.cancel();
  258. }
  259. }
  260. //更新当前播放时间
  261. private void initUpdatePlayTimeTask(){
  262. //启动更新视频进度任务
  263. timer_video_time = new Timer();
  264. task_video_timer = new TimerTask() {
  265. @Override
  266. public void run() {
  267. if(icntvPlayer == null){
  268. return;
  269. }
  270. new Thread(){
  271. public void run(){
  272. Looper.prepare();
  273. new Handler().post(
  274. new Runnable() {
  275. @Override
  276. public void run() {
  277. CntvPlayerActivity.this.runOnUiThread(new Runnable() {
  278. @Override
  279. public void run() {
  280. //更新当前播放时间
  281. String currentPlayTime = convertLongTimeToStr(icntvPlayer.getCurrentPosition()); //获得当前播放时间
  282. currentTime.setText(currentPlayTime);
  283. }
  284. });
  285. }
  286. }
  287. );
  288. Looper.loop();
  289. }
  290. }.start();
  291. }
  292. };
  293. timer_video_time.schedule(task_video_timer,0,1000);
  294. }
  295. private void destroyUpdatePlayTimeTask(){
  296. if(task_video_timer != null){
  297. task_video_timer.cancel();
  298. }
  299. timer_video_time.purge();
  300. }
  301. public String convertLongTimeToStr(long time) {
  302. int ss = 1000;
  303. int mi = ss * 60;
  304. int hh = mi * 60;
  305. long hour = (time) / hh;
  306. long minute = (time - hour * hh) / mi;
  307. long second = (time - hour * hh - minute * mi) / ss;
  308. String strHour = hour < 10 ? "0" + hour : "" + hour;
  309. String strMinute = minute < 10 ? "0" + minute : "" + minute;
  310. String strSecond = second < 10 ? "0" + second : "" + second;
  311. if (hour > 0) {
  312. return strHour + ":" + strMinute + ":" + strSecond;
  313. } else {
  314. return strMinute + ":" + strSecond;
  315. }
  316. }
  317. public void playerRelease(){
  318. destroyUpdatePlayTimeTask();
  319. if(icntvPlayer == null){
  320. return;
  321. }
  322. if(icntvPlayer.isPlaying()){
  323. icntvPlayer.stopVideo();
  324. }
  325. icntvPlayer.release();
  326. }
  327. //重新播放
  328. private void rePlay(){
  329. playerRelease();
  330. initPlayer();
  331. showBarOnBeginPlay();
  332. hasCompletion = false;
  333. }
  334. //播放/暂停
  335. private void playOrPause(){
  336. if(icntvPlayer == null){
  337. return;
  338. }
  339. if(icntvPlayer.isPlaying()){
  340. icntvPlayer.pauseVideo();
  341. playOrPause.setImageResource(R.drawable.icon_play);
  342. showBar();
  343. }else{
  344. icntvPlayer.startVideo();
  345. playOrPause.setImageResource(R.drawable.icon_pause);
  346. hiddenBar();
  347. }
  348. }
  349. private void showVideoEndDialog(){
  350. try{
  351. VideoEndDialog videoEndDialog = new VideoEndDialog();
  352. videoEndDialog.show(getFragmentManager(),"VideoEndDialog");
  353. showVideoEndDialog = true;
  354. }catch (Exception e){
  355. e.printStackTrace();
  356. }
  357. }
  358. //遥控事件
  359. @Override
  360. public boolean onKeyDown(int keyCode, KeyEvent event) {
  361. switch (keyCode) {
  362. case KeyEvent.KEYCODE_DPAD_CENTER: //播放/暂停
  363. playOrPause();
  364. return true;
  365. case KeyEvent.KEYCODE_DPAD_LEFT:
  366. seekBack();
  367. return true;
  368. case KeyEvent.KEYCODE_DPAD_RIGHT:
  369. seekForward();
  370. return true;
  371. case KeyEvent.KEYCODE_BACK: //到顶跳到相应tab
  372. if(!showVideoEndDialog){
  373. showVideoEndDialog();
  374. //Toast.makeText(this,"显示VideoEndDialog",Toast.LENGTH_SHORT).show();
  375. return true;
  376. }else{
  377. return false;
  378. }
  379. case KeyEvent.KEYCODE_DPAD_DOWN:
  380. hiddenBar();
  381. return true;
  382. }
  383. return false;
  384. }
  385. //当用户连续点击“前进”或者“后退时”,需要延时执行,好一次性滑动到目标位置
  386. private void seekBack(){
  387. if(icntvPlayer == null){
  388. return;
  389. }
  390. showBar();
  391. int backDistance = icntvPlayer.getDuration()*seekPercent/100;
  392. int currentPosition = icntvPlayer.getCurrentPosition();
  393. int seekPosition = currentPosition - backDistance;
  394. seekBar.setProgress(seekPosition);
  395. playerDelaySeek();
  396. destroyUpdatePlayTimeTask();
  397. }
  398. private void seekForward(){
  399. if(icntvPlayer == null){
  400. return;
  401. }
  402. showBar();
  403. int backDistance = icntvPlayer.getDuration()*seekPercent/100;
  404. int currentPosition = icntvPlayer.getCurrentPosition();
  405. int seekPosition = currentPosition + backDistance;
  406. seekBar.setProgress(seekPosition);
  407. playerDelaySeek();
  408. destroyUpdatePlayTimeTask();
  409. }
  410. private void playerDelaySeek(){
  411. delaySeekTimer = new Timer();
  412. if(delaySeekTimerTask != null)
  413. {
  414. delaySeekTimerTask.cancel();
  415. }
  416. delaySeekTimer.purge();
  417. delaySeekTimerTask = new TimerTask() {
  418. @Override
  419. public void run() {
  420. new Thread(){
  421. public void run(){
  422. Looper.prepare();
  423. new Handler().post(
  424. new Runnable() {
  425. @Override
  426. public void run() {
  427. CntvPlayerActivity.this.runOnUiThread(new Runnable() {
  428. @Override
  429. public void run() {
  430. if(icntvPlayer == null){
  431. return;
  432. }
  433. int seekToPosition = seekBar.getProgress();
  434. icntvPlayer.seekTo(seekToPosition);
  435. initUpdatePlayTimeTask();
  436. hiddenBar();
  437. }
  438. });
  439. }
  440. });
  441. Looper.loop();
  442. }
  443. }.start();
  444. }
  445. };
  446. delaySeekTimer.schedule(delaySeekTimerTask,2000);
  447. }
  448. //视频事件
  449. @Override
  450. public void onPrepared(LinkedHashMap<String, String> linkedHashMap) {
  451. loadingContainer.setVisibility(View.GONE);
  452. //设置seekbar最大值
  453. seekBar.setMax(icntvPlayer.getDuration());
  454. seekBar.setProgress(0);
  455. //设置视频时长显示
  456. duration.setText(convertLongTimeToStr(icntvPlayer.getDuration()));
  457. if(!LocalStore.getInstance().getIsVip(this)){
  458. if(!isFee.equals("1")){
  459. initPayTimeTask();
  460. }
  461. }
  462. }
  463. //监控当前观看时间,弹出计费
  464. private void initPayTimeTask(){
  465. timer_pay = new Timer();
  466. task_pay = new TimerTask() {
  467. @Override
  468. public void run() {
  469. new Thread(){
  470. public void run(){
  471. Looper.prepare();
  472. new Handler().post(
  473. new Runnable() {
  474. @Override
  475. public void run() {
  476. //Toast.makeText(CntvPlayerActivity.this,"监控计费时间",Toast.LENGTH_SHORT).show();
  477. if(icntvPlayer.getCurrentPosition()/1000 > 30){
  478. //跳转到计费界面
  479. CntvPlayerActivity.this.runOnUiThread(new Runnable() {
  480. @Override
  481. public void run() {
  482. playerRelease();
  483. //Toast.makeText(CntvPlayerActivity.this,"跳转计费页面",Toast.LENGTH_SHORT).show();
  484. setResult(3);
  485. destroyPayTask();
  486. CntvPlayerActivity.this.finish();
  487. System.exit(0);
  488. }
  489. });
  490. }
  491. }
  492. });
  493. Looper.loop();
  494. }
  495. }.start();
  496. }
  497. };
  498. timer_pay.schedule(task_pay,0,1000);
  499. }
  500. private boolean hasCompletion = false;
  501. @Override
  502. public void onCompletion() {
  503. showVideoEndDialog();
  504. }
  505. @Override
  506. public void onBufferStart(String s) {
  507. loadingContainer.setVisibility(View.VISIBLE);
  508. }
  509. @Override
  510. public void onBufferEnd(String s) {
  511. loadingContainer.setVisibility(View.GONE);
  512. }
  513. @Override
  514. public void onError(int i, int i1, String s) {
  515. new AlertDialog.Builder(this)
  516. .setTitle("错误")
  517. .setMessage("播放错误:" + s)
  518. .setPositiveButton("确定",new DialogInterface.OnClickListener(){
  519. @Override
  520. public void onClick(DialogInterface dialog, int which) {
  521. CntvPlayerActivity.this.finish();
  522. }
  523. }).show();
  524. String cnTvError = "";
  525. switch (i){
  526. case 1001:
  527. cnTvError = "未来电视播放错误. " + "错误类型:"
  528. + i + "; 错误值:" + i1 + "; 错误消息:" + "CDN视频源调度失败";
  529. break;
  530. case 123456:
  531. cnTvError = "未来电视播放错误. " + "错误类型:"
  532. + i + "; 错误值:" + i1 + "; 错误消息:" + "SDK鉴权失败";
  533. break;
  534. }
  535. CrashHandler.getInstance().saveCrashInfoToWeb(cnTvError);
  536. }
  537. @Override
  538. public void onTimeout() {
  539. new AlertDialog.Builder(this)
  540. .setTitle("超时")
  541. .setMessage("加载视频超时,点击“确定”返回")
  542. .setPositiveButton("确定",new DialogInterface.OnClickListener(){
  543. @Override
  544. public void onClick(DialogInterface dialog, int which) {
  545. playerRelease();
  546. destroyPayTask();
  547. CntvPlayerActivity.this.finish();
  548. System.exit(0);
  549. }
  550. }).show();
  551. Toast.makeText(this,"视频超时,退出",Toast.LENGTH_SHORT).show();
  552. }
  553. /* @Override
  554. public void update(Observable o, Object arg) {
  555. if(o instanceof SearchSingleSourceViewModel){
  556. SearchSingleSourceViewModel searchSingleSourceViewModel = (SearchSingleSourceViewModel)o;
  557. searchSingleSource = searchSingleSourceViewModel.getSearchSingleSource();
  558. if(searchSingleSource == null){
  559. return;
  560. }
  561. setSearchSingleSource(searchSingleSource);
  562. }
  563. }*/
  564. /*private void setSearchSingleSource(SearchSingleSource searchSingleSource){
  565. if(searchSingleSource != null){
  566. if(searchSingleSource.code == 0){
  567. icntvPlayerInfo = new IcntvPlayerInfo();
  568. SingleSource singleSource = searchSingleSource.data;
  569. if(singleSource.isFee.equals("1")){
  570. isFee = false;
  571. payNotice.setVisibility(View.GONE);
  572. }else if(singleSource.isFee.equals("2")){
  573. isFee = true;
  574. }
  575. if(!singleSource.examine.examineStatus.equals("10")){
  576. //未审核通过
  577. CrashHandler
  578. .getInstance()
  579. .saveCrashInfoToWeb("播放的视频,ID:"
  580. + searchSingleSource.data.sourceId
  581. +",未通过审核,状态ID;" + singleSource.examine.examineStatus);
  582. new AlertDialog.Builder(this)
  583. .setMessage("视频未通过审核,或已下架,返回!")
  584. .setNegativeButton("确定", new DialogInterface.OnClickListener() {
  585. @Override
  586. public void onClick(DialogInterface dialog, int which) {
  587. CntvPlayerActivity.this.finish();
  588. }
  589. }).show();
  590. }
  591. *//*Toast.makeText(this,"sourceId:" + singleSource.sourceId
  592. +"审核ID:" + singleSource.examine.examineId
  593. + "审核状态:"+ singleSource.examine.examineStatus,Toast.LENGTH_LONG).show();*//*
  594. try{
  595. icntvPlayerInfo.setPlayUrl(singleSource.videoUrl);
  596. icntvPlayerInfo.setApp_id(appId);
  597. icntvPlayerInfo.setCheckType(singleSource.examine.examineType);
  598. icntvPlayerInfo.setfSource(fSource);
  599. icntvPlayerInfo.setProgramID(singleSource.examine.examineId);
  600. icntvPlayerInfo.setDuration(singleSource.movieTime); //还未实现,等待接口更新
  601. icntvPlayerInfo.setPlayType("0");
  602. if(icntvPlayer != null){
  603. playerRelease();
  604. icntvPlayer = null;
  605. }
  606. icntvPlayer = new IcntvPlayer(this, playerContainer, icntvPlayerInfo, this);
  607. }catch (Exception e){
  608. e.printStackTrace();
  609. }
  610. //videoSourceId = searchSingleSource.data.sourceId;
  611. recordWatchHistory(videoSourceId);
  612. }else {
  613. Toast.makeText(this,"当前视频未通过审核,请退出播放!",Toast.LENGTH_SHORT).show();
  614. }
  615. }else{
  616. Toast.makeText(this,"未获得当前视频信息,请退出播放!",Toast.LENGTH_SHORT).show();
  617. }
  618. }*/
  619. /* //记录播放记录
  620. private void recordWatchHistory(String sourceId){
  621. if(sourceId.isEmpty()){
  622. return;
  623. }
  624. new CollectWatchViewModel(sourceId).addObserver(this);
  625. }*/
  626. @Override
  627. public void onPlayCurrent() {
  628. if(hasCompletion){
  629. rePlay();
  630. }
  631. }
  632. @Override
  633. public void onExit() {
  634. playerRelease();
  635. destroyPayTask();
  636. // killWebProcess();
  637. this.finish();
  638. System.exit(0);
  639. }
  640. /*
  641. * 因为DjblWebActivity是单独一个线程,如果退出的话,必须还要关闭DjblWebActivity线程才能起作用
  642. * */
  643. private void killWebProcess(){
  644. ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
  645. List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfos = am.getRunningAppProcesses();
  646. if(!runningAppProcessInfos.get(0).processName.equals("com.guangzhou.haochuan.jxtv")){
  647. am.killBackgroundProcesses("com.guangzhou.haochuan.jxtv"); // API Level至少为8才能使用
  648. this.finish();
  649. System.exit(0);
  650. }
  651. }
  652. @Override
  653. public void onDismiss() {
  654. showVideoEndDialog = false;
  655. }
  656. }