Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android启动页广告(腾讯广告联盟)解决方法及源码下载大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Android启动页广告(腾讯广告联盟)

启动页几乎成为了每个app的标配,有些商家在启动页增加了开屏广告以此带来更多的收入。目前启动页的广告都有倒计时的功能,那么我们在倒计时的过程中能做些什么呢?

这篇文章主要包括以下两方面内容

  1. 集成腾讯广告联盟的SDK
  2. 启动页加载过程中,@L_772_10@初始化数
  3. @H_404_21@

    我们在设计启动页时的常规做法是建立一个Activity来加载开屏图片或者广告,作为程序的入口,那么在这个三到五秒时间内如果进行数据下载,当用户点击了跳过按钮或者计时结束了数据还没初始化完成,已经进入了主页面,而主界面刚好需要那些基础数据该如何?

    Android启动页广告(腾讯广告联盟)解决方法及源码下载


                                        随机广告与移动无关

    因此,我们将启动页和主界面设计成两个Fragment,集成到MainActivity中。这样我们在启动页中加载广告,在主界面中下载数据,登陆等耗时操作,程序的结构如下:

    Android启动页广告(腾讯广告联盟)解决方法及源码下载


                                                 结构

    01 activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://scheR_347_11845@as.android.com/apk/res/android"
      xmlns:tools="http://scheR_347_11845@as.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      tools:context="com.landptf.blog.MainActivity">
    
      <fragment
        android:id="@+id/fm_splash"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.landptf.blog.splash.SplashFragment" />
    
      <fragment
        android:id="@+id/fm_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.landptf.blog.MainFragment" />
    
    </FrameLayout>
    
    

    包含了两个fragment,分别是加载广告也和主界面的

    02 MainActivity.java

    /**
     * Created by landptf on 2017/03/18.
     * 主页面,包含了SplashFragment和MainFragment
     */
    public class MainActivity extends AppCompatActivity {
    
      private FragmentManager fRMANager;
      private SplashFragment fmSplash;
      private MainFragment fmMain;
    
      @Override
      protected void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);
        setContentView(R.layout.activity_main);
        initView();
      }
    
      private void initView() {
        fRMANager = getSupportFragmentManager();
        fmSplash = (SplashFragment) fRMANager.findFragmentById(R.id.fm_splash);
        fmMain = (MainFragment) fRMANager.findFragmentById(R.id.fm_main);
        showSplash();
      }
    
      private void showSplash(){
        fRMANager.begintransaction().hide(fmMain).show(fmSplash).commit();
      }
    
      public void dismissSplash(){
        fRMANager.begintransaction().hide(fmSplash).show(fmMain).commitAllowingStateLoss();
      }
    }
    
    

    在SplashFragment中广告加载完成或者点击跳过后调用dismissSplash将SplashFragment隐藏,将MainFragment显示出来

    03 SplashFragment.java

    /**
     * Created by landptf on 2017/03/18.
     * 启动页,集成了腾讯广告联盟的开屏广告
     */
    public class SplashFragment extends Fragment {
      private static final String TAG = SplashFragment.class.getSimpl@R_801_8371@();
    
      private MainActivity activity;
    
      private ViewGroup container;
      private TextView tvSkip;
      private ImageView ivSplashHolder;
      private static final String SKIP_TEXT = "点击跳过 %d";
    
      @Override
      public void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);
      }
    
      @Override
      public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE) {
        return inflater.inflate(R.layout.fragment_splash,container,falsE);
      }
    
      @Override
      public void onActivityCreated(@Nullable Bundle savedInstanceStatE) {
        super.onActivityCreated(savedInstanceStatE);
        activity = (MainActivity) getActivity();
        initView();
      }
    
      private void initView() {
        container = (ViewGroup) activity.findViewById(R.id.fl_splash_container);
        tvSkip = (TextView) activity.findViewById(R.id.tv_skip);
        ivSplashHolder = (ImageView) activity.findViewById(R.id.iv_splash_holder);
        //申请动态权限
        ApplyPermissions();
      }
    
      /**
       * 动态申请集成腾讯广告联盟的开屏广告所需要的三个权限
       * 使用了RxPermissions开源框架
       */
      private void ApplyPermissions() {
        RxPermissions rxPermissions = new RxPermissions(activity);
        rxPermissions
            .request(Manifest.permission.READ_PHONE_STATE,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.WRITE_EXTERNAL_STORAGE)
            .subscribe(granted -> {
              if (granted) {
                //获取开屏广告
                new SplashAD(activity,tvSkip,Constants.APPID,Constants.SplashPosID,adListener,5000);
              } else {
                //直接进入主页面
                activity.dismissSplash();
              }
            });
    
      }
    
      /**
       * 开屏广告状态的监听
       */
      private SplashADListener adListener = new SplashADListener() {
    
        /**
         * 广告关闭调用,可能是用户关闭或者展示时间到。此时一般需要跳过开屏的Activity,进入应用内容页面
         */
        @Override
        public void onADDismissed() {
          activity.dismissSplash();
        }
    
        /**
         * 广告加载失败,errCode用于描述失败原因。
         * @param i
         */
        @Override
        public void onNoAD(int i) {
          Log.e(tag,"error code = " + i);
          activity.dismissSplash();
        }
    
        /**
         * 广告成功展示时调用
         */
        @Override
        public void onADPresent() {
          ivSplashHolder.setVisibility(View.GONE);
        }
    
        /**
         * 广告被点击时调用
         */
        @Override
        public void onADClicked() {
          Log.i(tag,"SplashADClicked");
        }
    
        /**
         * 倒计时回调,返回广告还将被展示的剩余时间,单位是ms
         * @param l
         */
        @Override
        public void onADTick(long l) {
          tvSkip.setText(String.format(SKIP_TEXT,Math.round(l / 1000f)));
        }
      };
    }
    
    

    这里集成了腾讯广告联盟,点击这里注册,流程比较简单,按照说明一步一步进行就可以了,sdk文档也比较详细。

    当广告加载完成后调用 activity.dismissSplash();将其隐藏

    04 MainFragment.java

    /**
     * 模拟@L_772_10@耗时操作
     */
    private void testThread(){
      new Thread(() -> {
        int i = 0;
        while (i < 5) {
          try {
            Thread.sleep(1000);
          } catch (InterruptedException E) {
            e.printStackTrace();
          }
          Log.e(tag,"--- " + i + " ---");
          i++;
        }
      }).start();
    }
    

    在MainFragment主线程中开启了一个只线程来模拟耗时操作,通过log可以看到在广告倒计时的过程中线程已经在执行了。

    03-18 03:30:50.348 9491-9513/com.landptf.blog E/MainFragment: --- 0 ---
    03-18 03:30:51.348 9491-9513/com.landptf.blog E/MainFragment: --- 1 ---
    03-18 03:30:52.348 9491-9513/com.landptf.blog E/MainFragment: --- 2 ---
    03-18 03:30:53.349 9491-9513/com.landptf.blog E/MainFragment: --- 3 ---
    03-18 03:30:54.350 9491-9513/com.landptf.blog E/MainFragment: --- 4 ---

    以上就是app的启动页方案,充分利用了加载广告的时间

    代码下载:http://xiazai.code.net/201703/yuanma/BlogDemo-master(code.net).rar

大佬总结

以上是大佬教程为你收集整理的Android启动页广告(腾讯广告联盟)解决方法及源码下载全部内容,希望文章能够帮你解决Android启动页广告(腾讯广告联盟)解决方法及源码下载所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。