Android实现启动展示广告页功能

共 3891字,需浏览 8分钟

 ·

2021-05-14 02:12

需求:在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();                    }                });    }


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

浏览 51
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报