Dev/Android

[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