با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن . و کاربرانی که دوره کامل آموزش برنامه نویسی اندروید را دنبال می کنند. اندروید به برنامه کاربردی شما اجازه اتصال به اینترنت یا هر شبکه محلی دیگر را می دهد و به شما اجازه می دهد تا عملیات مختلف تحت شبکه را انجام دهید. یک دستگاه می تواند انواع مختلفی از اتصالات شبکه را داشته باشد. در این بخش برای آشنایی شما با اتصال به اینترنت در اندروید چگونگی اتصال اپلیکیشن اندروید با wi-fi یا شبکه تلفن همراه را ارائه داده ایم. برای آشنایی با روال اصلی اتصال به اینترنت در برنامه نویسی اندروید در ادامه ی مباحث این بخش با ما همراه باشید.
در این آموزش ساختار کلی چگونگی اتصال به اینترنت در اندروید و متدهای مربوطه را ارائه داده ایم.
همچنین در ادامه ی مباحث یک مثال ساده از پیاده سازی اتصال به اینترنت در برنامه نویسی اندروید قرار داده ایم.
قبل از انجام هر گونه اقدام ابتدا باید وضعیت اتصال به شبکه یا اینترنت را چک کنید.
برای این منظور اندروید کلاس ConnectivityManager را ارائه می دهد.
شما باید یک آبجکت از کلاس فوق با فراخوانی متد ()getSystemService تعریف کنید:
1 2 | ConnectivityManager check = (ConnectivityManager) this.context.getSystemService(Context.CONNECTIVITY_SERVICE); |
پس از تعریف ابجکت از کلاس ConnectivityManager، می توانید با فراخوانی متد getAllNetworkInfo اطلاعات تمام شبکه ها را دریافت کنید.
متد فوق یک آرایه از NetworkInfo را برمی گرداند.
ساختار:
1 | NetworkInfo[] info = check.getAllNetworkInfo(); |
در نهایت باید وضعیت اتصال به شبکه را بررسی کنید:
1 2 3 4 5 6 | for (int i = 0; i<info.length; i++){ if (info[i].getState() == NetworkInfo.State.CONNECTED){ Toast.makeText(context, "Internet is connected Toast.LENGTH_SHORT).show(); } } |
علاوه بر وضعیت connected وضعیت های دیگری نیز از یک شبکه وجود دارد که به شرح زیر است:
ردیف | وضعیت |
---|---|
۱ | Connecting |
۲ | Disconnected |
۳ | Disconnecting |
۴ | Suspended |
۵ | Unknown |
پس از بررسی اینکه شما به اینترنت وصل هستید، می توانید هر نوع عملیات شبکه را انجام دهید.
در اینجا ما یک HTML از وب سایت را از یک URL دریافت می کنیم.
اندروید کلاس های HttpURLConnection and URL را برای مدیریت عملیات فوق ارائه می دهد.
شما ابتدا باید یک آبجکت از کلاس URL با ارائه ی لینک سایت مربوطه تعریف کنید:
1 2 | String link = "http://www.google.com"; URL url = new URL(link); |
سپس باید متد openConnection از کلاس URL را فراخوانی کرده و آن را در یک شیء HttpURLConnection دریافت کنید.
سپس نیاز به فراخوانی متد connect از کلاس HttpURLConnection دارید.
1 2 | HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.connect(); |
و آخرین چیزی که باید انجام دهید این است که HTML را از وب سایت توسط کلاس های InputStream و BufferedReader بردارید.
ساختار اقدام فوق:
1 2 3 4 5 6 7 | InputStream is = conn.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); String webPage = "",data=""; while ((data = reader.readLine()) != null){ webPage += data + "\n"; } |
علاوه بر متد connect متدهای دیگری نیز از کلاس HttpURLConnection به شرح لیست زیر در دسترس هستند:
ردیف | متد و توضیحات مربوطه |
---|---|
۱ | disconnect() این متد connection را قطع می کند تا منابع آن بسته شوند. |
۲ | getRequestMethod() این متد یک متد درخواستی را که برای درخواست به سرور HTTP remote استفاده می شود، باز می گرداند. |
۳ | getResponseCode() این متد کد پاسخی که توسط سرور HTTP از راه دور باز می شود را برمی گرداند. |
۴ | setRequestMethod(String method) این متد دستور درخواست را که به سرور HTTP راه دور ارسال می شود را تنظیم می کند. |
۵ | usingProxy() این متد تشخیص می دهد که آیا این اتصال از یک پروکسی سرور استفاده می کند یا خیر. |
مثال طرز استفاده از کلاس HttpURLConnection را نشان می دهد.
این برنامه به شما طرز استفاده از اتصال به اینترنت در برنامه نویسی اندروید را نشان می دهد.
این یک برنامه نمونه است که تا HTML یک صفحه وب را دانلود کنید.
نکته: برای تست این برنامه شما به یک دستگاه اندروید واقعی که اینترنت wi-fi آن وصل باشد نیاز دارید.
مراحل انجام کار:
مراحل | توضیحات |
---|---|
۱ | مراحل ایجاد برنامه در اندروید استدیو را طبق بخش های قبلی تحت عنوان پکیج com.example.Pvlearn.myapplication دنبال کنید. |
۲ | به محتوای فایل src/MainActivity.java کد Activity را اضافه کنید. |
۴ | طراحی مناسب با این برنامه را به res/layout/activity_main اضافه کنید. |
۶ | مجوز های لازم را در فایل AndroidManifest.xml تعریف کنید. |
۷ | برنامه را اجرا کنید تا دستگاه اندروید شما نتیجه را نمایش دهد. |
محتوای فایل src/MainActivity.java:
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | package com.Pvlearn.myapplication; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.ConnectivityManager; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; public class MainActivity extends ActionBarActivity { private ProgressDialog progressDialog; private Bitmap bitmap = null; Button b1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1 = (Button) findViewById(R.id.button); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { checkInternetConenction(); downloadImage("https://www.pvlearn.com/green/images/logo.png"); } }); } private void downloadImage(String urlStr) { progressDialog = ProgressDialog.show(this, "", "Downloading Image from " + urlStr); final String url = urlStr; new Thread() { public void run() { InputStream in = null; Message msg = Message.obtain(); msg.what = 1; try { in = openHttpConnection(url); bitmap = BitmapFactory.decodeStream(in); Bundle b = new Bundle(); b.putParcelable("bitmap", bitmap); msg.setData(b); in.close(); }catch (IOException e1) { e1.printStackTrace(); } messageHandler.sendMessage(msg); } }.start(); } private InputStream openHttpConnection(String urlStr) { InputStream in = null; int resCode = -1; try { URL url = new URL(urlStr); URLConnection urlConn = url.openConnection(); if (!(urlConn instanceof HttpURLConnection)) { throw new IOException("URL is not an Http URL"); } HttpURLConnection httpConn = (HttpURLConnection) urlConn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET"); httpConn.connect(); resCode = httpConn.getResponseCode(); if (resCode == HttpURLConnection.HTTP_OK) { in = httpConn.getInputStream(); } }catch (MalformedURLException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } return in; } private Handler messageHandler = new Handler() { public void handleMessage(Message msg) { super.handleMessage(msg); ImageView img = (ImageView) findViewById(R.id.imageView); img.setImageBitmap((Bitmap) (msg.getData().getParcelable("bitmap"))); progressDialog.dismiss(); } }; private boolean checkInternetConenction() { // get Connectivity Manager object to check connection ConnectivityManager connec =(ConnectivityManager)getSystemService(getBaseContext().CONNECTIVITY_SERVICE); // Check for network connections if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED || connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) { Toast.makeText(this, " Connected ", Toast.LENGTH_LONG).show(); return true; }else if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED || connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED ) { Toast.makeText(this, " Not Connected ", Toast.LENGTH_LONG).show(); return false; } return false; } } |
محتوای فایل activity_main.xml:
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 36 37 38 39 40 41 42 43 44 45 | ?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="UI Animator Viewer" android:id="@+id/textView" android:textSize="25sp" android:layout_centerHorizontal="true" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Pvlearn" android:id="@+id/textView2" android:layout_below="@+id/textView" android:layout_alignRight="@+id/textView" android:layout_alignEnd="@+id/textView" android:textColor="#ff36ff15" android:textIsSelectable="false" android:textSize="35dp" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:layout_below="@+id/textView2" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" android:id="@+id/button" android:layout_below="@+id/imageView" android:layout_centerHorizontal="true" android:layout_marginTop="76dp" /> </RelativeLayout> |
محتوای فایل Strings.xml:
1 2 3 | <resources> <string name="app_name">My Application</string> </resources> |
محتوای فایل AndroidManifest.xml:
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 | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.Pvlearn.myapplication" > <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
برای اجرای برنامه ی اندرویدی خود یکی از فایل های activity در برنامه ی خود کلیک کنید.
سپس روی نماد (Run) از نوار ابزار برای شروع اجرای برنامه کلیک کنید.
سپس پنجره ای برای انتخاب شبیه ساز اندروید یا دستگاه موبایلی که به سیستم متصل کرده اید ظاهر می شود:
از پنجره ی فوق دستگاه موبایل خود را انتخاب نمائید تا صفحه زیر را مشاهده کنید:
حالا روی دکمه button کلیک کنید تا ابتدا اتصال اینترنت چک شده و تصویر مربوطه از آدرس مشخص شده دانلود شود:
در نهایت خروجی به شرح زیر است و تصویر از اینترنت دریافت می شود:
همانطور که می دانید اتصال به اینترنت در اندروید با استفاده از شبکه های مختلفی از جمله wi-fi و شبکه داده تلفن همراه انجام می شود، ممکن است شما در اپلیکیشن خود نیاز به افزودن قابلیت اتصال به اینترنت داشته باشید از این رو می توانید از مباحث فوق برای آشنایی با طرز اتصال به اینترنت در برنامه نویسی اندروید استفاده کنید.
در بخش بعدی مروری بر قابلیت NFC در اندروید خواهیم داشت.