admin
2024-10-30 4c44b1036ff555e63a9a8b027dbe89d0b08a430b
初始化导入
13个文件已修改
3个文件已添加
503 ■■■■ 已修改文件
BuWanVideo/AndroidManifest.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/build.gradle 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/libs/open_ad_6.1.7.2_841bfa881_2394g.aar 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/libs/open_ad_sdk_5.4.3.5.aar 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/res/values/strings.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoApplication.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/login/LoginActivity.java 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/main/DYNewsFragment.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/main/DYNovelFragment.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity2.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/AdUtil.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/FullVideoAdManager.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/src/com/weikou/beibeivideo/util/ad/InterstitialAdUtil.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-common/AndroidManifest.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
library-common/src/com/lcjian/library/util/common/DeviceUtil.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
BuWanVideo/AndroidManifest.xml
@@ -53,6 +53,7 @@
    <uses-permission android:name="com.ddysvideo.mozillaonline.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED" />
    <uses-permission android:name="com.ddysvideo.mozillaonline.permission.SEND_DOWNLOAD_COMPLETED_INTENTS" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
    <!-- 快手 -->
    <permission
        android:name="${applicationId}.permission.KW_SDK_BROADCAST"
@@ -336,7 +337,7 @@
            android:value="570f28a578d6e12cba6f7f200b8d1c83"></meta-data>
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="huawei"></meta-data>
            android:value="vivo"></meta-data>
        <provider
BuWanVideo/build.gradle
@@ -59,6 +59,8 @@
    implementation files('libs/AlibcTradeBiz-4.0.0.27.aar')
    implementation files('libs/AlibcTradeCommon-4.0.0.27.aar')
    implementation files('libs/nb_trade-4.0.0.27.aar')
    implementation files('libs/nb_trade-4.0.0.27.aar')
    implementation files('libs/open_ad_6.1.7.2_841bfa881_2394g.aar')
    implementation 'androidx.cardview:cardview:1.0.0'
@@ -106,7 +108,9 @@
    implementation("com.pangle.cn:pangrowth-dpsdk:5.1.1.0") {
        exclude group: 'com.pangle.cn', module: 'adclog'
    }
    implementation 'com.pangle.cn:pangrowth-djx-sdk:1.1.8.0'
    implementation 'com.pangle.cn:pangrowth-base:2.1.0.0'
    implementation 'com.pangle.cn:pangrowth-djx-sdk:2.1.0.0'
    implementation 'com.pangle.cn:pangrowth-nov-sdk:2.1.0.0'
    implementation 'com.bytedance.applog:RangersAppLog-Lite-cn:6.15.3'
@@ -159,17 +163,17 @@
    defaultConfig {
        applicationId "com.doudou.ysvideo"
        versionCode 148
        versionName "3.10.30"
        versionCode 149
        versionName "3.10.31"
        multiDexEnabled = true
        minSdkVersion 21
        targetSdkVersion 30
        ndk {
            // 32与64
//            abiFilters 'armeabi-v7a', 'arm64-v8a',  'x86', 'x86_64'
            abiFilters 'armeabi-v7a', 'arm64-v8a',  'x86', 'x86_64'
            //64的
            abiFilters 'arm64-v8a', 'x86_64'
//            abiFilters 'arm64-v8a', 'x86_64'
            //兼容64位与32位系统
//            abiFilters 'armeabi-v7a', 'arm64-v8a'
BuWanVideo/libs/open_ad_6.1.7.2_841bfa881_2394g.aar
Binary files differ
BuWanVideo/libs/open_ad_sdk_5.4.3.5.aar
Binary files differ
BuWanVideo/res/values/strings.xml
@@ -1,5 +1,5 @@
<resources>
    <string name="app_name">影视大全布丸</string>
    <string name="app_name">影视大全</string>
    <string name="recommend">视频</string>
    <string name="category">分类</string>
    <string name="discover">发现</string>
BuWanVideo/src/com/weikou/beibeivideo/BeibeiVideoApplication.java
@@ -50,6 +50,12 @@
import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;
import com.umeng.socialize.UMShareAPI;
import com.vivo.mobilead.manager.VInitCallback;
import com.vivo.mobilead.manager.VivoAdManager;
import com.vivo.mobilead.model.VAdConfig;
import com.vivo.mobilead.model.VCustomController;
import com.vivo.mobilead.model.VLocation;
import com.vivo.mobilead.unified.base.VivoAdError;
import com.weikou.beibeivideo.ui.SplashActivity;
import com.weikou.beibeivideo.ui.ad.SplashADFragment;
import com.weikou.beibeivideo.util.BeibeiConstant;
@@ -71,6 +77,7 @@
import java.util.LinkedList;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -249,9 +256,13 @@
        ImageLoader.getInstance().init(buildDefaultILC(application));
        initCSJAd(application, initListener);
        if("huawei".equalsIgnoreCase(channel)) {
        if(AndroidManifestUtil.isHuaWeiChannel(application)) {
            initHWAdSDK(application);
        }
       if(AndroidManifestUtil.isVIVOChannel(application)){
           initVIVOAdSDK(application);
       }
        initKSSDK(application);
        try {
            GlobalSetting.setEnableCollectAppInstallStatus(false);
@@ -433,6 +444,76 @@
                })// 是否开启sdk 调试⽇志 可选
                .build());
    }
    // VIVO广告初始化
    public static void initVIVOAdSDK(Application application){
        VAdConfig adConfig = new VAdConfig.Builder()
                .setMediaId("90928ed246a845d9a889aae07a961d78")
                //是否开启日志输出,请确保不要在正式环境开启
//                .setDebug(BuildConfig.DEBUG)
                //隐私数据获取配置,请根据 App 情况认真配置,避免产生收入问题或合规风险
                .setCustomController(new VCustomController() {
                    @Override
                    public boolean isCanUseLocation() {//是否允许获取位置信息,默认允许
                        return true;
                    }
                    @Override
                    public VLocation getLocation() {
                        //若不允许获取位置信息,亦可主动传给 SDK 位置信息
                        return null;
                    }
                    @Override
                    public boolean isCanUsePhoneState() {//是否允许获取 imei 信息,默认允许
                        return true;
                    }
                    @Override
                    public String getImei() {//若不允许获取 imei 信息,亦可主动传给 SDK imei 信息
                        String imei = DeviceUtil.getImeiCache(application);
                        return imei;
                    }
                    @Override
                    public boolean isCanUseWriteExternal() {//是否允许使用公共存储空间,默认允许
                        return true;
                    }
                    @Override
                    public boolean isCanPersonalRecommend() { //是否允许推荐个性化广告,默认允许
                        return true;
                    }
                    @Override
                    public boolean isCanUseImsi() { //是否允许获取 imsi,默认不允许
                        return false;
                    }
                    @Override
                    public boolean isCanUseApplist() { //是否允许获取应用列表,默认允许
                        return true;
                    }
                    @Override
                    public boolean isCanUseAndroidId() {//是否允许获取 AndroidId,默认允许
                        return true;
                    }
                    @Override
                    public boolean isCanUseMac() {//是否允许获取 mac,默认不允许
                        return false;
                    }
                    @Override
                    public boolean isCanUseIp() {//是否允许获取 ip,默认允许
                        return true;
                    }
                }).build();
        VivoAdManager.getInstance().init(application, adConfig, new VInitCallback() {
            @Override
            public void suceess() {
                Log.d("VIVO AD SDKInit", "suceess");
            }
            @Override
            public void failed(@NonNull VivoAdError adError) {
//若是报超时错误,则检查是否正常出现广告,如无异常,则是正常的
                Log.e("VIVO AD SDKInit", "failed: " + adError.toString());
            }
        });
    }
    private static boolean dpSDKIninted;
    public static void initDPSDK(Application application) {
BuWanVideo/src/com/weikou/beibeivideo/ui/login/LoginActivity.java
@@ -1,11 +1,13 @@
package com.weikou.beibeivideo.ui.login;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -21,6 +23,8 @@
import android.widget.Toast;
import com.lcjian.library.dialog.DialogUtil;
import com.lcjian.library.permission.PermissionHelper;
import com.lcjian.library.permission.PermissionInterface;
import com.lcjian.library.util.SingleToast;
import com.lcjian.library.util.common.DeviceUtil;
import com.lcjian.library.util.common.StringUtils;
@@ -45,7 +49,9 @@
import java.util.List;
import java.util.Map;
public class LoginActivity extends BaseActivity implements OnClickListener {
import androidx.annotation.NonNull;
public class LoginActivity extends BaseActivity implements OnClickListener, PermissionInterface {
    public static final int RESULT_LOGIN = 10;
    private LinearLayout ll_login_qq, ll_login_wx;
    private boolean isTouchLogin;// 用户是否点击登录
@@ -60,13 +66,14 @@
    private TextView tv_forget_pwd;
    private TextView tv_register;
    private TextView tv_login, tv_other_login, tv_title;
    private PermissionHelper mPermissionsChecker; // 权限检测器 检测是否有储存卡写入读取权限
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //防止截屏攻击风险
        if(!BeibeiConstant.IS_TEST) {
        if (!BeibeiConstant.IS_TEST) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
        }
        setContentView(R.layout.act_login);
@@ -103,6 +110,8 @@
        findViewById(R.id.tv_privacy_policy).setOnClickListener(this);
        setLoginType(false);
        mPermissionsChecker = new PermissionHelper(this, this);//权限
    }
    private void setLoginType(boolean email) {
@@ -142,6 +151,13 @@
                    SingleToast.showToast(LoginActivity.this, "选择同意用户协议后方可登录");
                    break;
                }
                if (Build.VERSION.SDK_INT < 30) {
                    //Android 11以下的要请求安装应用列表
                    if (mPermissionsChecker.lacksPermissions(getPermissions())) {//检测是否有写入的权限
                        mPermissionsChecker.showNormalDialog("设备应用列表权限说明", "判断设备是否安装QQ/微信,用于三方登录");
                        return;
                    }
                }
                if (isQQClientAvailable(getApplicationContext())) {
                    loginType = "1";
                    // qq登录逻辑处理 点击登录后需要暂时锁定返回键和返回功能 不然会报错
@@ -156,6 +172,14 @@
                if (!cb_user_agreement.isChecked()) {
                    SingleToast.showToast(LoginActivity.this, "选择同意用户协议后方可登录");
                    break;
                }
                if (Build.VERSION.SDK_INT < 30) {
                    //Android 11以下的要请求安装应用列表
                    if (mPermissionsChecker.lacksPermissions(getPermissions())) {//检测是否有写入的权限
                        mPermissionsChecker.showNormalDialog("设备应用列表权限说明", "判断设备是否安装QQ/微信,用于三方登录");
                        return;
                    }
                }
                if (isWXClientAvailable(getApplicationContext())) {
                    loginType = "2";
@@ -197,29 +221,27 @@
     * 判断qq是否可用
     */
    public static boolean isQQClientAvailable(Context context) {
        List<PackageInfo> pinfo = DeviceUtil.getInstalledPackagesCache(context);
        if (pinfo != null) {
            for (int i = 0; i < pinfo.size(); i++) {
                String pn = pinfo.get(i).packageName;
                if (pn.equals("com.tencent.mobileqq")) {
                    return true;
                }
            }
        PackageManager packageManager = context.getPackageManager();
        try {
            // 尝试获取应用信息
            packageManager.getPackageInfo("com.tencent.mobileqq", PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            // 应用未找到,返回 false
            return false;
        }
        return false;
    }
    public static boolean isWXClientAvailable(Context context) {
        List<PackageInfo> pinfo = DeviceUtil.getInstalledPackagesCache(context);
        if (pinfo != null) {
            for (int i = 0; i < pinfo.size(); i++) {
                String pn = pinfo.get(i).packageName;
                if (pn.equals("com.tencent.mm")) {
                    return true;
                }
            }
        PackageManager packageManager = context.getPackageManager();
        try {
            // 尝试获取应用信息
            packageManager.getPackageInfo("com.tencent.mm", PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
            // 应用未找到,返回 false
            return false;
        }
        return false;
    }
    UMAuthListener authListener = new UMAuthListener() {
@@ -465,4 +487,34 @@
            finish();
        }
    }
    @Override
    public int getPermissionsRequestCode() {
        return 20001;
    }
    @Override
    public String[] getPermissions() {
        return new String[]{Manifest.permission.INSTALL_PACKAGES};
    }
    @Override
    public void requestPermissionsSuccess() {
        DeviceUtil.getInstalledPackages(this);
    }
    @Override
    public void requestPermissionsFail() {
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (mPermissionsChecker.requestPermissionsResult(requestCode, permissions, grantResults)) {
            //权限请求结果,并已经处理了该回调
            return;
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}
BuWanVideo/src/com/weikou/beibeivideo/ui/main/DYNewsFragment.java
@@ -8,23 +8,15 @@
import com.bytedance.sdk.dp.DPWidgetNewsParams;
import com.bytedance.sdk.dp.IDPNewsListener;
import com.bytedance.sdk.dp.IDPWidget;
import com.kwad.sdk.api.KsAdSDK;
import com.kwad.sdk.api.KsContentPage;
import com.kwad.sdk.api.KsFeedPage;
import com.kwad.sdk.api.KsScene;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.ui.MyRetainViewFragment;
import com.weikou.beibeivideo.util.ad.KSConstant;
import com.weikou.beibeivideo.util.video.DPEventCollectUtil;
import com.weikou.beibeivideo.widget.MySwipeRefreshLayout;
import java.util.List;
import java.util.Map;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
/**
 * 主页面--快手视频
BuWanVideo/src/com/weikou/beibeivideo/ui/main/DYNovelFragment.java
New file
@@ -0,0 +1,109 @@
package com.weikou.beibeivideo.ui.main;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.bytedance.sdk.djx.IDJXWidget;
import com.bytedance.sdk.dp.DPSdk;
import com.bytedance.sdk.dp.DPWidgetNewsParams;
import com.bytedance.sdk.dp.IDPNewsListener;
import com.bytedance.sdk.dp.IDPWidget;
import com.bytedance.sdk.nov.api.INovWidgetFactory;
import com.bytedance.sdk.nov.api.NovSdk;
import com.bytedance.sdk.nov.api.params.NovReaderConfig;
import com.bytedance.sdk.nov.api.params.NovWidgetHomeParams;
import com.weikou.beibeivideo.R;
import com.weikou.beibeivideo.ui.MyRetainViewFragment;
import com.weikou.beibeivideo.util.video.DPEventCollectUtil;
import com.weikou.beibeivideo.widget.MySwipeRefreshLayout;
import java.util.Map;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
/**
 * 抖音短故事
 */
public class DYNovelFragment extends MyRetainViewFragment {
    private static final String TAG = "DYNovelFragment";
    private FragmentManager fragmentManager;
    private IDJXWidget mIDPWidget;
    private MySwipeRefreshLayout swipeRefreshLayout;
    public DYNovelFragment() {
        super();
    }
    public DYNovelFragment(FragmentManager fragmentManager) {
        super();
        this.fragmentManager = fragmentManager; //fragmentManager;
        setName(DYNovelFragment.class.getName());
    }
    private Fragment fragment;
    @Override
    public int getContentResource() {
        return R.layout.fragment_ks_video;
    }
    @Override
    public void onResume() {
        super.onResume();
        if (mIDPWidget != null && mIDPWidget.getFragment() != null) {
            mIDPWidget.getFragment().onResume();
        }
    }
    @Override
    public void onPause() {
        super.onPause();
        if (mIDPWidget != null && mIDPWidget.getFragment() != null) {
            mIDPWidget.getFragment().onPause();
        }
    }
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (mIDPWidget != null && mIDPWidget.getFragment() != null) {
            mIDPWidget.getFragment().setUserVisibleHint(isVisibleToUser);
        }
    }
    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
        if (mIDPWidget != null && mIDPWidget.getFragment() != null) {
            mIDPWidget.getFragment().onHiddenChanged(hidden);
        }
    }
    @Override
    public void onCreateView(View contentView, Bundle savedInstanceState) {
        Log.i(TAG, "onCreateView");
        swipeRefreshLayout = contentView.findViewById(R.id.srl_ks);
        swipeRefreshLayout.setEnabled(false);
        initNewsWidget();
    }
    private void initNewsWidget() {
        NovReaderConfig config=new NovReaderConfig();
        NovWidgetHomeParams params =  new NovWidgetHomeParams(config);
        mIDPWidget = NovSdk.factory().createStoryHome(params);
        Fragment fragment = mIDPWidget.getFragment();
        if (fragment != null && getChildFragmentManager() != null) {
            getChildFragmentManager().beginTransaction().replace(R.id.fl_content, fragment).commitAllowingStateLoss();
        }
    }
    private static void log(String msg) {
        Log.d(TAG, String.valueOf(msg));
    }
}
BuWanVideo/src/com/weikou/beibeivideo/ui/main/MainActivity.java
@@ -1,5 +1,6 @@
package com.weikou.beibeivideo.ui.main;
import android.Manifest;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
@@ -7,6 +8,7 @@
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Color;
import android.graphics.ColorMatrix;
@@ -88,6 +90,7 @@
import java.util.Random;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.CursorLoader;
@@ -132,8 +135,8 @@
        return new Fragment[]{
                new HomeFragment(), new DrawVideoFragment(getSupportFragmentManager()),
                new DYNovelFragment(getSupportFragmentManager()),
                new DYNewsFragment(getSupportFragmentManager()), new DYDramaVideoFragment(getSupportFragmentManager()), new MineFragment()
        };
    }
@@ -148,6 +151,11 @@
            case R.id.rb_nav_draw_video: {
                mFragmentSwitchHelper
                        .changeFragment(DrawVideoFragment.class);
            }
            break;
            case R.id.rb_nav_novel: {
                mFragmentSwitchHelper
                        .changeFragment(DYNovelFragment.class);
            }
            break;
            case R.id.rb_nav_short_tv: {
@@ -283,6 +291,13 @@
            public void onStartComplete(boolean b, String s) {
            }
        });
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            String[] permissions={
                    Manifest.permission.READ_PHONE_STATE
            };
            ActivityCompat.requestPermissions(MainActivity.this, permissions, 10010);
        }
    }
    /**
@@ -461,11 +476,12 @@
                        AdUtil.setAdHuaWeiShown(getApplicationContext(), AdPositionEnum.homeInterstitial);
                    }
                    InterstitialAdUtil.showAd(MainActivity.this, type, HuaWeiAdConstant.HW_AD_HOME_INTERSTITIAL);
                } else {
                }else if (type == AdUtil.AD_TYPE.vivo) {
                    InterstitialAdUtil.showAd(MainActivity.this, type, "33fcac40272e43e1b52d18e9988afeef");
                }
                else {
                    InterstitialAdUtil.showAd(MainActivity.this, type, GDTConstant.HOME_INTERSTITIAL);
                }
            }
        };
        //延迟三秒显示
BuWanVideo/src/com/weikou/beibeivideo/ui/media/VideoDetailActivity2.java
@@ -86,6 +86,7 @@
import com.weikou.beibeivideo.util.ad.AdUtil;
import com.weikou.beibeivideo.util.ad.CSJConstant;
import com.weikou.beibeivideo.util.ad.FullVideoAdManager;
import com.weikou.beibeivideo.util.ad.GDTConstant;
import com.weikou.beibeivideo.util.ad.HuaWeiAdConstant;
import com.weikou.beibeivideo.util.ad.InterstitialAdUtil;
import com.weikou.beibeivideo.util.goldcorn.GoldCornUtil;
@@ -310,30 +311,33 @@
            return;
        //如果是全局广告配置不允许展示则不展示
        if (AdUtil.getAdType(getApplicationContext(), AdPositionEnum.videoDetailFullVideo)==null){
        AdUtil.AD_TYPE adType = AdUtil.getAdType(getApplicationContext(), AdPositionEnum.videoDetailFullVideo);
        if(adType==null){
            return;
        }
        //加载广告
        if (BeibeiConstant.AD_TYPE.isVideoDetailSplashAd()) {
            //如果是华为渠道,固定为广点通插屏
            if(AndroidManifestUtil.isHuaWeiChannel(getApplicationContext())){
            if(adType == AdUtil.AD_TYPE.hw){
                if(!AdUtil.canShowAdHuaWei(getApplicationContext(),AdPositionEnum.videoDetailFullVideo)){
                    return;
                }
                AdUtil.setAdHuaWeiShown(getApplicationContext(),AdPositionEnum.videoDetailFullVideo);
                //采用广点通插屏
                //采用华为插屏
                InterstitialAdUtil.showAd(this, AdUtil.AD_TYPE.hw, HuaWeiAdConstant.HW_AD_VIDEO_DETAIL_INTERSTITIAL);
                return;
            }else  if(adType == AdUtil.AD_TYPE.vivo){
                InterstitialAdUtil.showAd(this, AdUtil.AD_TYPE.vivo, "5300a2b3d8054b1780d44fc0fcee67c9");
                return;
            }
            //判断加载广告的类型
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
                int fullvideo = adInfo.getFullVideoWeight();
                int interstitial = adInfo.getInterstitialWeight();
                int random = (int) ((fullvideo + interstitial) * Math.random());
                if (random <= fullvideo) {
            int fullvideo = adInfo.getFullVideoWeight();
            int interstitial = adInfo.getInterstitialWeight();
            int random = (int) ((fullvideo + interstitial) * Math.random());
            if (random <= fullvideo) {
                // 全屏广告
                if(adType == AdUtil.AD_TYPE.gdt||Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT_WATCH){
                    FullVideoAdManager.getInstance().loadGDT(VideoDetailActivity2.this, null);
                }else{
                    if (FullVideoAdManager.getInstance().isCacahed()) {
                        FullVideoAdManager.getInstance().showAd(this);
                    } else {
@@ -344,11 +348,15 @@
                            }
                        });
                    }
                } else {
                }
            }else{
                // 插屏广告
                if(adType == AdUtil.AD_TYPE.gdt||Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT_WATCH){
                    // 广点通
                    InterstitialAdUtil.showAd(this, AdUtil.AD_TYPE.gdt, GDTConstant.PID_2_VIDEO_DETAIL_INTERSTITIAL);
                }else{
                    showInterstitialAd();
                }
            } else {
                FullVideoAdManager.getInstance().loadGDT(VideoDetailActivity2.this, null);
            }
        }
    }
BuWanVideo/src/com/weikou/beibeivideo/util/ad/AdUtil.java
@@ -19,7 +19,7 @@
public class AdUtil {
    public enum AD_TYPE {
        gdt("广点通"), csj("穿山甲"), gdt2("广点通2.0"), hw("华为");
        gdt("广点通"), csj("穿山甲"), gdt2("广点通2.0"), hw("华为"), vivo("vivo");
        private String name;
BuWanVideo/src/com/weikou/beibeivideo/util/ad/FullVideoAdManager.java
@@ -51,11 +51,10 @@
    private void loadCSJ(final Context context, final IFullVideoAdListener adListener) {
        int w = DimenUtils.getScreenWidth(context);
        int h = DimenUtils.getScreenHeight(context);
        String channel = AndroidManifestUtil.getChannel(context);
        String pid =AndroidManifestUtil.isVIVOChannel(context)?CSJConstant.VIDEO_DETAIL_INTERSTITIALAD_VIVO : CSJConstant.VIDEO_DETAIL_INTERSTITIALAD;
        if ("huawei".equalsIgnoreCase(channel)) {
            pid = "948943768";
        }
        String pid =CSJConstant.VIDEO_DETAIL_INTERSTITIALAD;
//        if ("huawei".equalsIgnoreCase(channel)) {
//            pid = "948943768";
//        }
        AdSlot adSlot = new AdSlot.Builder()
BuWanVideo/src/com/weikou/beibeivideo/util/ad/InterstitialAdUtil.java
@@ -16,6 +16,15 @@
import com.qq.e.ads.interstitial2.UnifiedInterstitialAD;
import com.qq.e.ads.interstitial2.UnifiedInterstitialADListener;
import com.qq.e.comm.util.AdError;
import com.vivo.mobilead.unified.base.AdParams;
import com.vivo.mobilead.unified.base.VivoAdError;
import com.vivo.mobilead.unified.base.callback.MediaListener;
import com.vivo.mobilead.unified.interstitial.UnifiedVivoInterstitialAd;
import com.vivo.mobilead.unified.interstitial.UnifiedVivoInterstitialAdListener;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class InterstitialAdUtil {
@@ -33,6 +42,8 @@
            showGDT(context, pid);
        }else if (adType == AdUtil.AD_TYPE.hw) {
            loadHW(context, pid);
        }else if (adType == AdUtil.AD_TYPE.vivo) {
            loadVIVO(context, pid);
        }
    }
@@ -93,6 +104,74 @@
        interstitialAd.loadAd(adParam);
    }
    private static Map<String, UnifiedVivoInterstitialAd> vivoInterstitialAdMap=new HashMap<>();
    private static void loadVIVO(Activity context, String adId) {
        AdParams adParam = new AdParams.Builder(adId).build();
        UnifiedVivoInterstitialAd  vivoInterstitialAd = new UnifiedVivoInterstitialAd(context, adParam, new UnifiedVivoInterstitialAdListener() {
            @Override
            public void onAdReady() {
                Log.i(TAG,"onAdReady");
                if(vivoInterstitialAdMap.get(adId)!=null) {
                    Objects.requireNonNull(vivoInterstitialAdMap.get(adId)).showAd();
                }
            }
            @Override
            public void onAdFailed(VivoAdError vivoAdError) {
                Log.i(TAG,"VivoAdError:"+vivoAdError.getMsg());
            }
            @Override
            public void onAdClick() {
            }
            @Override
            public void onAdShow() {
            }
            @Override
            public void onAdClose() {
                vivoInterstitialAdMap.remove(adId);
            }
        });
        vivoInterstitialAdMap.put(adId, vivoInterstitialAd);
        vivoInterstitialAd.setMediaListener(new MediaListener() {
            @Override
            public void onVideoStart() {
            }
            @Override
            public void onVideoPause() {
            }
            @Override
            public void onVideoPlay() {
            }
            @Override
            public void onVideoError(VivoAdError vivoAdError) {
              Log.i(TAG,"VivoAdError");
            }
            @Override
            public void onVideoCompletion() {
                Log.i(TAG,"onVideoCompletion");
            }
            @Override
            public void onVideoCached() {
                Log.i(TAG,"onVideoCached");
            }
        });
        vivoInterstitialAd.loadVideoAd();
    }
    private static UnifiedInterstitialAD iad = null;
library-common/AndroidManifest.xml
@@ -4,6 +4,8 @@
    android:versionName="1.0" >
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <application
        android:allowBackup="true"
        android:label="@string/app_name"
library-common/src/com/lcjian/library/util/common/DeviceUtil.java
@@ -1,14 +1,18 @@
package com.lcjian.library.util.common;
import android.Manifest;
import android.app.Application;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.provider.Settings;
import android.telephony.TelephonyManager;
import java.util.ArrayList;
import java.util.List;
import androidx.core.app.ActivityCompat;
import static android.content.Context.TELEPHONY_SERVICE;
@@ -30,6 +34,13 @@
        return installedPackages;
    }
    public static synchronized List<PackageInfo> getInstalledPackages(Context context) {
        PackageManager pManager = context.getPackageManager();
        //获取手机内所有应用
        installedPackages = pManager.getInstalledPackages(0);
        return installedPackages;
    }
    public static synchronized List<String> getInstalledPackageNamesCache(Context context) {
        List<PackageInfo> list = getInstalledPackagesCache(context);
@@ -41,27 +52,34 @@
    }
    public static synchronized String getImeiCache(Context context) {
        if(imei!=null){
        if (imei != null) {
            return imei;
        }
        TelephonyManager manager = (TelephonyManager) context.getSystemService(TELEPHONY_SERVICE);
        try {
            imei = manager.getDeviceId();
        }catch(Exception e){
            if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                return null;
            }
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                imei = manager.getImei();
            }else{
                imei = manager.getDeviceId();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        imei = imei == null ? "" : imei;
        return imei;
    }
    public static synchronized String getAndroidIdCache(Context context){
        if(android_id!=null){
    public static synchronized String getAndroidIdCache(Context context) {
        if (android_id != null) {
            return android_id;
        }
        try {
            android_id = Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
        }catch(Exception e){
        } catch (Exception e) {
        }
        android_id = android_id == null ? "" : android_id;
@@ -69,15 +87,15 @@
    }
    public static synchronized String getImsiCache(Context context){
        if(imsi!=null){
    public static synchronized String getImsiCache(Context context) {
        if (imsi != null) {
            return imsi;
        }
        TelephonyManager mTelephonyMgr = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        try {
            imsi = mTelephonyMgr.getSubscriberId();
        }catch(Exception e){
        } catch (Exception e) {
        }
        imsi = imsi == null ? "" : imsi;