'Computer/Android'에 해당되는 글 32건

  1. 2018.07.30 안드로이드
  2. 2018.07.30 [Android Studio] 사운드 파일 다루기
  3. 2018.07.30 [Android Studio] versionCode VS versionName
  4. 2018.07.30 [Android Studio] Clipboard 사용하기
  5. 2018.07.30 [Android Studio] 화면(screen) 회전 막기
  6. 2018.07.30 [Android Studio] Project, 패키지명, 앱 이름 바꾸기
  7. 2018.07.30 [Android Studio]EditText 한 줄 제한하기
  8. 2018.07.30 [Android Studio]이미지 라이브러리(Glide, Picasso) 사용방법 - URL에서 이미지 가져오기
  9. 2018.07.30 [Android Studio]서버와 연결을 하기 위한 기본 구성 - retorifit2, Gson, okttp3 준비하기
  10. 2018.07.30 [Android Studio]png파일이 검은색(black)으로 보이는 문제

안드로이드

|

Activity: 사용자 인터페이스와 함께 화면에 표시되는 것. ex. 조리법 목록 -> 상세 내용


Broadcast Receiver: 시스템 전체나 내부에서 브로드캐스트된 인텐트를 받음.


Service: 백그라운드에서 오랜 시간 혹은 지속해서 실행되는 코드. ex. 위치를 몇 분마다 기록


Content Provider: 구성 요소 사이에 공유되는 데이터를 저장했다가 API를 통해 이용할 수 있게 해줌. ex. 연락처 접근 허가


Intent: 안드로이드의 어떤 구성 요소가 전달되어야 하고 어떤 필요한 데이터를 갖고 있어야하는 지 지정.

안드로이드 구성 요소들은 서로를 활성화하고 데이터를 주고받기 위해 인텐트를 보낸다.

- Explicit intent; 인텐트가 클래스 이름을 명시하면 안드로이드가 특정 클래스를 직접 가리킴

- Implicit intent; 인텐트가 행위 문자열을 명시하면 안드로이드가 해당 행위 문자열을 아는 클래스를 가리킴



onPause() VS onResume():

onPause는 자원을 해체, onResume()은 자원을 복구 ex. BroadcaseReceiver 클래스를 시작하거나 정지. 센서 데이터 정보를 듣기 시작하거나 정지

And

[Android Studio] 사운드 파일 다루기

|

1. res에서 마우스 오른쪽 클릭하여 Android resource directory > raw 생성

2. raw폴더에 사운드 파일 이동

3. java에서

mediaPlayer = MediaPlayer.create(this, R.raw.file_name); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { mp.release(); }; });

와 같은 방식으로 작성한다.
setOnCompletionListener는 해당 사운드 파일 실행이 끝나면 실행하는 역할을 한다.


And

[Android Studio] versionCode VS versionName

|

versionCode는 Play Store에 Release할 때마다 증가하는 값으로 1부터  1씩 증가하게 됩니다. 그래서 새로운 apk파일을 업로드할 때마다 1, 2, 3, 4, ... 이런식으로 제출하여야 합니다. 무조건 증가하므로 새로 Release를 할 때마다 사용자들은 업데이트를 하게 됩니다.

versionName은 그와는 반대로 정답이 없습니다. 하지만 크게 0.0.0과 같이 세 가지 숫자로 구성이 되는데, 보통 첫 번 째 자리는 전체적으로 큰 변화가 있는 경우, 두 번 째 자리는 기능 추가나 사양의 변경이 있는 경우, 마지막은 조그만 버그 수정이나 디자인 수정이 있을 경우 증가하게 됩니다. 업데이트에는 전혀 반영은 안되며 일반적으로 versionCode를 증가할 때 versionName도 동시에 수정하게 됩니다. 정말 답이 업기 때문에 십진수처럼 9까지 갔다가 넘어가는 게 아니라 1.0.1, 1.0.2로 했다가 2.0.0이 될 수도 있습니다.

And

[Android Studio] Clipboard 사용하기

|

이 메소드를 사용하면 바로 사용 가능하다.

private void setClipboard(Context context, String text) { if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(text); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", text); clipboard.setPrimaryClip(clip); } }


And

[Android Studio] 화면(screen) 회전 막기

|

Manifest.xml에서 원하는 activity 속성으로 아래와 같은 속성을 넣어주면 된다.

android:screenOrientation="portrait"

가로로 고정시키고 싶거나 하다면 portrait대신 다른 속성을 선택해주면 된다.


And

[Android Studio] Project, 패키지명, 앱 이름 바꾸기

|

1. 왼쪽의 프로젝트 panel을 보면 프로젝트명/패키지 명은 아래 사진의 빨간색 부분에 위치해있다.

java폴더 아래 패키지 명으로 되어있는 폴더들을 rename을 해준다.(폴더를 클릭한 후, ALT+SHIT+R 혹은 마우스 오른쪽 클릭 > Refactor > Rename)

Rename package를 선택하면 끝자리(빨간색)부분만 바꿀 수 있게 된다. 여기서 모두 바꾼다.

2. gradle에서도 바꿔줘야하는 데,
module 수준의 build.gradle에서 applicationId 부분을 바꿔준다.

defaultConfig { applicationId "xxx.yyy.zzz" minSdkVersion 15 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }

setting.gradle에서 아래를 추가한다.

rootProject.name = 'zzz'


3. 앱 이름은 res > strings에서 'app_name'이란 부분을 고쳐주면 된다.

이후 Build > Clean Project를 해주고 빌드를 해서 제대로 작동이 되는 지 확인한다.

참고: https://stackoverflow.com/questions/18276872/change-project-name-on-android-studio


And

[Android Studio]EditText 한 줄 제한하기

|

예전엔 singleLine="true"라는 속성이 있었는데 지금은 maxLines="1"과 inputType="text"을 지정해주는 것으로 바뀌었다.

<EditText android:id="@+id/searchbar_edittext_searchactivity" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="1" android:hint="Search..." android:maxLength="30" android:inputType="text" />


And

[Android Studio]이미지 라이브러리(Glide, Picasso) 사용방법 - URL에서 이미지 가져오기

|

1. Picasso를 사용한 방법

Picasso.get().load(UserItem.getIntance().getAccount().getPhotoUrl().toString()).into(mImageView);

* GoogleAPI를 사용해서 google의 프로필 사진 가져오는 방법. getPhotoUrl()에서 toString()을 하게되면 온전한 주소를 가져올 수 있다. (위의 예제는 UserItem을 싱글턴으로 만들어서 사용한 것임.)

2. Glide를 사용하는 방법

Glide.with(MainActivity.this).load("http://xxx.yyy/zzz.jpg").into(mImageView);

* 이렇게 하면 비동기적으로 이미지를 처리한다고 한다. 

다음은 gradle에서 라이브러리 가져오는 방법.

implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.github.bumptech.glide:glide:3.7.0'

이런 라이브러리가 없으면 개고생을 해야한다... 그냥 쓰자.


And

[Android Studio]서버와 연결을 하기 위한 기본 구성 - retorifit2, Gson, okttp3 준비하기

|

gradle에 다음을 추가한다.

implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.3.1' implementation 'com.squareup.okhttp3:okhttp:3.8.1'

remote란 패키지 하나를 만들자.
그리고 그 안에 다음을 그냥 붙여 넣는다.

// ServiceGenerator.java import com.google.gson.Gson; import com.google.gson.GsonBuilder; import org.koreanlab.xxx.BuildConfig; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.converter.gson.GsonConverterFactory; /** * Created by Chanj on 11/06/2018. */ public class ServiceGenerator { public static <S> S createService(Class<S> serviceClass){ HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); if(BuildConfig.DEBUG){ loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); }else{ loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.NONE); } OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); httpClient.addInterceptor(loggingInterceptor); Gson gson = new GsonBuilder() .setLenient() .create(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(RemoteService.BASE_URL) .addConverterFactory(GsonConverterFactory.create(gson)) .build(); return retrofit.create(serviceClass); } }

위의 소스는 변경할 게 없다.

아래의 소스만 서버와 통신할 때 수정해주면된다.

// RemoteService.java (인터페이스다) import java.util.ArrayList; import retrofit2.Call; import retrofit2.http.Body; import retrofit2.http.GET; import retrofit2.http.POST; /** * Created by Chanj on 11/06/2018. */ public interface RemoteService { String BASE_URL = "http://aaa.bbb.ccc.ddd:pppp"; @POST("/search/article") Call<ArrayList<ArticleItem>> selectArticle(@Body SearchItem searchItem); @POST("/write/article") Call<Integer> insertArticle(@Body ArticleItem searchItem); }

어노테이션에 대해서는 따로 검색해보길 바란다.

서버와 통신이 되려면 Activity와 remote가 연결이 되어야 하는데 다음과 같이 처리한다.

private void getList(SearchItem searchItem) { RemoteService remoteService = ServiceGenerator.createService(RemoteService.class); Call<ArrayList<ArticleItem>> call = remoteService.selectArticle(searchItem); call.enqueue(new Callback<ArrayList<ArticleItem>>() { @Override public void onResponse(Call<ArrayList<ArticleItem>> call, Response<ArrayList<ArticleItem>> response) { ArrayList<ArticleItem> resultItems = response.body(); if (response.isSuccessful() && resultItems != null) { Log.d(TAG, resultItems.toString()); searchListAdapter = new SearchAdapter(getApplicationContext(), resultItems); listView.setAdapter(searchListAdapter); } Log.d(TAG, "Got results from server successfully!!!"); } @Override public void onFailure(Call<ArrayList<ArticleItem>> call, Throwable t) { Log.d(TAG, "Got no results. :("); Log.d(TAG, t.toString()); } }); }

여기서 Articleitem은 필자가 직접 만든 객체다. 나머지는 비슷한 형식으로 처리하면 된다.


And

[Android Studio]png파일이 검은색(black)으로 보이는 문제

|

png 파일이 너무 크면 black으로 보인다.

가로세로 1000px이하인 이미지 파일을 사용하자.

And
prev | 1 | 2 | 3 | 4 | next