반응형

#인공지능사관학교 #광주 #인공지능 #과학기술정보통신부 #광주광역시 #수강후기 #프로젝트

#인공지능사관학교4기 #인공지능사관학교 후기

안녕하세요

저번 글에도 적었지만서두,,

intent에 대해서 복습할 겸

다시 적어보려고 합니다

사실 아직도? 잘 모르겠어요 애매해요

출처: 네이버 영어사전

intention이라는 명사(의도)의 형용사형인거 같은데요,,,

좀 생소한 단어때메 굉장히 이해가 안 됨 아무튼

다시 적어보겠읍니다

비유:

인텐트 ~ 우체통

다양한 어플리케이션 내에서 다양한 컴포넌트와 통신과 상호작용을 가능하게 하는 중요한 개념

Chat GPT - 3.5

액티비티와, 서비스, 외부통신과의 중개, 콘텐츠 제공 등

다양한 상호작용을 intent를 통해서 할 수 있다는 것.

다양한 종류의 메시지를 인텐트에 넣습니다

그 다음 다른 액티비티에 보낸다는거죠 ( 이 형식은 우체통으로 인텐트가 필요하다는 것)

종류?

묵시적 intent

명시적 intent가 있어요

이해한 걸 간단히 적어보면

묵시적 intent --> 해당 앱 내에서 화면 왔다갔다, 만들어놓은 기능 왔다갔다(내부임)

명시적 intent --> 버튼 눌렀더니 앱에 있던 데이터 들고가서 네이버 검색을 하러 간다거나, 유튜브로 간다거나 그런 느낌(외부로 감)

여기 형식에는 액션과 데이터를 다른 앱(뭐 기본 어플인 전화, 연락처, 문자 등)에 데이터를 보내서 받을 수 있다구 이해했슴다

저희 은행어플에서 공인인증서 받을 때, 본인인증할 떄? 문자로 막

[발신] ZmsdPQxj491SOkIWkfVNkqrnKQ923

이런식으로 문자보내는 상황이 있을 텐데,

그 때 어플에서 보안이 안전한 상태에서 intent를 통해서 각 핸드폰의 메시지 기능으로 데이터를 보내는게 아닌가 라는 생각

- 묵시적 인텐트: 에뮬레이터 내부에 설치되어있는 어플리케이션을 실행.

어떤 action을 취할건지(애플리케이션을 사용할건지), 어떤 데이터를 쓸 건지

-명시적 인텐트: 내가 만든 화면에서 내가 만든 다른 화면으로 이동하는 것

이렇게 액션에는 요 정도의 종류가 있구요

암튼 기본 처음 실습으로 전화, 홈페이지, 구글 맵, 구글, 문자 보내기, 사진찍기로 실습을 했습니당


전체 코드

MainActivity

 

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
import com.example.ex20230919.R.drawable.img1
import com.example.ex20230919.R.drawable.patrick

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        // 1) 필요한 View를 Id값을 통해서 찾아오기: FindViewId
        val img:ImageView = this.findViewById<ImageView>(R.id.img)
        val btnPre:Button = this.findViewById(R.id.btnPre)
        val btnNext:Button = this.findViewById(R.id.btnNext)
        val Imgid : ArrayList<Int> = ArrayList<Int>()
        // 2) img1, img2 ~ img6 들의 Id값을 가져온다. (R.drawable.img1~6) res --> 안에 들어가는 모든 파일은 id값을 가짐
        // id값들을 ArrayList에 저장하기: imgId
        Imgid.add(R.drawable.img1)
        Imgid.add(R.drawable.img2)
        Imgid.add(R.drawable.img3)
        Imgid.add(R.drawable.img4)
        Imgid.add(R.drawable.img5)
        // 3) 다음 Button을 클릭했을 때 이미지 변경(ex. [0] --> [1] --> [2] --> [0]
        // val img1 :ImageView= findViewById<ImageView>(R.drawable.)
        var index = 0
        btnNext.setOnClickListener {
            index++
            if (index >= Imgid.size) index = 0
            img.setImageResource(Imgid[index])
                // 판단: 만약에 index가 6이상되면 index값을 0으로 되돌리기
        }

        btnPre.setOnClickListener {
            index--
            if (index < 0) index = Imgid.size-1
            img.setImageResource(Imgid[index])
        }
        // 4) 이전 Button 클릭했을 때 이미지 변경(ex. [5] --> [4])

    }
}

IntentActivity

 

 

import android.app.SearchManager
import android.content.Intent
import android.content.Intent.ACTION_CALL
import android.content.Intent.ACTION_VIEW
import android.content.Intent.ACTION_WEB_SEARCH
import android.content.pm.PackageManager
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.widget.Button
import androidx.appcompat.app.AlertDialog
import androidx.core.app.ActivityCompat
import java.net.URI

class IntentActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_intent)
        // 1) 컨트롤해야하는 View들 찾아오기
        val btnCall : Button = findViewById(R.id.btnCall)
        val btnWeb: Button = findViewById(R.id.btnWeb)
        val btnMap:Button = findViewById(R.id.btnMap)
        val btnSearch:Button = findViewById(R.id.btnSearch)
        val btnMsg:Button = findViewById(R.id.btnMsg)
        val btnCapture:Button = findViewById(R.id.btnCapture)

그 이후 이제

1. 전화 걸기

        btnCall.setOnClickListener {
            var uri = Uri.parse("tel:010-4157-9173")
            val intent = Intent(Intent.ACTION_CALL, uri)
            startActivity(intent)
            // checkSelfPermission(어플리케이션, 어떤 권한) 이렇게 한다면 applicationContext
            if (ActivityCompat.checkSelfPermission(applicationContext, android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                // alert창으로 권한 물어보기(요청하기)
                ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CALL_PHONE), 0)
                // requestCode: 명시적 Intent, 임의의 숫자
                return@setOnClickListener // 이걸하지 않으면 alert창에서 허가버튼을 눌렀을 때 원래 창으로 안돌아감
            }
        // 이 사이에 1~6번의 기능 모두가 setOnClickListener로 들어갑니다
        }
    }
}
 

1) 액션: Intent.ACTION_CALL

2) 데이터: uri SecurityException

1) AndroidManifest.xml --> uses permission을 줘야함

2) Alert창을 띄워서 확인하기

ActivitiyCompat: 권한을 요청하고, 허락한 적이 있는지 없는지 확인하는 기능

권한을 허가한 적이 있는지 없는지 판단 --> 없으면 alert창을 띄워주기

2. 홈페이지 열기 : ACTION_VIEW, url

 

     btnWeb.setOnClickListener {
            val uri = Uri.parse("http://www.naver.com")
            val intent = Intent(ACTION_VIEW, uri)
            startActivity(intent)
        }

3. 구글 맵에 대성학원 위치 띄우기: ACTION_VIEW, uri

+ 대성학원의 위치 위도: 35.14670147841655, 경도: 126.92215633785938

 

        btnMap.setOnClickListener {
            val uri = Uri.parse("http://google.com/maps?q=35.14670147841655,126.92215633785938")
            val intent = Intent(ACTION_VIEW, uri)
            startActivity(intent)
        }

4. 구글 검색하기: ACTION_WEB_SEARCH -

        btnSearch.setOnClickListener {
            val intent = Intent(Intent.ACTION_WEB_SEARCH)
            intent.putExtra(SearchManager.QUERY, "안드로이드")
            startActivity(intent)
        }

5. btnMsg ACTION_SENDTO

 

        btnMsg.setOnClickListener {
            val intent = Intent(Intent.ACTION_SENDTO)
            // 문자 내용: sms_body, "안녕하세요?"
            intent.putExtra("sms_body","안녕하세요")
            // 문자 받을 대상도 적어야 함 - intent.data - Uri데이터를 준비해서 intent에 넣어주는 방법
            intent.data =  Uri.parse("smsto:"+Uri.encode("01041579173"))
            startActivity(intent)
        }
        btnCapture.setOnClickListener {
            val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
            startActivity(intent)
        }

전부다 uri라는 변수를 만들어서

그 안에다가 원하는 데이터를 넣고

ACTION_~~ 라는 형식으로 intent를 넣어서 실행시키는 구조

아무튼 이렇게 기본적인 실습을 했는데

+ 여기다가 230920자의 액티비티의 생명주기를 알아야

인텐트를 더 잘할 수 있다는 가르침으로 업로드 예정,,,

암튼 끗

 

 
반응형