Android-네트워크 연결

Android를 사용하면 애플리케이션을 인터넷 또는 기타 로컬 네트워크에 연결할 수 있으며 네트워크 작업을 수행 할 수 있습니다.

장치에는 다양한 유형의 네트워크 연결이있을 수 있습니다. 이 장에서는 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();
   }
}

이 연결된 상태 외에도 네트워크가 달성 할 수있는 다른 상태가 있습니다. 그들은 아래에 나열되어 있습니다-

Sr. 아니요 상태
1 연결
2 연결 끊김
연결 해제
4 매달린
5 알 수 없는

네트워크 작업 수행

인터넷에 연결되어 있는지 확인한 후 모든 네트워크 작업을 수행 할 수 있습니다. 여기서 우리는 URL에서 웹 사이트의 html을 가져옵니다.

Android는 HttpURLConnectionURL이러한 작업을 처리하는 클래스. 웹 사이트 링크를 제공하여 URL 클래스의 객체를 인스턴스화해야합니다. 구문은 다음과 같습니다.

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

그 후에 전화해야합니다 openConnectionurl 클래스의 메서드를 사용하고 HttpURLConnection 객체에서 수신합니다. 그 후 당신은connect HttpURLConnection 클래스의 메서드입니다.

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

마지막으로해야 할 일은 웹 사이트에서 HTML을 가져 오는 것입니다. 이를 위해 당신은InputStreamBufferedReader수업. 구문은 다음과 같습니다.

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 클래스에서 사용할 수있는 다른 메서드가 있습니다. 그들은 아래에 나열되어 있습니다-

Sr. 아니요 방법 및 설명
1

disconnect()

이 메서드는 리소스를 재사용하거나 닫을 수 있도록이 연결을 해제합니다.

2

getRequestMethod()

이 메소드는 원격 HTTP 서버에 요청하는 데 사용될 요청 메소드를 반환합니다.

getResponseCode()

이 메서드는 원격 HTTP 서버에서 반환 한 응답 코드를 반환합니다.

4

setRequestMethod(String method)

이 방법은 원격 HTTP 서버로 보낼 요청 명령을 설정합니다.

5

usingProxy()

이 메서드는이 연결이 프록시 서버를 사용하는지 여부를 반환합니다.

아래 예제는 HttpURLConnection 클래스의 사용을 보여줍니다. 주어진 웹 페이지에서 HTML을 다운로드 할 수있는 기본 응용 프로그램을 만듭니다.

이 예제를 실험하려면 wifi 인터넷이 연결된 실제 장치에서 실행해야합니다.

단계 기술
1 Android 스튜디오 IDE를 사용하여 com.tutorialspoint.myapplication 패키지 아래에 Android 애플리케이션을 만듭니다.
2 src / MainActivity.java 파일을 수정하여 활동 코드를 추가하십시오.
4 레이아웃 XML 파일 res / layout / activity_main.xml 수정 필요한 경우 GUI 구성 요소를 추가하십시오.
6 AndroidManifest.xml을 수정하여 필요한 권한을 추가하십시오.
7 애플리케이션을 실행하고 실행중인 Android 기기를 선택하고 여기에 애플리케이션을 설치하고 결과를 확인합니다.

내용은 다음과 같습니다. 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>

애플리케이션을 실행 해 보겠습니다. 실제 Android 모바일 장치를 컴퓨터에 연결했다고 가정합니다. Android 스튜디오에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고

도구 모음에서 실행 아이콘을 클릭 합니다. 애플리케이션을 시작하기 전에 Android 스튜디오는 Android 애플리케이션을 실행할 옵션을 선택하는 다음 창을 표시합니다.

옵션으로 모바일 장치를 선택하고 다음 화면이 표시되는 모바일 장치를 확인하십시오-

이제 버튼을 클릭하면 인터넷 연결을 확인하고 이미지를 다운로드합니다.

출력은 다음과 같으며 인터넷에서 로고를 가져 왔습니다.