Browse Source

同步了文档功能,并且进行了测试

lyn 5 years ago
parent
commit
0ee1f53727

+ 3 - 4
app/src/androidTest/java/com/haochuan/hciptvbasic/MainActivityTest.java

@@ -7,10 +7,9 @@ import androidx.test.platform.app.InstrumentationRegistry;
 
 import androidx.test.rule.ActivityTestRule;
 
-import com.haochuan.hciptvbasic.Util.Logger;
 import com.haochuan.hciptvbasic.Util.ScreenSnap;
 import com.haochuan.hciptvbasic.webview.PayToJS;
-import com.haochuan.hciptvbasic.webview.ToolToJS;
+import com.haochuan.hciptvbasic.webview.UtilToJS;
 
 import org.junit.Rule;
 import org.junit.Test;
@@ -56,12 +55,12 @@ public class MainActivityTest{
     @Test
     public void testToolToJs(){
         MainActivity activity = mActivityRule.getActivity();
-        ToolToJS toolToJS = new ToolToJS(activity,activity.getWebView());
+        UtilToJS utilToJS = new UtilToJS(activity,activity.getWebView());
         String filePath = "/storage/emulated/0/Android/data/com.haochuan.hciptvbasic/cache/temp/com.haochuan.hciptvbasic1.apk";
         String url = "http://117.169.11.222:8018/tv/index.php?m=Home&c=Activity&a=getActStatus";
         String paramJson = "{\"m\":\"Home\",\"c\":\"Activity\",\"a\":\"getActStatus\"}";
         String headJson = "{\"cookie\":\"head=123123123131fdfsfsdfs\"}";
-        toolToJS.clientWebRequest(url,paramJson,headJson,2,false,"test");
+        utilToJS.clientWebRequest("");
         //Logger.d("md5:" + md5);
         //toolToJS.download("http://202.99.114.74:56251/dudu_youxi/h5/gameList/apk/jiSuKuangBiao.apk");
 

+ 5 - 4
app/src/main/AndroidManifest.xml

@@ -13,16 +13,17 @@
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
         <activity android:name=".test.TestPlayerActivity">
+        </activity>
+        <activity android:name=".test.TestActivity">
+
+        </activity>
+        <activity android:name=".MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <activity android:name=".test.TestActivity">
-
-        </activity>
-        <activity android:name=".MainActivity"></activity>
 
         <uses-library
             android:name="android.test.runner"

+ 8 - 8
app/src/main/java/com/haochuan/hciptvbasic/BaseWebActivity.java

@@ -29,7 +29,7 @@ import com.haochuan.hciptvbasic.video.IVideoPlayer;
 import com.haochuan.hciptvbasic.webview.PayToJS;
 import com.haochuan.hciptvbasic.webview.PlayerToJS;
 import com.haochuan.hciptvbasic.webview.HCWebChromeClient;
-import com.haochuan.hciptvbasic.webview.ToolToJS;
+import com.haochuan.hciptvbasic.webview.UtilToJS;
 
 import java.util.List;
 
@@ -37,10 +37,10 @@ public abstract class BaseWebActivity extends AppCompatActivity {
     private WebView webView;                                    //整个应用唯一的webview
     private PlayerToJS playerToJS;                              //PlayerToJS类实例
     private PayToJS payToJS;                                    // PayToJS类实例
-    private ToolToJS toolToJS;                                  //ToolToJS实例
+    private UtilToJS utilToJS;                                  //ToolToJS实例
     String playerToJSName = PlayerToJS.class.getSimpleName();    //playerToJS类名
     String payToJSName = PayToJS.class.getSimpleName();         //payToJS类名
-    String toolToJSName = ToolToJS.class.getSimpleName();       //toolToJS类名
+    String toolToJSName = UtilToJS.class.getSimpleName();       //toolToJS类名
     //播放器
     private HCPlayer mHCPlayer = null;
 
@@ -136,7 +136,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
      */
     @Override
     public void onBackPressed() {
-        toolToJS.onBackPressed();
+        utilToJS.onBackPressed();
     }
 
     /*--------------------------初始化函数---------------------------*/
@@ -205,7 +205,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
 
         webView.addJavascriptInterface(playerToJS,playerToJSName);
         webView.addJavascriptInterface(payToJS,payToJSName);
-        webView.addJavascriptInterface(toolToJS,toolToJSName);
+        webView.addJavascriptInterface(utilToJS,toolToJSName);
         // 设置WebClient
         webView.setWebViewClient(new WebViewClient());
         webView.setWebChromeClient(hcWebChromeClient);
@@ -219,7 +219,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
         playerToJS = new PlayerToJS(this,webView,mHCPlayer);
     }
     private void setPayToJS(){ payToJS = new PayToJS(this,webView); }
-    private void setToolToJS(){ toolToJS = new ToolToJS(this,webView); }
+    private void setToolToJS(){ utilToJS = new UtilToJS(this,webView); }
 
     /*-----------------------------------功能函数 start----------------------------------*/
 
@@ -229,7 +229,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
      * */
 
     public void loggerToJs(String log){
-        getToolToJS().logToJs(log);
+        getUtilToJS().logToJs(log);
     }
 
     /**
@@ -290,7 +290,7 @@ public abstract class BaseWebActivity extends AppCompatActivity {
     /*
      * 获取ToolToJS实例
      * */
-    protected ToolToJS getToolToJS(){return toolToJS;}
+    protected UtilToJS getUtilToJS(){return utilToJS;}
 
 
 }

+ 73 - 0
app/src/main/java/com/haochuan/hciptvbasic/MainActivity.java

@@ -1,14 +1,87 @@
 package com.haochuan.hciptvbasic;
 
 import android.os.Bundle;
+import android.util.Log;
+
+import com.haochuan.hciptvbasic.Util.Logger;
+
+import java.util.Timer;
+import java.util.TimerTask;
 
 
 public class MainActivity extends BaseWebActivity {
     private String mBasicUrl = "http://10.255.25.176:8091/sxrj/loading.html";    //入口地址
 
+    private int testCount = 0;
+    private String TAG = "status";
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+
+        //test
+        /*String playParamJson = "{\n" +
+                "    \"url\": \"https://gzhc-sxrj.oss-cn-shenzhen.aliyuncs.com/gzhc-djbl/djbl01.mp4\"\n" +
+                "}";
+        int state = getPlayerToJS().getPlayerStatus();
+        Logger.d("播放器状态:" + state);
+        getPlayerToJS().play(playParamJson);
+
+        new Timer().schedule(new TimerTask() {
+            @Override
+            public void run() {
+                int state = 0;
+                switch (testCount){
+                    case 0:
+                        String changeParamJson = "{\n" +
+                                "    \"x\": 60,\n" +
+                                "    \"y\": 60,\n" +
+                                "    \"width\": 480,\n" +
+                                "    \"height\": 270\n" +
+                                "}";
+                        getPlayerToJS().change(changeParamJson);
+                        break;
+                    case 1:
+                        getPlayerToJS().pause();
+                        state = getPlayerToJS().getPlayerStatus();
+                        Log.d(TAG,"播放器状态:" + state);
+                        break;
+                    case 2:
+                        getPlayerToJS().resume();
+                        state = getPlayerToJS().getPlayerStatus();
+                        Log.d(TAG,"播放器状态:" + state);
+                        break;
+                    case 3:
+                        getPlayerToJS().seek(5);
+                        state = getPlayerToJS().getPlayerStatus();
+                        Log.d(TAG,"播放器状态:" + state);
+                        break;
+                    case 4:
+                        getPlayerToJS().stop();
+                        state = getPlayerToJS().getPlayerStatus();
+                        Log.d(TAG,"播放器状态:" + state);
+                        break;
+                    case 5:
+                        state = getPlayerToJS().getPlayerStatus();
+                        Log.d(TAG,"播放器状态:" + state);
+                        break;
+                }
+                testCount++;
+            }
+        },0,2000);*/
+        /*int requestResult = getUtilToJS().clientWebRequest("{\n" +
+                "    \"url\": \"http://117.169.11.222:8018/tv/index.php?m=Home&c=Activity&a=getActStatus\",\n" +
+                "    \"method\": 1,\n" +
+                "    \"content_type\": \"application/json\",\n" +
+                "    \"param_json\": {\n" +
+                "        \"act_id\": 123123,\n" +
+                "        \"uid\": 123123123\n" +
+                "    },\n" +
+                "    \"ignore_result\": 0,\n" +
+                "    \"tag\": \"11_huodong\"\n" +
+                "}");
+        Log.d(TAG,"requestResult:" + requestResult);*/
+        //getUtilToJS().appExit();
     }
 
 

+ 16 - 0
app/src/main/java/com/haochuan/hciptvbasic/Util/RegexUtil.java

@@ -0,0 +1,16 @@
+package com.haochuan.hciptvbasic.Util;
+
+import java.util.regex.Pattern;
+
+public class RegexUtil {
+    /*
+     * 判断字符串是否为正确的url
+     * */
+    public static boolean isUrl(String url){
+        if (null == url || "".equals(url)) {
+            return false;
+        }
+        Pattern pattern = Pattern.compile("(http?|https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]");
+        return pattern.matcher(url).matches();
+    }
+}

+ 5 - 1
app/src/main/java/com/haochuan/hciptvbasic/Util/ToolsUtil.java

@@ -42,7 +42,7 @@ public class ToolsUtil {
             packageInfo = null;
             e.printStackTrace();
         }
-       return packageInfo == null;
+       return packageInfo != null;
     }
 
     public void installApk(Context context,String filePath) {
@@ -272,6 +272,9 @@ public class ToolsUtil {
 
 
 
+
+
+
     /*
     * clientWebRequest 结果response接口
     * */
@@ -279,4 +282,5 @@ public class ToolsUtil {
         public void OnResponse(int what,String response,String tag);
     }
 
+
 }

+ 2 - 2
app/src/main/java/com/haochuan/hciptvbasic/test/TestActivity.java

@@ -66,10 +66,10 @@ public class TestActivity extends BaseWebActivity {
         //显示位置
         getLocations();
 
-        /*String intentJson = new ToolToJS(this,getWebView()).getIntentJson();
+        /*String intentJson = new UtilToJS(this,getWebView()).getIntentJson();
         Logger.d("intentJson:" + intentJson);*/
 
-       /* ToolToJS toolToJS = new ToolToJS(this,getWebView());
+       /* UtilToJS toolToJS = new UtilToJS(this,getWebView());
         String url = "http://117.169.11.222:8018/tv/index.php";
         String paramJson = "{\"m\":\"Home\",\"c\":\"Activity\",\"a\":\"getActStatus\"}";
         String headJson = "{\"cookie\":\"head=123123123131fdfsfsdfs\"}";

+ 10 - 0
app/src/main/java/com/haochuan/hciptvbasic/test/TestPlayerActivity.java

@@ -23,6 +23,8 @@ import com.haochuan.hciptvbasic.video.IVideoPlayer;
 import java.math.BigDecimal;
 import java.util.Formatter;
 import java.util.Locale;
+import java.util.Timer;
+import java.util.TimerTask;
 
 public class TestPlayerActivity extends AppCompatActivity implements IVideoPlayer {
 
@@ -66,6 +68,8 @@ public class TestPlayerActivity extends AppCompatActivity implements IVideoPlaye
 
         hcPlayer.setIVideoPlayerListener(this);
         hcPlayer.play(testUrl);
+
+
     }
 
     @Override
@@ -326,11 +330,13 @@ public class TestPlayerActivity extends AppCompatActivity implements IVideoPlaye
 
     @Override
     public void onPreparing() {
+        Logger.d("onPlayerPreparing");
         loadingBar.setVisibility(View.VISIBLE);
     }
 
     @Override
     public void onPlaying() {
+        Logger.d("onPlayerPlaying");
         loadingBar.setVisibility(View.GONE);
         duration = hcPlayer.getDuration();
         Logger.d("duration:" + duration);
@@ -338,11 +344,13 @@ public class TestPlayerActivity extends AppCompatActivity implements IVideoPlaye
 
     @Override
     public void onResume() {
+        Logger.d("onPlayerResume");
         super.onResume();
     }
 
     @Override
     public void onPause() {
+        Logger.d("onPlayerPause");
         super.onPause();
     }
 
@@ -353,11 +361,13 @@ public class TestPlayerActivity extends AppCompatActivity implements IVideoPlaye
 
     @Override
     public void onPlayingBuffering() {
+        Logger.d("onPlayerBuffer");
         loadingBar.setVisibility(View.VISIBLE);
     }
 
     @Override
     public void onCompletion() {
+        Logger.d("onPlayerComplete");
         showExitDialog();
     }
 

+ 10 - 4
app/src/main/java/com/haochuan/hciptvbasic/video/EmptyControlVideoView.java

@@ -146,17 +146,23 @@ public class EmptyControlVideoView extends StandardGSYVideoPlayer {
     public int getCurrentStatus(){
         int currentStatus = 0;
         switch (mCurrentState){
-            case 2:
+            case 1:
                 currentStatus =1;
                 break;
-            case 5:
+            case 2:
                 currentStatus =2;
                 break;
-            case 6:
+            case 5:
                 currentStatus =3;
                 break;
+            case 3:
+                currentStatus =4;
+                break;
+            case 6:
+                currentStatus =5;
+                break;
             default:
-                currentStatus =0;
+                currentStatus =6;
                 break;
         }
         return currentStatus;

+ 10 - 2
app/src/main/java/com/haochuan/hciptvbasic/video/HCGsyVideoPlayer.java

@@ -62,12 +62,20 @@ public class HCGsyVideoPlayer extends BaseMediaPlayer {
 
     @Override
     public void resume() {
-        mEmptyControlVideo.onVideoResume();
+        if(isPrePared()){
+            mEmptyControlVideo.onVideoResume();
+        }else{
+            Logger.w("视频未准备,不能执行resume");
+        }
     }
 
     @Override
     public void pause() {
-        mEmptyControlVideo.onVideoPause();
+        if(isPrePared()){
+            mEmptyControlVideo.onVideoPause();
+        }else{
+            Logger.w("视频未准备,不能暂停");
+        }
     }
 
     @Override

+ 0 - 1
app/src/main/java/com/haochuan/hciptvbasic/webview/HCWebChromeClient.java

@@ -18,7 +18,6 @@ public class HCWebChromeClient extends WebChromeClient {
                 + consoleMessage.lineNumber() + " of "
                 + consoleMessage.sourceId();
         Log.d(TAG,  errorMsg);
-        Logger.e("浏览器错误:" + errorMsg);
         return true;
     }
 

+ 1 - 1
app/src/main/java/com/haochuan/hciptvbasic/webview/PayToJS.java

@@ -41,6 +41,7 @@ public class PayToJS {
 
     /*
     * SDK初始化
+    * 已去除
     * */
     @JavascriptInterface
     public void sdkInit(String paramsJson){
@@ -65,7 +66,6 @@ public class PayToJS {
     public void pay(String paramsJson){
         //在这里添加支付逻辑
         Logger.d("pay");
-
     }
 
     /*

+ 78 - 12
app/src/main/java/com/haochuan/hciptvbasic/webview/PlayerToJS.java

@@ -15,6 +15,7 @@ import android.widget.FrameLayout;
 import com.haochuan.hciptvbasic.Util.JsUtil;
 import com.haochuan.hciptvbasic.Util.Logger;
 import com.haochuan.hciptvbasic.Util.MathUtil;
+import com.haochuan.hciptvbasic.Util.RegexUtil;
 import com.haochuan.hciptvbasic.Util.ScreenSnap;
 import com.haochuan.hciptvbasic.video.BaseMediaPlayer;
 
@@ -70,6 +71,7 @@ public class PlayerToJS {
      * 播放器继续播放事件
      * */
     public void onPlayerResume(){
+        Logger.d("onPlayerResume");
         JsUtil.evaluateJavascript(context,webView,JS_EVENT_RESUME);
     }
 
@@ -77,6 +79,7 @@ public class PlayerToJS {
      * 播放器暂停播放事件
      * */
     public void onPlayerPause(){
+        Logger.d("onPlayerPause");
         JsUtil.evaluateJavascript(context,webView,JS_EVENT_PAUSE);
     }
 
@@ -86,6 +89,7 @@ public class PlayerToJS {
      * 播放器缓冲事件
      * */
     public void onPlayingBuffer(){
+        Logger.d("onPlayerBuffer");
         JsUtil.evaluateJavascript(context,webView,JS_EVENT_PLAYINGBUFFER);
     }
 
@@ -93,6 +97,7 @@ public class PlayerToJS {
      * 播放器播放完毕事件
      * */
     public void onPlayerComplete(){
+        Logger.d("onPlayerComplete");
         JsUtil.evaluateJavascript(context,webView,JS_EVENT_COMPLETE);
     }
 
@@ -107,7 +112,9 @@ public class PlayerToJS {
 
     /*
     * 播放函数
-    *
+    *  @param url                 播放链接,type参数为1时必填
+    *  @param code                播放代码,,type参数为2时必填,该版本没用到
+    *  @param type                播放类型,改版本固定用url播放,1,url链接播放;2,传递code值播放;
      * @param x                  播放器x坐标
      * @param y                  播放器y坐标
      * @param width              播放器宽度
@@ -119,12 +126,33 @@ public class PlayerToJS {
         Logger.d("调用play函数,参数:" + playParamJson);
         try{
             JSONObject playParam = new JSONObject(playParamJson);
-            String url = playParam.has("url")?playParam.get("url").toString():"";
+            String url = "";
+            String typeStr = playParam.has("type")?playParam.get("type").toString():"1";
+            int type = 1;
+            if(TextUtils.isEmpty(typeStr)){
+                type = 1;
+            }
+            if(MathUtil.isDigitsOnly(typeStr)){
+                type = Integer.parseInt(typeStr);
+            }else{
+                Logger.e(PARAM_ERROR,"调用play函数,type参数错误,type:" + type);
+            }
+            switch (type){
+                case 1:
+                    url = playParam.has("url")?playParam.get("url").toString():"";
+                    break;
+                case 2:
+                    //该版本没有code获取url的功能,暂缺,请根据实际情况添加
+                    break;
+                default:
+                    url = playParam.has("url")?playParam.get("url").toString():"";
+                    break;
+            }
             if(TextUtils.isEmpty(url)){
                 Logger.e(PARAM_ERROR,"调用play函数,url为空,不能执行播放");
                 return PARAM_ERROR;
             }
-            String seekTime = playParam.has("seekTime")?playParam.get("seekTime").toString():"0";
+            String seekTime = playParam.has("seek_time")?playParam.get("seek_time").toString():"0";
             String x = playParam.has("x")?playParam.get("x").toString():"0";
             String y = playParam.has("y")?playParam.get("y").toString():"0";
             String width = playParam.has("width")?playParam.get("width").toString():"1280";
@@ -167,7 +195,8 @@ public class PlayerToJS {
             return PLAYER_OBJ_NULL;
         }
         try{
-            baseMediaPlayer.pause();
+            Activity activity = (Activity)context;
+            activity.runOnUiThread(()->baseMediaPlayer.pause());
             return SUCCESS;
         }catch (Exception e){
             e.printStackTrace();
@@ -185,7 +214,8 @@ public class PlayerToJS {
             return PLAYER_OBJ_NULL;
         }
         try{
-            baseMediaPlayer.resume();
+            Activity activity = (Activity)context;
+            activity.runOnUiThread(()->baseMediaPlayer.resume());
             return SUCCESS;
         }catch (Exception e){
             e.printStackTrace();
@@ -203,7 +233,8 @@ public class PlayerToJS {
             return PLAYER_OBJ_NULL;
         }
         try{
-            baseMediaPlayer.seek(position);
+            Activity activity = (Activity)context;
+            activity.runOnUiThread(()->baseMediaPlayer.seek(position));
             return SUCCESS;
         }catch (Exception e){
             e.printStackTrace();
@@ -214,6 +245,7 @@ public class PlayerToJS {
 
     /*
      * 资源释放
+     * 已去除,由客户端这边执行
      * */
     @JavascriptInterface
     public int release(){
@@ -222,7 +254,8 @@ public class PlayerToJS {
             return PLAYER_OBJ_NULL;
         }
         try{
-            baseMediaPlayer.release();
+            Activity activity = (Activity)context;
+            activity.runOnUiThread(()->baseMediaPlayer.release());
             return SUCCESS;
         }catch (Exception e){
             e.printStackTrace();
@@ -252,7 +285,7 @@ public class PlayerToJS {
 
     /*
     * 获取当前播放状态
-    * 状态说明:1,播放;2,暂停;3,播放完成停止;0,其他
+    * 状态说明:1,视频准备中;2,播放;3,暂停;4,缓冲;5,播放完成停止;
     * */
     @JavascriptInterface
     public int getPlayerStatus(){
@@ -263,6 +296,30 @@ public class PlayerToJS {
         return baseMediaPlayer.getCurrentStatus();
     }
 
+    /*
+    * 获得视频时长
+    * */
+    @JavascriptInterface
+    public int getDuration(){
+        if(baseMediaPlayer == null){
+            Logger.e("播放器为空,不能退出");
+            return PLAYER_OBJ_NULL;
+        }
+        return baseMediaPlayer.getDuration();
+    }
+
+    /*
+     * 获得当前播放时间
+     * */
+    @JavascriptInterface
+    public int getCurrentPlayTime(){
+        if(baseMediaPlayer == null){
+            Logger.e("播放器为空,不能退出");
+            return PLAYER_OBJ_NULL;
+        }
+        return baseMediaPlayer.getCurrentPlayPosition();
+    }
+
     /**-------------------------------------------功能函数-----------------------------------------------*/
 
     /*
@@ -278,6 +335,10 @@ public class PlayerToJS {
             Logger.e(PLAYER_OBJ_NULL,"播放器对象为空,不能播放");
             return PLAYER_OBJ_NULL;
         }
+        if(!RegexUtil.isUrl(url)){
+            Logger.e(PARAM_ERROR,"调用play函数,url格式不正确,不能执行播放,请检查;url:" + url);
+            return PARAM_ERROR;
+        }
         if(MathUtil.isDigitsOnly(x) && MathUtil.isDigitsOnly(y) && MathUtil.isDigitsOnly(width) && MathUtil.isDigitsOnly(height) && MathUtil.isDigitsOnly(seekTime)){
             int screenWidth = ScreenSnap.getScreenWidth(context);
             int screenHeight = ScreenSnap.getScreenHeight(context);
@@ -321,7 +382,7 @@ public class PlayerToJS {
      * */
     private void initVideoParamsIfNoInit(BaseMediaPlayer baseMediaPlayer,int x, int y, int width, int height){
         if(baseMediaPlayer == null){
-            Logger.e("播放器为空,不能执行initVideoParamsIfNoInit函数");
+            Logger.w("播放器为空,不能执行initVideoParamsIfNoInit函数");
             return;
         }
         FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
@@ -347,7 +408,7 @@ public class PlayerToJS {
     * */
     private int videoChange(String x,String y,String width, String height){
         if(baseMediaPlayer == null){
-            Logger.w("baseMediaPlayer is null,不能调用play函数");
+            Logger.e(PLAYER_OBJ_NULL,"baseMediaPlayer is null,不能调用play函数");
             return PLAYER_OBJ_NULL;
         }
 
@@ -368,7 +429,11 @@ public class PlayerToJS {
             int fromY = (int)baseMediaPlayer.getY();
             int fromWidth = baseMediaPlayer.getWidth();
             int fromHeight = baseMediaPlayer.getHeight();
-            return animChanged(fromX,toX,fromY,toY,fromWidth,toWidth,fromHeight,toHeight);
+            Activity activity = (Activity)context;
+            activity.runOnUiThread(()->{
+                animChanged(fromX,toX,fromY,toY,fromWidth,toWidth,fromHeight,toHeight);
+            });
+            return SUCCESS;
         }else{
             Logger.e(PARAM_ERROR,String.format("请正确传递change函数参数:x:%s;y:%s;width:%s;height:%s",
                     x,y,width,height));
@@ -394,7 +459,6 @@ public class PlayerToJS {
                 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                 params.width = (int) valueAnimator.getAnimatedValue("width");
                 params.height = (int) valueAnimator.getAnimatedValue("height");
-
                 if(baseMediaPlayer != null){
                     Logger.w("baseMediaPlayer is null,不能调用play函数");
                 }
@@ -420,6 +484,8 @@ public class PlayerToJS {
                 Activity activity = (Activity)context;
                 ViewGroup viewGroup = (ViewGroup) activity.getWindow().getDecorView();
                 viewGroup.removeView(baseMediaPlayer);
+            }else{
+                Logger.e(PLAYER_OBJ_NULL,"播放器对象为null,不能调用destroyVideo函数");
             }
         }catch (Exception e){
             e.printStackTrace();

+ 54 - 20
app/src/main/java/com/haochuan/hciptvbasic/webview/ToolToJS.java

@@ -25,7 +25,7 @@ import static com.haochuan.hciptvbasic.Util.MessageCode.PARAM_ERROR;
 import static com.haochuan.hciptvbasic.Util.MessageCode.SUCCESS;
 
 
-public class ToolToJS {
+public class UtilToJS {
     private Context context;                        //MainActivity 句柄
     private WebView webView;
     private ToolsUtil toolsUtil;
@@ -39,20 +39,12 @@ public class ToolToJS {
     //将response传递给js
     private String JS_EVENT_RESPONSE ="javascript:onWebRequestResponse('%s','%s')";
 
-    //开始下载事件
-    private String JS_EVENT_DOWNLOAD_START = "javascript:onDownloadStart()";
 
-    //下载进度通知,参数progress,下载进度
-    private String JS_EVENT_DOWNLOAD_PROGRESS = "javascript:onDownloadProgress(%s)";
+    //下载事件
+    private String JS_EVENT_DOWNLOAD_EVENT = "javascript:onDownloadEvent(%s,'%s')";
 
-    //下载成功事件,参数filePath,下载路径
-    private String JS_EVENT_DOWNLOAD_SUCCESS = "javascript:onDownloadSuccess('%s')";
 
-    //下载失败事件,参数errorMessage,错误信息
-    private String JS_EVENT_DOWNLOAD_FAIL = "javascript:onDownloadFail('%s')";
-
-
-    public ToolToJS(Context context, WebView webView){
+    public UtilToJS(Context context, WebView webView){
         this.context = context;
         this.webView = webView;
         toolsUtil = new ToolsUtil();
@@ -117,7 +109,6 @@ public class ToolToJS {
             localParamsJson.put("version_code",BuildConfig.VERSION_CODE);
             localParamsJson.put("version_name",BuildConfig.VERSION_NAME);
             localParamsJson.put("mac",MacUtil.getMac(context) != null ? MacUtil.getMac(context) : "");
-            localParamsJson.put("intent_json",new JSONObject(toolsUtil.getIntentJson(context)));
             return localParamsJson.toString();
         }catch (Exception e){
             e.printStackTrace();
@@ -159,25 +150,22 @@ public class ToolToJS {
             DownloadUtils.download(downloadUrl, context.getPackageName() + getVersionCode(), "apk", new DownloadUtils.DownloadProgressListener() {
                 @Override
                 public void onDownloadStart(String fileName) {
-                    JsUtil.evaluateJavascript(context,webView,JS_EVENT_DOWNLOAD_START);
+                    exeDownloadEvent(1,"");
                 }
 
                 @Override
                 public void onDownloadProgress(int progress) {
-                    JsUtil.evaluateJavascript(context,webView,
-                            String.format(JS_EVENT_DOWNLOAD_PROGRESS,progress));
+                    exeDownloadEvent(2,String.valueOf(progress));
                 }
 
                 @Override
                 public void onDownloadSuccessful(String filePath) {
-                    JsUtil.evaluateJavascript(context,webView,
-                            String.format(JS_EVENT_DOWNLOAD_SUCCESS,filePath));
+                    exeDownloadEvent(3,"");
                 }
 
                 @Override
                 public void onDownloadFail(String message){
-                    JsUtil.evaluateJavascript(context,webView,
-                            String.format(JS_EVENT_DOWNLOAD_FAIL,message));
+                    exeDownloadEvent(4,message);
                 }
             });
             return SUCCESS;
@@ -188,6 +176,52 @@ public class ToolToJS {
     }
 
     /*
+     * 下载并且安装
+     * */
+    @JavascriptInterface
+    public int downLoadAndInstall(String paramsJson){
+        try{
+            JSONObject jsonObject = new JSONObject(paramsJson);
+            String downloadUrl = jsonObject.has("download_url")?jsonObject.get("download_url").toString():"";
+            if(TextUtils.isEmpty(downloadUrl)){
+                Logger.e(PARAM_ERROR,"download_url is empty,download stopped");
+                return PARAM_ERROR;
+            }
+            DownloadUtils.download(downloadUrl, context.getPackageName() + getVersionCode(), "apk", new DownloadUtils.DownloadProgressListener() {
+                @Override
+                public void onDownloadStart(String fileName) {
+                    exeDownloadEvent(1,"");
+                }
+
+                @Override
+                public void onDownloadProgress(int progress) {
+                    exeDownloadEvent(2,String.valueOf(progress));
+                }
+
+                @Override
+                public void onDownloadSuccessful(String filePath) {
+                    exeDownloadEvent(3,"");
+                    install(String.format("{\"file_path\": \"%s\"}",filePath));
+                }
+
+                @Override
+                public void onDownloadFail(String message){
+                    exeDownloadEvent(4,message);
+                }
+            });
+            return SUCCESS;
+        }catch (Exception e){
+            e.printStackTrace();
+            return EXCEPTION_ERROR;
+        }
+    }
+
+    private void exeDownloadEvent(int type,String message){
+        JsUtil.evaluateJavascript(context,webView,
+                String.format(JS_EVENT_DOWNLOAD_EVENT,type,message));
+    }
+
+    /*
     * 获得下载文件MD5值
     * */
     @JavascriptInterface