반응형


Intent를 사용하여 다른 액티비티로 전환하며 데이터를 전달하는 방법을 다룹니다.




인텐트 예제 버튼을 클릭하면 이미지뷰에 있는 이미지와 문자열, 정수, 실수를 두번째 액티비티로 전달합니다.

전환된 두번째 액티비티에서 받아서 데이터를 화면에 보여줍니다.





1. AndroidManifext.xml 매니페스트 파일에서  activity 태그를 사용하여 화면 전환할 액티비티를 추가해줘야 intent에서 해당 액티비티를 인식할 수 있습니다.


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.tistory.webnautes.intent_example">

   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:roundIcon="@mipmap/ic_launcher_round"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />

               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
       <activity android:name=".SecondActivity"></activity>
   </application>

</manifest>




2. MainActivity.java 파일입니다. 버튼을 클릭하면 두번째 액티비티로 전환하며 이미지뷰에 있는 이미지와 문자열, 정수, 실수를 전달합니다.

Intent객체 생성시 전환할 액티비티를 지정하고 putExtra에 키값과 넘겨줄 데이터를 지정해준 다음 startActivity를 실행해주면 됩니다.

비트맵 이미지의 경우 바이트 타입으로 변환하여 넘겨 줍니다.  주의할점은 넘겨줄수 있는 데이터 크기 제약이 있기 때문에 이미지 크기를 줄여서 보내야 합니다.  


package com.tistory.webnautes.intent_example;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {
   ImageView imageView;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       imageView = (ImageView)findViewById(R.id.imageview);
       Button button = (Button)findViewById(R.id.button);
       button.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {

               ByteArrayOutputStream stream = new ByteArrayOutputStream();
               Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
               float scale = (float) (1024/(float)bitmap.getWidth());
               int image_w = (int) (bitmap.getWidth() * scale);
               int image_h = (int) (bitmap.getHeight() * scale);
               Bitmap resize = Bitmap.createScaledBitmap(bitmap, image_w, image_h, true);
               resize.compress(Bitmap.CompressFormat.JPEG, 100, stream);
               byte[] byteArray = stream.toByteArray();

               Intent intent = new Intent(MainActivity.this, SecondActivity.class);
               intent.putExtra("string", "intent 연습");
               intent.putExtra("integer", 300);
               intent.putExtra("double", 3.141592 );
               intent.putExtra("image", byteArray);

               startActivity(intent);
           }
       });


   }
}




3. SecondActivity.java 파일입니다. 실행되면 MainActivty에서 보낸 데이터를 받아서 화면에 보여줍니다.

지정한 키 값에 대응되는 데이터의 타입별로 get 함수를 사용하여  데이터를 가져옵니다.


package com.tistory.webnautes.intent_example;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.TextView;

public class SecondActivity  extends AppCompatActivity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_second);


       ImageView imageview = (ImageView)findViewById(R.id.imageview);
       TextView textview = (TextView)findViewById(R.id.textview);

       Bundle extras = getIntent().getExtras();
       String s = extras.getString("string");
       int i = extras.getInt("integer");
       double d = extras.getDouble("double");
       byte[] byteArray = getIntent().getByteArrayExtra("image");
       Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

       String str = s+"\n"+i+"\n"+Double.toString(d)+"\n";
       textview.setText(str);
       imageview.setImageBitmap(bitmap);

   }
}




4. MainActivity.java를 위한 activity_main.xml 레이아웃 파일입니다. 이미지뷰와 버튼으로 구성되어 있습니다.


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
   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:orientation="vertical"
   android:gravity="center"
   tools:context=".MainActivity">

   <ImageView
       android:id="@+id/imageview"
       android:layout_width="wrap_content"
       android:layout_height="200dp"
       android:src="@drawable/moon"/>

   <Button
       android:id="@+id/button"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="인텐트 예제"/>


</LinearLayout>




5. SecondActivity를 위한 activity_second.xml 레이아웃 파일입니다. 이미지뷰와 텍스트 뷰로 구성되어 있습니다.


<LinearLayout
   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:gravity="center"
   android:orientation="vertical"
   tools:context=".SecondActivity">

   <ImageView
       android:id="@+id/imageview"
       android:layout_width="wrap_content"
       android:layout_height="200dp" />

   <TextView
       android:id="@+id/textview"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>


</LinearLayout>



마지막 업데이트 2019. 3. 4




문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts