Log for everything - Day

안드로이드 액티비티 전체화면 만들기

|

요즘 바빠서 블로깅하기가 힘들다.
그냥 간단한 것이라도 남기기로 한다.

툴바 및 상태바 숨기기

아래 코드를 onCreate의 setContentView 전에 해주면 된다.
사실 Android Studio에서 자동으로 생성해주는 FullScreenActivity에서도 볼 수 있는 내용이다.

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

이클립스 프로젝트 안드로이드 스튜디오로 마이그레이션 할 때 주의점

|

주의점 1

그냥 Open existing project 하면 에로사항이 꽃핀다.
import project (Eclipse ADT, Gradle, etc.) 메뉴를 이용할 것

주의점 2

때로는 이클립스 프로젝트 자체에서 수정해야 될 필요성이 있다.
이클립스를 지워버렸으면 좀더 귀찮아진다…

주의점 3

임포트 후에 라이브러리 설정을 잘 해줘야 한다.
support-library 관련 충돌이 많이 일어난다.
빌드버전/컴파일 버전/서포트 라이브러리 버전 등을 잘 맞춰야 한다.

주의점 4

임포트가 끝난후에 Android Studio 프로젝트 루트 폴더에 res 폴더 및 src 폴더가 남아있다.
한마디로 app/src/main 과 이중으로 폴더가 남아있는 것…
이때문에 xml 레이아웃 수정시에 URI is not registered ( Setting | Project Settings | Schemas and DTDs 가 출력되며, xmlns:android="http://schemas.android.com/apk/res/android" 구문에 계속 빨간줄이 가있고, 레이아웃 프리뷰가 제대로 출력이 안된다.
해당 폴더들을 삭제하면 해결된다.

돈을 배우다 - 좋은 책의 조건

|

오랫만에 교보문고에 들렀다.
먹고살기 힘든 사회 때문인지 인간의 탐욕 때문인지 돈버는 방법에 대한 책이 많기도 하다.
부동산으로 혹은 주식으로 혹은 사업으로 몇억 벌기 등등…
책이름도 자극적이라 한번쯤은 눈이 가게 된다.
타고난 금수저가 아닌 이상 누군들 돈 걱정이 없겠냐만 이거해라 저거해라하는 책들과 방법론만을 늘어놓는 책들은 좋아하지 않는터라 책을 집어들진 않았다.

돈을 배우다

얼마전에 도서관에서 빌린 책 중 한권이다. 돈에 대해 관점을 제시하고 분석하는 방식이 마음에 들었다.
부제에는 우리가 알아야 할 새로운 돈의 프레임이라는 제목으로 거창하게 소개하고 있지만,
사실 책 자체의 내용은 결국 잘 벌고, 잘 쓰고, 잘 불리는 것에 대한 기본적인 이야기다.
그럼에도 불구하고 이 책이 마음에 들었던 점은 기본적인 것들을 그저 소개하지 않고 배경과 필자의 관점을 적당히
잘 섞어서 이야기를 풀었다는 점이었다.

좋은 책의 조건

나는 이 분야의 전문가이고 잘 아니까 넌 그냥 잘 새겨들어

라고 말하는 책들을 매우 싫어한다. 내가 맹목적 권위라는 것 자체에 반감이 있기 때문인지도 모르겠지만
전문가라 해도 한낱 인간인데 종교처럼 일방적으로 맹신하는 태도는 잘 받아들여지지 않는다.
작중화자와의 건설적 토론이나 비판적 사고 등등 온갖 국어 교과서에 나올법한 수식어를 제외하더라도,
나는 뼛속깊이 엔지니어인지 사고의 작동원리(?)에 대해 이해가가지 않으면 결론을 잘 신뢰하지 않는다.

결론은 내게 있어서 좋은 책이란
필자의 사고 전개과정을 드러내면서 그럴듯한 주장을 펼쳐, 그 결론이 내 생각과 일치하든 그렇지 않든 생각할 거리를 던져주는 책인 것 같다.

일일커밋, 일일 블로깅

|

1일 1커밋과 1일 1블로깅을 한달 넘계 계속해왔다.
7/3일 하루가 빠져있는데, 이날 커밋한 리포지토리를 삭제했기 때문에 발생한 일이다.
한칸이 비어있는 것이 못내 아쉽기는 하지만 자신과의 약속은 깨지 않았다는 것에 만족한다.
한달넘게 일일커밋과 블로깅을 하며 느낀점은…

  1. 글쓰기도 익숙해지면 점점 빨라진다.
    처음에는 이런식이면 어떻게 하나 싶었던 문서화도 점점 할수록 익숙해지고 빨라진다.
  2. 어거지로라도 한줄이라도 코딩을 한다.
    필(?)받을때 몰아서 하고, 안될때는 잘 안되는 편이라 기복이 좀 있는데 이럴때 억지로라도 시작하면
    어느새 평균정도 능률은 나오기도 한다.
    다만 별의미없는 내용을 12시가 넘기전에 커밋하는 치팅(?)은 반성해야겠다.
  3. 하루를 반성하고 돌아보는 계기가 된다. 그날 정리할 것이 없으면 뭔가 한 것이 없다는 생각이 든다. 꾸준한 정진의 발판이 될 것 같다.

나름 장단이 있지만 현재로서는 장점이 더 많은 것 같다. 좀 더 계속해보자.

안드로이드에 Facebook Graph API 사용하기

|

Graph API 사용 Flow

인증 후 AccessToken 획득

AccessToken accessToken = AccessToken.getCurrentAccessToken();

Graph Request 생성

accessToken, URL endpoint, params, HttpMethod, Callback method를 인자로 생성
이후 executeAsync()로 비동기 실행

예제 1 - 사용자 이름 얻기

GraphRequest request = GraphRequest.newMeRequest(accessToken,
    new GraphRequest.GraphJSONObjectCallback() {
    @Override
        public void onCompleted(
            JSONObject object,
            GraphResponse response) {
        try {
            mTextView.setText("Logged in as:" + object.getString("name"));
        } catch (JSONException je) {
            Log.e("FB", "No key provided.");
        }
    }
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id,name,link");
request.setParameters(parameters);
request.executeAsync();

예제 2 - 페이스북 페이지에 게시물 포스팅

new GraphRequest(
    AccessToken.getCurrentAccessToken(),
    "/912605208889540/feed", // 페이지 ID
    params,
    HttpMethod.POST,
    new GraphRequest.Callback() {
    public void onCompleted(GraphResponse response) {
        Toast.makeText(getBaseContext(), "Write Complete", Toast.LENGTH_SHORT).show();
        }
    }
).executeAsync();

예제 3 - 페이스북 페이지 게시물 가져오기

new GraphRequest(
    AccessToken.getCurrentAccessToken(),
    "/912605208889540/feed",
    null,
    HttpMethod.GET,
    new GraphRequest.Callback() {
        public void onCompleted(GraphResponse response) {
            JSONObject jsonObj = response.getJSONObject();
            JSONArray jsonArray = null;
        try {
            jsonArray = jsonObj.getJSONArray("data");
        } catch (JSONException je) {
            Log.e("FB", "Error fetching JSON");
        }
    }
).executeAsync();

기타 확인할 것

  1. Facebook 개발자 페이지에서 앱 검수 항목에서 쓰기 권한 검수 받기
  2. Facebook 개발자 페이지에서 앱 공개해서 SANDBOX에서 실행되지 않도록 할 것
    (앱 공개 안하면 안드로이드 앱을 통해 Publishing한 포스트들이 다른 사람에게 보이지 않음)