Android启动广告页

作者: 编程的猫 | 来源:发表于2019-12-29 16:51 被阅读0次

    需求:在App应用退出后(此时App是在后台运行的,并不是进程被杀死),每当用户再次将该应用切换到前台显示时,总能向用户展示3S的广告页。

    思路:
    1.在LaunchActivity中加载好广告数据,用户首次进入应用时不展示广告,而是将广告数据存储到数据库,下次使用。
    2.用户一直按back键,退到MainActivity时,不销毁MainActivity,而是跳转到LaunchActivity,在LaunchActivity中跳转到Home界面(手机的菜单界面),此时我们的应用的栈中存在两个Activity(LaunchActivity,MainActivity)重点是MainActivity的启动模式设置为SingleTask。然后配合跳转的业务逻辑就能实现每次进入应用播放广告的需求

    一下简单说下我的代码实现:

    BaseActivity的onKeyDown方法,MainActivity继承BaseACtivity

     @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK &&
                    MyActivityManager.getMyActivityManager().getActSize() == 1 &&
                    MyActivityManager.getMyActivityManager().isActivityExist(MainActivity.class)) {
                Intent intent = new Intent(this, SplashActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("flag", 2);
                startActivity(intent);
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }
    

    LaunchActivity没有继承BaseActivity,LaunchActivity(我的叫SplashActivity)的代码逻辑如下:

    1.onCreate方法

    //onCreate方法
     @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //将window的背景图置空
            getWindow().setBackgroundDrawable(null);
            //是否全屏
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
            setContentView(R.layout.activity_splash);
            skipAd = findViewById(R.id.skipAd);
            screenIV = findViewById(R.id.screenIV);
            emptyViewParent = findViewById(R.id.emptyViewParent);
            TextView emptyTv = findViewById(R.id.emptyTv);
            emptyTv.setText("暂无网络,请检查网络连接!");
    
            Intent intent = getIntent();
            if (intent != null && intent.getIntExtra("flag", 0) == 2) {
                Intent home = new Intent(Intent.ACTION_MAIN);
                home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                home.addCategory(Intent.CATEGORY_HOME);
                startActivity(home);
            } else {
                    launchSplash();
            }
        }
    

    2.onRestart方法,当用户将应用切换到前台时,会走LaunchActivity的onRestart方法

     @Override
        protected void onRestart() {
            super.onRestart();
            launchSplash();
        }
    

    3.launchAplash方法,申请权限,获取广告数据

    private void launchSplash() {
            /**
             * 由后台接口控制,开屏页是否显示广告
             */
            if (launchPresenter == null)
                launchPresenter = new LaunchPresenter(this);
            /**
             * 检查网络
             */
            boolean hasNetwork = NetUtils.hasNetwork(this);
            if (hasNetwork) {
                getPermissions();
            } else {
                screenIV.setVisibility(View.GONE);
                emptyViewParent.setVisibility(View.VISIBLE);
            }
        }
    

    4.getPermission方法申请权限,其中showLaunchImg获取广告数据,并在回调中判断数据库中是否有广告数据,有则展示广告,获取新广告更新广告缓存,跳转MainActivity;没有则调用获取广告的接口获取广告,在回调中缓存广告,跳转MainActivity

      //获取全部权限
        @SuppressLint("CheckResult")
        private void getPermissions() {
            RxPermissions rxPermissions = new RxPermissions(this);
            rxPermissions.requestEach(PermissionC.APP_PERMISSION)
    //                .observeOn(Schedulers.io())
    //                .subscribeOn(AndroidSchedulers.mainThread())
                    .subscribe(permission -> {
                        if (permission.name.equals(Manifest.permission.ACCESS_COARSE_LOCATION)
                                && permission.granted) {
                            Location location = LocationMonitor.getInstance(SplashActivity.this,
                                    SplashActivity.this).getLocation();
                            if (location != null)
                                getCity(location);
                           //获取广告数据
                            showLaunchImg();
                        }
                    });
        }
    

    基本的逻辑就是这样,是否显示广告,可以由后台在接口中用字段进行控制。具体的可按照你的业务逻辑进行扩展实现!

    相关文章

      网友评论

        本文标题:Android启动广告页

        本文链接:https://www.haomeiwen.com/subject/zqnyoctx.html