بررسی اتصال به اینترنت در اندروید
امروزه اکثر پروژه های اندروید به صورت Client-Server و با استفاده از اینترنت می باشند. در آموزش های قبل شیوه ارتباط ساده و حرفه با سرور را بررسی کردیم اما متناسب با اهمیت اتصال به Server, شما باید وضعیت Server و همچنین دسترسی به اینترنت را در برنامه کنترل کنید. در بعضی برنامه ها ممکن است قطع اتصال در هنگام استفاده از برنامه تاثیر چندانی نداشته باشد اما در بعضی از برنامه ها مانند نرم افزار های اجتماعی و فروشگاهی بسیار اهمیت دارد.
در این آموزش قصد داریم تا وضعیت لحظه ای اینترنت را بررسی کنیم. ابتدا یک برنامه جدید میسازیم.برای اینکه وضعیت اینترنت را به صورت لحظه ای چک کنیم میتوانید از چندین روش استفاده کنید و ما در اینجا از BroadcastReceiver استفاده میکنیم.
یک کلاس به نام NetworkChangeListener ایجاد میکنیم و به این صورت مینویسم :
/** * Created by vhdrjb on Zero To hero . */ public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } }
و کلاس ServiceManager را برای کنترل وضعیت ایجاد میکنیم :
/** * Created by vhdrjb on Zero To Hero */ public class ServiceManager extends ContextWrapper { public ServiceManager(Context base) { super(base); } public boolean isNetworkAvailable() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { return true; } return false; } }
حال باید کلاس ServiceManager را به کلاس BroadcastReceiver اضافه کنیم و آنرا درون یک متد قرار میدهیم تا بتوانیم از آن استفاده کنیم
public boolean checkInternet(Context context) { ServiceManager serviceManager = new ServiceManager(context); if (serviceManager.isNetworkAvailable()) { return true; } else { return false; } }
و با استفاده از این متد اتصال با اینترنت را بررسی میکنیم.
تا به اینجا ما میتوانیم با استفاده از یک BroadcastReceiver و یک کلاس کنترل کننده وضعیت اینترنت را کنترل کنیم. برای اینکه BroadcastReceiver را بتوانیم در برنامه استفاده کنیم باید آنرا به عنوان یک receiver در AndroidMonifest تعریف کنیم
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <receiver android:name=".NetworkChangeReceiver" android:enabled="true" android:exported="true" /> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
در مرحله بعد باید کاری کنیم تا این سرویس از طریق تمام Activity ها و Fragment ها قابل استفاده باشد. برای راحتی کار میتوانید یک کلاس پایه برای Activity پیاده سازی کنید تا قابلیت دسترسی به وضعیت اینترنت درون آن وجود داشته باشد و در پروژه از این کلاس ارث بری کنید.
کلاس BaseActivity را به این صورت مینویسم :
/** * Created by vhdrjb on Zero TO hero. */ public abstract class BaseActiivty extends AppCompatActivity { public boolean online = false; public abstract void serverStatusConnection(boolean connection); public abstract void online(); public abstract void offline(); public void checkInternet() { ServiceManager serviceManager = new ServiceManager(getBaseContext()); if (serviceManager.isNetworkAvailable()) { online = true; online(); } else { online = false; offline(); } } }
اکنون باید برایBroadcastReceiver دو Constructor قرار دهیم
public NetworkChangeReceiver(Fragment baseActiivty) { this.baseActiivty = (BaseActiivty) baseActiivty.getActivity(); } public NetworkChangeReceiver(BaseActiivty baseActiivty) { this.baseActiivty = baseActiivty; }
و چنین کدی را به متد onRecive اضافه میکنیم
this.baseActiivty.serverStatusConnection(checkInternet(context));
در کلاس Activity خود که از کلاس BaseActivity ارث بری کرده اید باید چنین متدی را پیاده سازی کنید :
@Override public void serverStatusConnection(boolean connection) { if (connection) { online(); } else { offline(); } }
اگر اتصال در هنگام استفاده از برنامه قطع شود متد offline و اگر اتصال مجددا برقرار گردد متد online فراخوانی میشود. با این روش شما میتوانید وضعیت اتصال به اینترنت را به صورت لحظه ای به برنامه اعلام کنید و متناسب با آن تصمیم های لازم را بگیرید.
فایل کلاس ها را میتوانید از اینجا دریافت کنید.
با ما همراه باشید.
مطالب زیر را حتما مطالعه کنید
آموزش Gradle – اهمیت Project Automation
درک مفهوم کدنویسی تمیز در اندروید
5 هک ساده برای کاهش سایز فایل APK
آشنایی با RecyclerView در اندروید
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
سلام جناب نظری.
دستتون درد نکنه عالی بود.
متاسفانه فایل کلاس ها تو لینکی که گذاشتید نیست یعنی صفحه گیت هاب ارور 404 می ده. اگه امکان داشته باشه برام ایمیل کنید، چون تو اینجا serverStatusConnection(boolean connection) نمی دونم به عنوان connection چه مقداری رو باید بهش پاس بدم!؟
سلام وقت بخیر دوست عزیز.
serverStatusConnection یک متد توی base activity هست که وقتی broadcast receiver یک action دریافت میکنه با استفاده از سرویس نوشته شده٬ تعیین میکنه که اتصال به اینترنت داره یانه. یعنی مقداری که Service manager برمیگردونه به عنوان پارامتر متد server status connection استفاده میشه.
کد های روی گیت هاب هم به دلیل یکسری مشکلات حذف شدند که به زوری سعی میکنم مقاله جدیدی در این مورد بنویسم.
بابت این مورد عذر خواهی میکنم