بررسی background و foreground بودن اپلیکیشن در اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش بررسی background و foreground بودن اپلیکیشن در اندروید یعنی بررسی کنیم اپلیکیشن بسته شده است یا توسط دکمه Home گوشی یا هر دکمه ای دیگری به background یا پس زمینه رفته است یا برنامه در foreground یا پیش زمینه است در ادامه با ما همراه باشید تا نحوه بسته شدن و باز بودن برنامه را توسط کاربر به گونه ای detect یا تشخیص دهید.
برای انجام این کار شاید بیش از 10 راه وجود داشته باشد ما برخی از آنها که بیشتر کاربردی است را برای شما قرار میدهیم.
اولین راه با استفاده از life cycle اکتیویتی می تواند انجام شود و همانند زیر خواهد بود (باید دو متد زیر را به پروژه خود اضافه کنید زیر کد main اصلی)
1 2 3 4 5 6 7 8 9 10 11 | String isVisible = "0"; @Override public void onResume() { super.onResume(); isVisble = "1"; } @Override public void onPause() { super.onPause(); isVisble = "2"; } |
در بالا یک متغیر به نام isVisble گرفتیم به صورت پیشفرض صفر است اگر برنامه به background برود مقدار آن برابر با 2 و در صورتی که به برنامه وارد شود و در داخل آن بماند مقدار آن به 1 تغییر پیدا خواهد کرد.
یکی دیگر از کدها که callback های متفاوتی نیز دارید تعریف یک callback برای life cycle activity است که همانند زیر است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | private int numRunningActivities = 0; public void onCreate() { super.onCreate(); this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityStarted(Activity activity) { numRunningActivities++; if (numRunningActivities == 1) { LogUtils.d("APPLICATION", "APP IN FOREGROUND"); } } @Override public void onActivityStopped(Activity activity) { numRunningActivities--; if (numRunningActivities == 0) { Log.e("", "App is in BACKGROUND") } } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { } @Override public void onActivityResumed(Activity activity) { } @Override public void onActivityPaused(Activity activity) { } @Override public void onActivityDestroyed(Activity activity) { } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { } }); } |
کد بالا از همه نظر عالی است شما حتی می توانید متوجه شوید چه زمانی Activity نابود می شود در بالا هم مثل قبل عمل کردیم.
راه بعدی با استفاده از یک سرویس است که همانند زیر خواهد بود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | private static IntentFilter m_appStateFilter; static { m_appStateFilter = new IntentFilter(); m_appStateFilter.addAction(MyApplication.APP_STATE_FOREGROUND); m_appStateFilter.addAction(MyApplication.APP_STATE_BACKGROUND); } private BroadcastReceiver m_appStateReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(MyApplication.APP_STATE_FOREGROUND)) { /* application entered foreground */ } else if (action.equals(MyApplication.APP_STATE_BACKGROUND)) { /* application entered background */ } } }; registerReceiver(m_appStateReceiver, m_appStateFilter); |
در بالا از Intent Filter برای اینکار استفاده کردیم باید شما آموزش مربوط به سرویس را مطالعه کنید تا بتوانید از تکه کد بالا در سرویس استفاده کنید (هرچند بدون استفاده از سرویس هم می توان از آن استفاده کرد)
این آموزش هم به پایان رسید.
موفق و موید باشید.