Android實現(xiàn)啟動展示廣告頁功能
需求:在App應用退出后(此時App是在后臺運行的,并不是進程被殺死),每當用戶再次將該應用切換到前臺顯示時,總能向用戶展示3S的廣告頁。
思路:
1.在LaunchActivity中加載好廣告數(shù)據(jù),用戶首次進入應用時不展示廣告,而是將廣告數(shù)據(jù)存儲到數(shù)據(jù)庫,下次使用。
2.用戶一直按back鍵,退到MainActivity時,不銷毀MainActivity,而是跳轉到LaunchActivity,在LaunchActivity中跳轉到Home界面(手機的菜單界面),此時我們的應用的棧中存在兩個Activity(LaunchActivity,MainActivity)重點是MainActivity的啟動模式設置為SingleTask。然后配合跳轉的業(yè)務邏輯就能實現(xiàn)每次進入應用播放廣告的需求
簡單說下我的代碼實現(xiàn):
BaseActivity的onKeyDown方法,MainActivity繼承BaseACtivity
@Overridepublic 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方法(api = Build.VERSION_CODES.JELLY_BEAN)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("暫無網(wǎng)絡,請檢查網(wǎng)絡連接!");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方法
protected void onRestart() {super.onRestart();launchSplash();}
3、launchAplash方法,申請權限,獲取廣告數(shù)據(jù)
private void launchSplash() {/*** 由后臺接口控制,開屏頁是否顯示廣告*/if (launchPresenter == null)launchPresenter = new LaunchPresenter(this);/*** 檢查網(wǎng)絡*/boolean hasNetwork = NetUtils.hasNetwork(this);if (hasNetwork) {getPermissions();} else {screenIV.setVisibility(View.GONE);emptyViewParent.setVisibility(View.VISIBLE);}}
4、getPermission方法申請權限,其中showLaunchImg獲取廣告數(shù)據(jù),并在回調中判斷數(shù)據(jù)庫中是否有廣告數(shù)據(jù),有則展示廣告,獲取新廣告更新廣告緩存,跳轉MainActivity;沒有則調用獲取廣告的接口獲取廣告,在回調中緩存廣告,跳轉MainActivity
//獲取全部權限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);//獲取廣告數(shù)據(jù)showLaunchImg();}});}
基本的邏輯就是這樣,是否顯示廣告,可以由后臺在接口中用字段進行控制。具體的可按照你的業(yè)務邏輯進行擴展實現(xiàn)!
