اندروید به اپلیکیشن های شما اجازه می دهد تا به اینترنت یا هر شبکه ی عمومی دیگر متصل شده و عملکردهای مختلف شبکه انجام دهید.

یک دستگاه اندروید می تواند انواع مختلفی از اتصال شبکه را داشته باشد. این مقاله بر روی wi-fi و یا اتصال شبکه موبایل تمرکز می کند.

چک کردن اتصال شبکه در اندروید

قبل از اینکه شما عملکردی را در شبکه اجرا کنید ، باید چک کنید که آیا به شبکه و یا اینترنت متصل هستید یا نه. برای این کار اندروید کلاس ConnectivityManager را ارائه می دهد.
لازم است که یک آبجکت از این کلاس را با فراخوانی متد ()getSystemService به عنوان نمونه قرار دهید.
سینتکس آن مانند زیر می باشد :

 

ConnectivityManager check = (ConnectivityManager) 
this.context.getSystemService(Context.CONNECTIVITY_SERVICE);

 

زمانی که شما آبجکت کلاس ConnectivityManager را به عنوان نمونه قرار دادید، می توانید از متد getAllNetworkInfo برای گرفتن اطلاعات همه ی شبکه ها استفاده کنید. این متد آرایه ای از اطلاعات شبکه (Networkinfo) را گزارش می دهد.
بنابراین باید آن را به این شکل دریافت کنید :

 

NetworkInfo[] info = check.getAllNetworkInfo();

 

آخرین کاری که باید انجام دهید این است که Connected State (وضعیت اتصال) مربوط به شبکه را چک کنید، که سینتکس آن به این شکل می باشد :

 

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();
   }
}

انجام عملیات شبکه :

پس از اینکه وضعیت اتصال به اینترنت  را بررسی کردید می توانید هر عملیات مربوط به شبکه را انجام دهید .

در اینجا  کد html وبسایت را از URL استخراج می کنیم . کلاس HttpURLConnection و URL امکانات لازم برای انجام این عملیات را فراهم می کند.

شما باید با ایجاد لینک وبسایت ، یک شی از کلاس URL ایجاد کنید . سینتکس آن به صورت زیر است :

 

String link = "http://www.google.com";
URL url = new URL(link);

 

پس از آن ، باید از متد openConnection کلاس url  را فراخوانی کنید و آن را در یک شی HttpURLConnection دریافت کنید . پس از آن نیاز به فراخوانی متد connect  از کلاس HttpURLConnection خواهید داشت .

 

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();

 

آخرین چیزی که نیاز است انجام دهید HTML را از سایت بگیرید .برای تحقق آن کلاس های  InputStream وBufferedReader خواهید داشت .

 

InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String webPage = "",data="";

while ((data = reader.readLine()) != null){
   webPage += data + "\n";
}

چک کردن اتصال اپلیکیشن به اینترنت در اندروید

اندروید به اپلیکیشن های شما اجازه می دهد تا به اینترنت یا هر شبکه ی عمومی دیگر متصل شده و عملکردهای مختلف شبکه انجام دهید.

یک دستگاه اندروید می تواند انواع مختلفی از اتصال شبکه را داشته باشد. این مقاله بر روی wi-fi و یا اتصال شبکه موبایل تمرکز می کند.

چک کردن اتصال شبکه در اندروید:

قبل از اینکه شما عملکردی را در شبکه اجرا کنید ، باید چک کنید که آیا به شبکه و یا اینترنت متصل هستید یا نه. برای این کار اندروید کلاس ConnectivityManager را ارائه می دهد.
لازم است که یک آبجکت از این کلاس را با فراخوانی متد ()getSystemService به عنوان نمونه قرار دهید.
سینتکس آن مانند زیر می باشد :

 

ConnectivityManager check = (ConnectivityManager) 
this.context.getSystemService(Context.CONNECTIVITY_SERVICE);

 

زمانی که شما آبجکت کلاس ConnectivityManager را به عنوان نمونه قرار دادید، می توانید از متد getAllNetworkInfo برای گرفتن اطلاعات همه ی شبکه ها استفاده کنید. این متد آرایه ای از اطلاعات شبکه (Networkinfo) را گزارش می دهد.
بنابراین باید آن را به این شکل دریافت کنید :

 

NetworkInfo[] info = check.getAllNetworkInfo();

 

آخرین کاری که باید انجام دهید این است که Connected State (وضعیت اتصال) مربوط به شبکه را چک کنید، که سینتکس آن به این شکل می باشد :

 

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();
   }
}

انجام عملیات شبکه :

پس از اینکه وضعیت اتصال به اینترنت  را بررسی کردید می توانید هر عملیات مربوط به شبکه را انجام دهید .

در اینجا  کد html وبسایت را از URL استخراج می کنیم . کلاس HttpURLConnection و URL امکانات لازم برای انجام این عملیات را فراهم می کند.

شما باید با ایجاد لینک وبسایت ، یک شی از کلاس URL ایجاد کنید . سینتکس آن به صورت زیر است :

 

String link = "http://www.google.com";
URL url = new URL(link);

 

پس از آن ، باید از متد openConnection کلاس url  را فراخوانی کنید و آن را در یک شی HttpURLConnection دریافت کنید . پس از آن نیاز به فراخوانی متد connect  از کلاس HttpURLConnection خواهید داشت .

 

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.connect();

 

آخرین چیزی که نیاز است انجام دهید HTML را از سایت بگیرید .برای تحقق آن کلاس های  InputStream وBufferedReader خواهید داشت.

 

InputStream is = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String webPage = "",data="";

while ((data = reader.readLine()) != null){
   webPage += data + "\n";
}

 

علاوه بر این متد ها , متد های دیگری نیز برای کلاس HttpURLConnection در دسترس است که به شرح زیر است :

شماره متد و توضیحات
1 ()disconnect

این متد اتصال را آزاد می کند تا منابع بتوانند دوباره استفاده شوند یا اینکه در نهایت بسته شوند.

2 ()getRequestMethod

این متد ، متد درخواستی را که برای اتصال به سرور remote HTTP مورد استفاده می سازد مشخص می کند.

3 ()getResponseCode

این متد پاسخی که توسط سرور HTTP ارسال می شود را return می کند.

4 (setRequestMethod(String method

این متد دستور (command) درخواست ،  که به سرور HTTP راه دور ارسال میشود را تنظیم می کند.

5 ()usingProxy

این متد نشان می دهد که آیا اتصال از یک پروکسی سرور استفاده می کند یا خیر .

مثال

مثال زیر نحوه ی استفاده از کلاس HttpURLConnection را تبیین می کند. این اپلیکیشن به شما اجازه می دهد کد HTML را از وبسایت استخراج کنید .

این مثال را باید روی یک دستگاه واقعی که به اینترنت متصل است تست کنید .

مرحله  توضیحات
1 مراحل ایجاد برنامه در اندروید استدیو را طبق بخش های قبلی تحت عنوان پکیج com.example.Connection.myapplication دنبال کنید.
2 به محتوای فایل src/MainActivity.java کد Activity را اضافه کنید.
4 طراحی مناسب با این برنامه را به res/layout/activity_main اضافه کنید.
6 مجوز های لازم را در فایل AndroidManifest.xml تعریف کنید.
7 برنامه را اجرا کنید تا دستگاه اندروید شما نتیجه را نمایش دهد.

محتوای فایل src/MainActivity.java :

 

package com.tutorialspoint.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("http://www.tutorialspoint.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 :

 

<?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="Tutorials point"
      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 :

 

<resources>
   <string name="app_name">My Application</string>
</resources>

 

محتوای فایل AndroidManifest.xml :

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.tutorialspoint.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>

 

می خواهیم اپلیکیشن را اجرا کنیم . فرض می کنیم که دستگاه شما به کامپیوتر متصل است. برای اجرای اپلیکیشن از اندروید استودیو استفاده کنید و پروژه ی اصلی اکتیویتی را باز کنید . روی آیکون RunEclipse Run Icon از نوار ابزار کلیک کنید .

قبل از شروع اپلیکیشن در اندروید استودیو ، پنجره ی زیر برای تعیین محل اجرای اپلیکیشن نمایش داده خواهد شد:

Anroid Network Connection Tutorial

از پنجره ی فوق دستگاه موبایل خود را انتخاب نمائید تا صفحه زیر را مشاهده کنید:

Anroid Network Connection Tutorial

حالا روی دکمه button کلیک کنید تا ابتدا اتصال اینترنت چک شده و تصویر مربوطه از آدرس مشخص شده دانلود شود:

Anroid Network Connection Tutorial

در نهایت خروجی به شرح زیر است و تصویر از اینترنت دریافت می شود:

Anroid Network Connection Tutorial