سبد (0)

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

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

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

یک دستگاه می تواند انواع مختلفی از اتصال شبکه داشته باشد. این فصل بر روی 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 دریافت کنید. پس از آن لازم است روش اتصال را از کلاس 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 هستند؛ که لیست آنها در زیر ارائه شده است.

  • disconnect()

    این روش اتصال را آزاد می کند، به طوری که ذخیره های آن ممکن است دوباره استفاده شده یا بسته شوند.
  • getRequestMethod()

    این روش طریقه ی درخواست را گزارش می دهد که برای ارسال تقاضا به سرور HTTP دور استفاده می شود.
  • getResponseCode()

    این روش کد پاسخ گزارش شده را به وسیله سرور remote HTTP گزارش می دهد.
  • setRequestMethod(String method)

    این روش فرمان درخواستی را تنظیم می کند که به سرور remote HTTP ارسال خواهد شد.
  • usingProxy()

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

مثال

این مثال استفاده از کلاس HttpURLConnection را توضیح می دهد. در این مثال یک برنامه ی پایه ایجاد می شود که به شما اجازه می دهد HTML را از یک صفحه ی وب ارائه شده دانلود کنید. برای انجام این مثال باید آن را روی یک دستگاه واقعی اجرا کنید که در آن اینترنت wi-fi متصل می باشد.

  • برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان  NetworkConnection   تحت بسته ی com.example.networkconnection نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDK و Compile With در آخرین ورژن Android SDK هستند تا از سطوح بالاتر API استفاده کنید.
  • فایل src/MainActivity.java را برای افزودن کد فعالیت تغییر دهید.
  • فایل src/DownloadWebPage.java برای افزودن کد اتصال شبکه ایجاد کنید.
  • لی اوت فایل XML مربوط به res/layout/activity_main.xml را تغییر دهید، اگر لازم است مولفه ی GUI به آن اضافه کنید.
  • فایل res/values/string.xml را تغییر داده و مولفه های رشته ی لازم را به آن بیفزایید
  • AndroidManifest.xml را تغییر دهید تا دستوراتی اضافه کنید.
  • برنامه را اجرا کنید، یک دستگاه اجرایی اندروید انتخاب کنید و برنامه را روی آن نصب کرده و نتایج را بررسی کنید.

در اینجا محتوای src/MainActivity.javaرا مشاهده می کنید.

 

package com.tutorialspoint.myapplication;

import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.ActionBarActivity;

import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
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;
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}

در اینجا محتوای activity_main.xmlرا می بینید.

 

<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>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</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 android:name="android.permission.ACCESS_NETWORK_STATE" />
   
   <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>

اجازه بدهید برنامه ی NetworkConnectionرا اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run  از تولبار کلیک کنید.

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

حالا روی دکمه کلیک کنید تا اتصال به اینترنت را بررسی کند.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه