2つのappアプリケーションの起動を傍受することによって、広告ページが起動されるたびに効果を実現する.

4727 ワード

  • この方式はアプリケーション内で傍受を行い,FrameWorkが提供する傍受によって起動したactivityの数を判断する.
  •  registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                @Override
                public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
    
                }
    
                @Override
                public void onActivityStarted(Activity activity) {
                    mFinalCount++;
                    //  mFinalCount ==1,         
                    Log.e("onActivityStarted", mFinalCount +"");
                    if (mFinalCount == 1){
                        //          
                        Intent intent = new Intent(getApplicationContext(), StartActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        startActivity(intent);
                    }
                }
    
                @Override
                public void onActivityResumed(Activity activity) {
    
                }
    
                @Override
                public void onActivityPaused(Activity activity) {
    
                }
    
                @Override
                public void onActivityStopped(Activity activity) {
                    mFinalCount--;
                    //  mFinalCount ==0,        
                    Log.i("onActivityStopped", mFinalCount +"");
                    if (mFinalCount == 0){
                        //          
                    }
                }
    
                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
    
                }
    
                @Override
                public void onActivityDestroyed(Activity activity) {
    
                }
            });
    

    2.BaseActivityの中で傍受を行い、第1の方式はactivityがすべて継承し、自身のライフサイクルを傍受する方式で判断する.
    public class BaseActivity extends Activity{
        public static boolean isActive; //    
        @Override
        protected void onResume() {
            Log.d("dukang", "Base onResume: ");
            if (!isActive) {
                //app      ,    
                isActive = true;
                Log.i("ACTIVITY", "       ");
    //            startActivity(new Intent(this,StartActivity.class));
            }
            super.onResume();
        }
    
        @Override
        protected void onStart() {
            super.onStart();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
        }
    
        @Override
        protected void onStop() {
            Log.d("DK", "onStop:       "+System.currentTimeMillis());
            if (!isAppOnForeground()) {
                //app     
                isActive = false;//          
                Log.d("DK", "      "+System.currentTimeMillis());
            }
            super.onStop();
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
        }
    
        /**
         * APP          
         *
         * @return
         */
        public boolean isAppOnForeground() {
            ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(Context.ACTIVITY_SERVICE);
            String packageName = getApplicationContext().getPackageName();
            List appProcesses = activityManager
                    .getRunningAppProcesses();
            if (appProcesses == null)
                return false;
    
            for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
                // The name of the process that this object is associated with.
                if (appProcess.processName.equals(packageName)
                        && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                    return true;
                }
            }
    
            return false;
        }
    }
    
    

    3.この2つの方法で一般的な広告機能を完成することができ、通常のシナリオを使用する:appを起動するたびにガイドページが飛び出し、前の終了したページの実現効果を表示し、具体的には効果を見る.
    (流れはまず最初にappを起動して、案内ページに入って、それから2秒後にメインインタフェースに入って、クリックして2番目のインタフェースにジャンプして、更にクリックして3番目のインタフェースにジャンプします;この時HOMEボタンを押してデスクトップに下がって、更にappを起動して、先に案内ページに入って、2秒後に表示したのは3番目のインタフェースで、1回のbackボタンはデスクトップの1つの効果に戻ります).
    案内ページについては、案内ページのonCreate()メソッドで自殺させます.
    public class StartActivity extends BaseActivity {
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_start);
    
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    finish();
                }
            },2500);
        }
    }
    
    

    4.お知らせ:ここで注意しなければならないのは、AndoridManifestでactivityごとにandroid:configChanges=「orientation|keyboard|screenSize」を設定し、activityを再起動しないようにする必要があります.違いは,この方法が現在のappパケット名をフロントにあるか否かを判断することでactivityのライフサイクルを再開しないことである.
    【微信公衆番号】創造は容易ではありません.支持に感謝します.もっと多くのニュースは公衆番号:浅瀬の魚に注目してください.