Learn & Record
[FastCampus] Android (Network 실습 7, 8 / 권한 이론, 실습 / 프로젝트 강의 1) 본문
[FastCampus] Android (Network 실습 7, 8 / 권한 이론, 실습 / 프로젝트 강의 1)
Walker_ 2024. 2. 12. 10:32
1. Profieler(앱분석툴) 요소
- CPU, MEMORY, NETWORK, ENERGY
- CPU를 최대 50% 사용이 좋음
- Memory 탭을 통해 메모리 누수 (불필요한 메모리)가 발생하지 않는 지 확인
- Network : 주고 받는 객체와 송수신된 시간을 확인 가능
findViewById<TextView>(R.id.easyEreateStudent).setOnClickListener {
    val student = StudentFromServer(name = "서울", age =200, intro = "well com to seoul")
    retrofitService.easyCreateStudent(student).enqueue(object  : Callback<StudentFromServer>{
        override fun onResponse(
            call: Call<StudentFromServer>,
            response: Response<StudentFromServer>
        ) {
            val student = response.body()
            Log.d("testt", "등록한 학생 : " + student!!.name)
        }
        override fun onFailure(call: Call<StudentFromServer>, t: Throwable) {
            Log.d("testt", "요청 실패")
        }
    })
}
2. 권한
- 사용자에게 특정 부분에 접근 할 수 있는 권한을 요청한다
- 인터넷, GPS
1> 일반권한
- 사용자에게 권한을 요청 하지 않습니다
2> 위험권한
- 사용자에게 권한을 요청한다
- 사진, 카메라, 주소록 -> 개인정보에 관련된 권한
구글정책
- API 버전에 따라 다르다
package com.example.fastcampus
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.TextView
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
class PermisionActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_permision)
        findViewById<TextView>(R.id.askPermission).setOnClickListener {
            val cameraPermission = ContextCompat.checkSelfPermission(
                this,
                android.Manifest.permission.CAMERA
            )
            if ( cameraPermission != PackageManager.PERMISSION_GRANTED) {
                // 권한이 없는 경우
                ActivityCompat.requestPermissions(
                    this,
                    arrayOf(android.Manifest.permission.CAMERA, android.Manifest.permission.ACCEPT_HANDOVER),
                    1000
                )
            } else {
                // 권한이 있는 경우
                Log.d("testt", "권한 있음")
            }
        }
    }
    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        if(requestCode == 1000) {
            // 우리가 보낸 권한 요청이 맞다면
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Log.d("testt", "승낙")
            } else {
                Log.d("testt", "거부")
            }
        }
    }
}
3. 유튜브 프로젝트 강의 1
- Activity 생성 > (Run) Edit Configurations 설정 > manifests 설정
- XML 파일 > LinearLayout 변경 > orientatito(Vertical) 설정
- src, TextView설정 > recyclerview 설정
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".YoutubeActivity">
    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/black"
        android:padding="12dp"
        android:gravity="center_vertical">
        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginLeft="8dp"
            android:layout_marginRight="16dp"
            android:src="@drawable/youtube_logo"/>
        
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Youtube"
            android:textColor="@color/white"
            android:textSize="24dp"/>
    </androidx.appcompat.widget.LinearLayoutCompat>
    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>
</androidx.appcompat.widget.LinearLayoutCompat>
- 통신작업 : retrofit 설정 > 레트로핏 서비스.kt 파일에 유튜브 arraylist 추가
- implement method 추가
package com.example.fastcampus
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
class YoutubeActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_youtube)
        val retrofit = Retrofit.Builder()
            .baseUrl("http://mellowcode.org/")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
        val retrofitService = retrofit.create(RetrofitService::class.java)
        retrofitService.getYoutubeItemList().enqueue(object:Callback<ArrayList<YoutubeItem>>{
            override fun onResponse(
                call: Call<ArrayList<YoutubeItem>>,
                response: Response<ArrayList<YoutubeItem>>
            ) {
            }
            override fun onFailure(call: Call<ArrayList<YoutubeItem>>, t: Throwable) {
            }
        })
    }
}
- 강사님이 URL에 설정을 바꾸셨는지 데이터가 오지 않아 당황스럽지만, 완강을 다해가니까 그러려니 할수있다.
FastCampus 강의 : https://fastcampus.co.kr/dev_online_androidstandard
Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online. | 패스트캠퍼스
앱 개발 기초 지식부터 배포 후 유지·보수까지 한 번에 끝내는 Android 앱 개발 입문 강의 | 입문자부터 주니어 개발자까지, 모두를 위한 Android 앱 개발 강의! 3개의 클론프로젝트와 4개의 기능 구
fastcampus.co.kr