[안드로이드] ListView의 List Selector가 작동이 안될 때.


    여러가지 문제로 작동이 안될 수 있겠지만... 개인적으로 발생했던 것은 소스 내부에서 row의 LinearLayout에 setBackgroundColor를 세팅했을 경우 작동이 되지 않는 현상이 발생 했다. 이런 경우 drawSelectorOnTop를 true로 주면 잘 작동이 된다.

[안드로이드] LOL 배심원단 어플 개발 완료[전적조회, 모바일 트리뷰날]


    반갑습니다. 얼마간의 시간이 들여 "LOL 배심원단"( LOL 트리뷰날 ) 어플을 개발 했습니다. 기존에 나와 있는 시스템은 제가 설치를 안해봐서 얼마나 좋은지 모르겠습니다. 제것보다 완성도나 보여주는 정보 등 더 좋을 수 도 있을거라 생각 합니다. 만약 그렇다면 제 어플을 많이 사용을 안하게 되면서 자연스레 도태되어 가겠지요. 반대의 경우라면 사용자가 꽤 있으리리 믿습니다. 


   아직 많이 부족한 어플인 만큼 개선사항과 추가기능 등 건의해주시면 많은 도움이 될 거 같습니다. 많은 이야기를 해주시면 감사하겠습니다. 댓글로 해주세요. !!


LOL 비밀번호 유출이 걱정되시는 분은 한번 읽어 보세요


비밀번호가 유출 되는 경우를 생각해보면 아래와 같습니다.


1. 사용자 본인이 아이디를 대여 할 경우

--> 이건 사용자 본인이 주의 하지 않으면 막을 수 없습니다.


2. 개발자가 아이디와 비밀번호를 빼낼 경우

--> 전 경찰서 가고 싶지 않습니다. 이 경우는 조금만 조사해보면 저라는게 딱 걸리기 때문에 제가 바보가 아닌이상 하지 않겠죠.


3. 키로거 등 해킹툴이 폰에 설치되어 있을 경우

--> PC와 동일 합니다. 바이러스나 키로거가 설치되어 있으면 PC에서도 핸드폰에서도 유출되는걸 막을 수 없겠죠. 사용자 본인이 관리를 잘 하셔야 합니다.


4. 배심원단 로그인시 외부로 나가는 무선데이터를 캐치하여 암호화 해독을 할 경우

--> 유선보다 무선이 외부로 나가는 데이터를 캐치하기가 쉽겠죠??

하지만 PC웹 페이지와 동일한 https 암호화 통신을 하므로 만약 캐치를 한다고 하더라도 일반 능력자들은 암호화 해독을 할 수가 없습니다. 세계적인 초절정 고수가 님 LOL 아이디 하나 해킹하겠다고 님 주변에서 무선데이터를 캐치하고 있진 않으리라 생각 됩니다.


5. 자동로그인 상태에서 폰을 잃어 버렸을 경우

--> 이 경우도 폰을 습득 사람이 초절정은 아니더라도 어느정도 암호화 해독과 리버스엔지니어링을 알아야 가능합니다. 또한 폰을 습득한 사람이 해커 또는 리버스엔지니어링의 고수가 될 확률이 높지 않고 설사 그러한 사람이 습득하였다 하더라도 님 LOL 아이디와 비밀버호를 해독하려고 그러한 수고를 할 가능성도 높지 않겠죠. 그래도 역시 암호 저장은 업계에서 권장하지 않습니다. 하지만 편의를 위해서 개발자인 저도 암호저장하고 사용하고 있죠 ^^


다운로드 페이지












전적조회 추가


다운로드 페이지



1. 로테이션 위젯 추가 방법

  - 바탕화면울 꾹 누른 후 리스트 중에 배심원단 위젯을 선택



2. 세일 정보 알람 받기

  - 오른쪽 위에 설정을 누르신 후 새 세일정보 알림 받기에 체크 

다운로드 페이지

[안드로이드] 웹서버에서 이미지 로딩시 여러가지 방법들


    아직 이부분쪽으로 개발을 하고 있지 않지만 선행학습을 목적으로 찾아 놓은 글들을 링크 해놓고자 한다.


1. Android Universal Image Loader 사용하기 

  - 라이브러리 링크

  - 설명 링크


2. 그 밖에 이미지 로딩 관련 도움 될 사항

  - 큰이지미를 효율적으로, 이미지캐싱, 멀티쓰레드에 대한 설명

  - 이미지 리사이즈 방법

  - 안드로이드 내장 라이브러리 이미지 모음 

  - 기본 카메라 앱으로 사진 찍어 불러오기

  - SDCARD에서 이미지 불러오기

[안드로이드] Http MultiParts 사용하여 파일과 텍스트 업로드.


    개인적으로 네이버와 구글을 찾아본 결과 기본 라이브러리를 이용해 직접 코딩해주는 방법, 아파치 라이브러리를 이용하는 방법 그리고 Android Asynchronous Http Client 라이브러리 정도 3가지 방법으로 압축 되었다.


1. Android Asynchronous Http Client 라이브러리

  - 본인은 안드로이드 전용으로 쉽고 강력한 Android Asynchronous Http Client 를사용하였다. 

  - 웹서버와 연동 되는 쿠키도 다룰 수 있다.

  - 라이브러리 다운로드(GitHub 홈)

  - 메인 Example 

  - 설명1 : http://edoli.tistory.com/91

  - 쿠키를 이용한 로그인 다루기

  - StackOverFlow 예제 01


2. 아파치 라이브러리 및 직접 구현

  - 아파치 라이브러리 이용

  - 직접구현 01

  - 직접구현 02

  - 직접구현 03 


3. 관련 참고 사항

  - 업로드시 서버단(PHP) 코딩 01

  - 업로드시 서버단(PHP) 코딩 02

  - 업로드시 진행사항 ProgressBar 만들기


[안드로이드] XMPP서버를 이용한 채팅앱 개발(그룹 및 단체)


   기존의 배심원단 앱에 단체 채팅방을 만들어 달라는 요구가 있어 추가 하기 위해 3-4일 정도 정보 습득한 내용을 포스팅 해보고자 한다. 아래와 같이 먼저 익명 단체 채팅방으로 완성이 되었다. 


* 사용된 기술

  - 사용된 서버 : 리눅스에 XMPP 서버 OPENFIRE 서버를 사용 하였다.

  - 사용된 클라이언트 : SMACK을 베이스로 한 ASMACK 라이브러리를 사용 하였다.


* XMPP 관련

  - 기본적으로 XMPP는 채팅용 통신 규약이라고 생각하면 된다. 

  - OPENFIRE 다운로드

  - 이해를 돕기 위한 설명은 이쪽 링크를 참고 바란다.


* SMACK 및 ASMACK

  - 관련된 라이브러리 예제는 구글을 검색해보면 많이 나온다. 본인도 그리하여 개발하였으니 이글을 보시는 분들도 쉽게 따라하며 개발 할 수 있으리라 생각한다. 

  - ASMACK는 SMACK를 베이스로 한 안드로이드용으로 라이브러리라 생각하면 된다.

  - SMACK GitHub LINK( https://github.com/igniterealtime/Smack )

  - Smack Documentation ( http://www.igniterealtime.org/builds/smack/docs/latest/documentation/ )

  - SMACK 관련 API

  - ASMACK GitHub LINK ( https://github.com/Flowdalic/asmack )

  - ASMACK 버전별 다운로드 ( http://asmack.freakempire.de/?C=D;O=A ) 

  - SmackAPI 간단 정리


* 관련 예제

  - 예제1( http://developer.samsung.com/android/technical-docs/Building-a-Chat-Application )

  - 예제2( http://vidorsolutions.blogspot.kr/2011/01/writing-xmppjabber-chat-application-for.html )

  - 예제3( http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/ )

  - 예제4( http://nhachicha.wordpress.com/2012/03/14/xmpp-client-with-android/ )

  - 예제5( http://davanum.wordpress.com/2007/12/31/android-just-use-smack-api-for-xmpp/ )


* 관련 StackOverFlow

  - How to get IQ tag using smack Java?

  - How to handle add request in smack API

  - https://igniterealtime.jiveon.com/thread/48245 openfire 서버 db 이슈


* 그외 도움이 될만한 것

  - 메신져 관련 개발에 대한 링크 모음http://reddolphin.tistory.com/100 )


[GAE] Google App Engine의 channel을 사용하여 그룹채팅 하기.


    안녕하세요. 최근 안드로이드로 그룹 채팅방을 만들어 볼 생각으로 여러가지 바탕자료를 모으고 테스트를 해보았습니다. 일단 GAE를 이용한 그룹채팅을 시도 했지만 결론은 안드로이드에서 그룹채팅을 하기에는 조금 부족하지 않나 싶습니다. 웹상에서는 충분히 가능할 것으로 보이나 안드로이드에서 네이티브로 자바스크립트가 지원되지 않으니 포기 하게 되었습니다. 다만 웹상에 간단한 그룹채팅방을 만든다면 쉽게 만들수 있어 좋을거 같습니다.


GAE Channel 예제소스01 : https://github.com/gvsumasl/jacc

GAE Channel 예제설명01 : http://masl.cis.gvsu.edu/2012/01/31/java-client-for-appengine-channels/

GAE Channel 예제소스02 : https://github.com/kwhinnery/gae-chat

GAE Channel Package 문서: 

https://developers.google.com/appengine/docs/java/javadoc/com/google/appengine/api/channel/package-summary


GAE의 채널을 사용하실 분들에게 도움이 되길 바라며~

[안드로이드] FaceBook 처럼 슬라이딩이 가능한 메뉴 만들기


항상 난 링크로 대체하지.. 왜냐면.. 나의 미래의 레퍼런스를 모으고 있을뿐이니깐..ㅠㅠ.

http://muzesong.tistory.com/83

http://i5on9i.blogspot.kr/2013/11/blog-post_2943.html

[안드로이드] 위젯에 버튼 클릭시 이벤트 처리


출처 : http://lilysoul.tistory.com/91




<!-- AndroidManifest.xml -->

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.memowidget"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="MemoWidget">
     <!-- 프로바이더 -->
  <receiver android:name="MemoWidget" android:enabled="true"> 
      <intent-filter> 
          <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
          <action android:name="android.action.BUTTON_CLICK" />
      </intent-filter> 
      <meta-data android:name="android.appwidget.provider" 
                 android:resource="@xml/memowidget" /> 
  </receiver>
    </application>
</manifest> 



<!-- memowidget.xml -->
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="210px" 
    android:minHeight="110px" 
    android:updatePeriodMillis="5000" 
    android:initialLayout="@layout/main" > 
</appwidget-provider>


<!-- main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="210px"
    android:layout_height="110px"
    android:background="@drawable/ss0001"
    >
<Button 
 android:id="@+id/btn" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="BUTTON"
    />
</LinearLayout>


<!-- MemoWidget.java -->
package com.memowidget;

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.RemoteViews;

public class MemoWidget extends AppWidgetProvider{
 public Context mContext;
 private String ACTION_BTN = "android.action.BUTTON_CLICK";
 
 @Override
 public void onUpdate(Context context, AppWidgetManager appWidgetManager,
   int[] appWidgetIds) {
  // TODO Auto-generated method stub
  
  
  //버튼에 이벤트 주기
  RemoteViews rViews = new RemoteViews(context.getPackageName(), R.layout.main);
  PendingIntent btn_click = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_BTN), PendingIntent.FLAG_UPDATE_CURRENT);
  rViews.setOnClickPendingIntent(R.id.btn, btn_click);
  
  //위젯 업데이트
  final int N = appWidgetIds.length;
  for(int i=0;i<N;i++){
   int widgetID = appWidgetIds[i];
   appWidgetManager.updateAppWidget(widgetID, rViews);
  }
  
  super.onUpdate(context, appWidgetManager, appWidgetIds);
 }
 @Override
 public void onReceive(Context context, Intent intent) {
  // TODO Auto-generated method stub
  String action = intent.getAction();
        if (action.equals(ACTION_BTN)) {
         Log.e("XXXX","BUTTON_CLICK");
        }
     
  super.onReceive(context, intent);
 }
}


[안드로이드] YouTube DATA API 이용


참고 사이트 : 

http://chanyhan.tistory.com/12

http://chanyhan.tistory.com/13

http://chanyhan.tistory.com/14


--------------------------------------------------------------------------------------

https://gdata.youtube.com/feeds/api/playlists/5C21EBCCB32F15E3?v=2&alt=json&max-results=50&orderby=published 

위와 같이 API를 이용해서 해당 카테고리의 영상 프리뷰, 영상 링크 등을 가져올 수 있다.


PlayList 고유문자인 "5C21EBCCB32F15E3" 는 아래와 같이 얻을 수 있다. 

먼저 https://gdata.youtube.com/feeds/api/users/chanyhan/playlists?v=2&alt=json를 해주면 chanyhan라는 사용자에 관련된 아래와 같은 JSON을 얻어 올 수 있는데 해당 데이터의 배열 Entry의 title를 보고  ID에서 해당 playlist 고유문자를 얻어 올 수 있다.




ID의 playlist:PL 이후의 영문자들이 위의 5C21EBCCB32F15E3에 해당하는 곳에 들어가면 된다.

[안드로이드] 그림판 및 그린 그림 파일로 저장 관련.


그림판 관련 예제 : 

http://www.tipssoft.com/bulletin/board.php?bo_table=update&wr_id=1433

http://brinpage.blogspot.kr/2012/01/blog-post_31.html

http://seungngil.tistory.com/archive/20120126


그린 이미지 저장 관련 :

http://www.androidpub.com/index.php?_filter=search&mid=android_dev_qna&search_target=title&search_keyword=%EA%B7%B8%EB%A6%BC%ED%8C%90&document_srl=2393387


http://androidhuman.tistory.com/entry/%EB%B7%B0%EC%97%90-%ED%91%9C%EC%8B%9C%EB%90%98%EB%8A%94-%EB%82%B4%EC%9A%A9%EC%9D%84-%EC%BA%A1%EC%B3%90%ED%95%98%EB%A0%A4%EB%A9%B4


그림판의 지우개 관련 : 

http://www.androidpub.com/index.php?_filter=search&mid=android_dev_qna&search_target=title&search_keyword=%EA%B7%B8%EB%A6%BC%ED%8C%90&page=1&division=-2287629&document_srl=2118067


[안드로이드] 액티비티간 값 전달하기


여러가지 방법 : http://www.androidpub.com/index.php?mid=android_dev_info&page=3&document_srl=2428871


배열 전달 : http://jijs.tistory.com/104


인스턴트 전달 : http://blog.naver.com/baik3?Redirect=Log&logNo=20165205836


객체 직렬화(Serializable) :http://rockdrumy.tistory.com/1044

[안드로이드] GCM 푸쉬 관련


요새 앱에 푸쉬 기능이 빠질 수 없으니... 구글 GCM을 이용한 푸쉬법을 알아보자.

http://blog.naver.com/dolking1234?Redirect=Log&logNo=70168168716

http://choijiho.tistory.com/50

http://www.cusmaker.com/106

http://blog.naver.com/titetoto123?Redirect=Log&logNo=130164801421



http://www.androidpub.com/index.php?_filter=search&mid=android_dev_qna&search_target=title&search_keyword=gcm&page=2&division=-2514035&last_division=-2285986&document_srl=2375165

[안드로이드] Suggestions 사용하기


1. SearchRecentSuggestionsProvider 이용.

http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html

http://www.grokkingandroid.com/android-tutorial-adding-suggestions-to-search/


2. SearchView에 어플리케이션 리스트 보여주기(셜록라이브러리에선 최신 버전에서만 작동)

http://www.edumobile.org/android/android-development/action-bar-search-view/


3. SearchView에 Suggestions 사용하기.

http://stackoverflow.com/questions/13733460/android-providing-recent-search-suggestions-without-searchable-activity


액션바 이외에는 AutoCompleteTextView를 이용해서 많이 사용하는것 같다. 네이버에 자료가 많으니 검색해보자.

[CENTOS] 리눅스에서 MySql과 아파치 설치 후 부팅 후 자동실행


출처 : http://blog.naver.com/kabbin1?Redirect=Log&logNo=30097747815


전체적으로 통용되는 부분인지는 모르겠음.

 저는 CentOS5.5 를 사용중입니다. XWindows 상입니다.

 1. rc.local 파일에 실행 경로와 명령어 쓰기

[root localhost@ apache] vi /etc/rc.d/rc.local   <-- rc.local 파일을 엽니다.

파일 중간 touch xxxx~ 된 부분 아래에 다음과 같이 씁니다.

/usr/local/mysql/bin/mysqld_safe --user=mysql <-- 개인 설정 디렉토리를 적습니다.

/usr/local/apache/bin/apachectl start              <-- 개인 설정 디렉토리를 적습니다.

저장 후 재 부팅 하신 후

ps -ef | grep mysqld

ps -ef | grep httpd

해보시면 서비스가 시작되어 있음을 알 수 있습니다.

참고로

ln -s /usr/local/mysql/bin/mysqld_safe /usr/bin

등록하면 Mysql 디렉토리 이동하지 않고 mysql 명령어를 입력해도 접근이 됨.

[출처] 아파치, Mysql 부팅 후 자동 실행 시키기|작성자 그대의영혼

[안드로이드] 트위치TV 테스트




LOL 리스트 GET : https://api.twitch.tv/kraken/streams?game=League%20of%20Legends


임베디드 : https://github.com/justintv/Twitch-API/blob/master/embedding.md#embedding-streams-vods-and-chat


트위치 TV 임베디드 테스트  

아무래도 플래쉬 없이는 재생이 안되는것 같다. 좀 더 연구 필요.