Android - Ağ Bağlantısı

Android, uygulamanızın internete veya başka bir yerel ağa bağlanmasına ve ağ işlemlerini gerçekleştirmenize izin verir.

Bir cihaz, çeşitli ağ bağlantılarına sahip olabilir. Bu bölüm, Wi-Fi veya mobil ağ bağlantısı kullanmaya odaklanmaktadır.

Ağ Bağlantısının Kontrol Edilmesi

Herhangi bir ağ işlemi gerçekleştirmeden önce, önce o ağa veya internete bağlı olup olmadığınızı kontrol etmelisiniz. Bu android için ConnectivityManagersınıf. Bu sınıfın bir nesnesini çağırarak somutlaştırmanız gerekir.getSystemService()yöntem. Söz dizimi aşağıda verilmiştir -

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

ConnectivityManager sınıfının nesnesini başlattığınızda, şunu kullanabilirsiniz: getAllNetworkInfotüm ağların bilgilerini alma yöntemi. Bu yöntem bir dizi döndürürNetworkInfo. Yani bunu böyle almalısın.

NetworkInfo[] info = check.getAllNetworkInfo();

Yapmanız gereken son şey kontrol etmektir Connected Stateağın. Söz dizimi aşağıda verilmiştir -

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

Bu bağlantılı durumların dışında, bir ağın gerçekleştirebileceği başka durumlar da vardır. Aşağıda listelenmiştir -

Sr.No Durum
1 Bağlanıyor
2 Bağlantı kesildi
3 Bağlantı kesiliyor
4 Askıya alındı
5 Bilinmeyen

Ağ İşlemlerinin Gerçekleştirilmesi

İnternete bağlı olduğunuzu kontrol ettikten sonra, herhangi bir ağ işlemini gerçekleştirebilirsiniz. Burada bir web sitesinin html'sini bir url'den alıyoruz.

Android sağlar HttpURLConnection ve URLBu işlemleri gerçekleştirecek sınıf. Web sitesinin bağlantısını sağlayarak URL sınıfı bir nesneyi başlatmanız gerekir. Söz dizimi aşağıdaki gibidir -

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

Bundan sonra araman gerekiyor openConnectionurl sınıfının yöntemi ve bunu bir HttpURLConnection nesnesi içinde alır. Ondan sonra aramanız gerekirconnect HttpURLConnection sınıfının yöntemi.

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

Ve yapmanız gereken son şey, HTML'yi web sitesinden almaktır. Bunun için kullanacaksınInputStream ve BufferedReadersınıf. Söz dizimi aşağıda verilmiştir -

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

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

Bu connect yönteminin dışında HttpURLConnection sınıfında kullanılabilen başka yöntemler de vardır. Aşağıda listelenmiştir -

Sr.No Yöntem ve açıklama
1

disconnect()

Bu yöntem, kaynakların yeniden kullanılabilmesi veya kapatılabilmesi için bu bağlantıyı serbest bırakır.

2

getRequestMethod()

Bu yöntem, isteği uzak HTTP sunucusuna yapmak için kullanılacak istek yöntemini döndürür.

3

getResponseCode()

Bu yöntem, uzak HTTP sunucusu tarafından döndürülen yanıt kodunu döndürür

4

setRequestMethod(String method)

Bu yöntem, uzak HTTP sunucusuna gönderilecek olan istek komutunu ayarlar.

5

usingProxy()

Bu yöntem, bu bağlantının bir proxy sunucusu kullanıp kullanmadığını döndürür.

Misal

Aşağıdaki örnek, HttpURLConnection sınıfının kullanımını göstermektedir. Belirli bir web sayfasından HTML indirmenize izin veren temel bir uygulama oluşturur.

Bu örneği denemek için, bunu wifi internetin bağlı olduğu gerçek bir cihazda çalıştırmanız gerekir.

Adımlar Açıklama
1 Bir com.tutorialspoint.myapplication paketi altında bir Android uygulaması oluşturmak için Android studio IDE'yi kullanacaksınız.
2 Aktivite kodunu eklemek için src / MainActivity.java dosyasını değiştirin.
4 Düzen XML dosyasını değiştirin res / layout / activity_main.xml gerekirse herhangi bir GUI bileşeni ekleyin.
6 Gerekli izinleri eklemek için AndroidManifest.xml dosyasını değiştirin.
7 Uygulamayı çalıştırın ve çalışan bir android cihaz seçin ve üzerine uygulamayı yükleyin ve sonuçları doğrulayın.

İşte içeriği 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;
   }

}

İşte içeriği 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>

İşte içeriği Strings.xml.

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

İşte içeriği 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>

Uygulamanızı çalıştırmayı deneyelim. Gerçek Android Mobil cihazınızı bilgisayarınıza bağladığınızı varsayıyorum. Uygulamayı android stüdyosundan çalıştırmak için, projenizin etkinlik dosyalarından birini açın

ve araç çubuğundan Çalıştır simgesine tıklayın . Uygulamanızı başlatmadan önce, Android stüdyosu Android uygulamanızı çalıştırmak istediğiniz bir seçeneği seçmek için aşağıdaki pencereyi görüntüleyecektir.

Mobil cihazınızı bir seçenek olarak seçin ve ardından aşağıdaki ekranı gösterecek olan mobil cihazınızı kontrol edin -

Şimdi sadece düğmeye tıklayın, İnternet bağlantısını kontrol edecek ve görüntüyü indirecektir.

Çıkışı aşağıdaki gibi olacaktır ve logoyu internetten almıştır.