Programming/Android2013.10.09 15:19

삼성폰에서 WebView loadData를 이용해서 html을 출력할때 오류가 발생한다.

테스트폰으로 사용하는 Vega Iron 에서는 정상 동작을 확인했다.


mContentView.loadData(content, "text/html", "utf-8");


위 코드 대신 아래 코드를 이용하시면 됨


String fixedContent = URLEncoder.encode(content, "utf-8").replaceAll("\\+","");
mContentView.loadData(fixedContent, "text/html", "utf-8");



Posted by 초프(초보 프로그래머)
Programming/iOS2013.09.16 11:55

헷갈리는 중국어 코드를 안드로이드와 비교


 

 iOS

 Android 

 간체 (중국)

 zh-Hans

zh-rCN

 번체 (대만)

 zh-Hant

zh-tTW


Posted by 초프(초보 프로그래머)
Tools2013.05.28 01:17

Android Studio 적응하기가 만만치 않네요.

이클립스에서 프로젝트 속성에서 쉽게 library project를 추가할 수 있는데 Android Studio에서는 찾을 수가 없었습니다.

검색해서 알아낸 내용을 간단히 정리합니다.




상단 툴박스에 Project Structure 를 클릭



Modules 선택 > library 를 추가할 Module 선택 > Dependencies 탭 선택



하단에 있는 + 버튼을 선택 > Module Dependency 선택


추가하고 싶은 Module 을 선택하면 끝!

Posted by 초프(초보 프로그래머)
분류없음2013.03.06 11:26

소개팅이 무한 지원되는 이음소시어스에서 모바일 개발자를 모집합니다.


모집분야 Mobile App 개발(iOS, Android) 회사 및 직무소개 (주)이음소시어스는 매칭기반 서비스를 제공하는 소셜데이팅 국내 1위 회사입니다. 현재는 이성끼리 이어주는 데이팅 서비스만을 제공하고 있지만, 축전된 기술과 운영 노하우를 바탕으로 이어짐을 기반으로한 다양한 서비스를 개발하여 서비스할 예정입니다. 아이디어를 아이디어로 머물지 않게 하는 실행력, 새로움을 두려워하지 않는 적극적인 자세, 다른이의 의견을 경청하는 열린마음, 현재에 만족하지 않는 자기계발에 대한 욕심. (주)이음소시어스 개발팀이 요구하는 개발자입니다. (주)이음소시어스 개발팀은 우리의 방법이 업계의 방법이 되는 그날까지 끊임없이 노력합니다. 업무내용 - Match 기반의 신규 서비스 개발 - 이음 Global 서비스 개발 자격요건 - iOS, Android APP 개발 경력 우대 - 그외 다양한 분야의 개발 경험 우대 - 다양한 분야에 대한 관심 폭발 우대 - 개발외 다양한 취미(밴드, 댄스, 익스트림 등) 우대 근로조건 및 복리후생 - 연봉제(면접 후 결정) - 4대보험 - 주5일 근무제(10AM ~ 7PM) - 연차휴가 - 퇴직금, 인센티브, 우수사원 표창 - 경조금 및 경조 휴가 - 기타 소개팅 무한 지원 야근시 석식비 무한 지원 교육비 및 교육자료(도서) 무한 지원 본인생일, 기혼자 결혼기념일 선물 제공 사내 교육/성장 프로그램 운영 즐거움은 기본, 권위적이지 않고 유연한 조직 문화 만랩 냉장고 제공(끊임없는 간식-시중에서 구할 수 있는 모든 종류) 문의 및 지원방법 - 지원서류 : 이력서(개발경력 중심, 주요 포트폴리오(URL등) 및 실제 담당업무 상세 기술 필수) 자기소개서는 본인이 지향하는 개발자로서의 성장 방향에 대한 에세이 - 지원방법 : apply@i-um.net 으로 이메일 발송 - 기타문의 : apply@i-um.net - 모집기간 : 채용시까지 회사 주소 서울 마포구 서교동 394-44 서교제일빌딩 10층

Posted by 초프(초보 프로그래머)
Programming/Android2012.06.23 16:59

WebView를 layout에 위치 시키고 loadUrl을 했는데... layout에 있는 WebView가 아니라

브라우져 앱이 실행되면서 해당 url을 보여준다.

이 문제는 간단한 코드 한줄로 해결된다.


WebView webView = (WebView) findViewById(R.id.webView);

webView.setWebViewClient(new WebViewClient());

Posted by 초프(초보 프로그래머)
Programming/Android2012.06.18 00:35

이런 저런 앱을 만들다 보니 activity전환 속도나 광고 노출 유지를 위해서 하나의 Activity에서 여러개의 다른 뷰를 보여줄 필요가 있었습니다.

기존에 제공되던 ViewFlipper를 관리할 수 있는 Manager를 제작하였습니다. ViewFlipper가 순서대로 동작되는 단점이 있습니다. 이 점을 극복하기 위해 Manager는 지정된 View로 이동시 필요한 만큼의 이동을 하게 됩니다.

사용하는 방법은 간단 합니다. ViewFlipper 안에 어떤 뷰가 순서대로 적용되어 있는지 알아야 합니다. 그리고 그 순서에 맞게 type을 등록하면 됩니다.

간단한 예제로 보는게 빠를 것 입니다. 간단하게 TabView형식으로 구현한 예제입니다.


main.xml



	
	    
	    
	
	
	    
	   	
	

TypeManagerTestActivity.java

package com.yhg.test.typemanager;

import yhg.library.view.manager.TypeViewManager;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ViewFlipper;

public class TypeManagerTestActivity extends Activity {
	public static final String TYPE_A = "a";
	public static final String TYPE_B = "b";
	
	protected TypeViewManager mManager;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ViewFlipper viewFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
        mManager = new TypeViewManager(viewFlipper);
        mManager.addType(TYPE_A);
        mManager.addType(TYPE_B);
        mManager.setStartType(TYPE_A);
        
        View menuA = findViewById(R.id.menuA);
        View menuB = findViewById(R.id.menuB);
        
        menuA.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				mManager.showTypeView(TYPE_A);
			}
        });
        
        menuB.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v) {
				mManager.showTypeView(TYPE_B);
			}
        });
    }
}

사용법은 위와 같습니다. 간단합니다. 실제로 어떻게 구동되는지는 아래 동영상을 참고하세요.



데모 동영상을 한번에 찍다 보니.... 약간 엉성하네요 하하하하

정말 간단한 기능이고 TypeViewManager에도 별로 대단할 것 없습니다. 내부 코드는 다음과 같습니다.


TypeViewDistance.java


TypeViewManager.java


다음에는 view 변경시 이벤트 처리를 하도록 해야겠습니다.

정리를 해보려고 해도 글은 적게 써지네요.....;;

Posted by 초프(초보 프로그래머)

2달 만의 업데이트입니다.

문제를 알고 있으면서도 놔둔 것이 많은 사용자들이 앱을 지우는 원인이 된 것 같습니다.

진작 오류를 해결하지 못한 것을 후회하며.... 늦었지만 업데이트 완료하였습니다.


수정 내용

- 추가화면에서 오른쪽 버튼 선택하여 `좌석현황`을 선택할 경우 오류로 앱이 종료

- 추가화면에서 오른쪽 버튼 선택시 `나의 도서관 추가` , `나의 도서관 삭제` 메뉴 추가

- 업데이트 이력, 개발자 정보 수정

- `나의 도서관` 화면에서 back키 누르면 앱을 강제 종료 시키던 것을 정상 종료 시키도록 변경



Posted by 초프(초보 프로그래머)
Programming/Android2011.12.13 09:30
BroadcastReceiver 예제입니다.

앱이 추가되고 삭제될때 receive 하는 예제입니다.
package com.yhg.sample;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class PackageReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent itt) {
		String packageName = itt.getData().getSchemeSpecificPart();
		String action = itt.getAction();
		
		if(action.equals(Intent.ACTION_PACKAGE_ADDED)){
			Log.d("ADDED",packageName);
		}
		else if(action.equals(Intent.ACTION_PACKAGE_REMOVED)){
			Log.d("REMOVED",packageName);
		}
	}

}

package com.yhg.sample;

import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;

public class SampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        this.registerReceiver(new PackageReceiver(), new IntentFilter(Intent.ACTION_PACKAGE_ADDED));
    }
}




    

    
        
            
                

                
            
        
        
        
            
                
                
                
            
        
    




 
 
Posted by 초프(초보 프로그래머)
Programming/Android2011.11.24 10:19
SensorService 를 흉내낸 간단한 PSensorService를 만들려고 간단한 코드를 입력하고 틀만 만들었습니다.

System_init.cpp 의 system_init()  에서

PSensorService::instantiate();

를 추가하여 서비스를 시작하도록 하였습니다.

컴파일 도중 오류가 발생했습니다.

RefBase.h:350: error: 'android::IBinder' is an inaccessible base of

이 오류였는데... 구글에 검색해 봐도 답이 안 보였습니다.

결론은 SensorServer를 만들어 상속을 받는데 public을 안 써줘서 접근을 못하는 것이었습니다.

상속받을 때 접근자를 항상 주의하도록 합시다!!! 
Posted by 초프(초보 프로그래머)
Project2011.10.06 15:17
우연히 동기의 질문에 오랫만에 다시 YHGCommunication 과 관련된 글을 확인하게 되었습니다.

잘 모르고 빨리 만들다 보니 허접한 코드가 되어 버렸습니다.
이벤트 방식의 메세지 처리, 객체 직렬화 메세지 전송 등 비 효율적인 면이 많이 있었습니다.
이 부분을 좀 더 수정해서 새로운 버전의 YHGComm 을 새로 만들까 하는 욕심이 생깁니다.


주요 수정 사항
1. 받은 메세지 처리 방식 수정
2. 전송되는 메세지 구조 수정
3. 서버에서 다양한 사용자 정보를 관리
4. 사용자 고유 번호 할당
5. Android 에서 UI thread 오류 없이 쉽게 동작

기대 효과
1. 많은 수의 메세지 클래스가 줄어듬
2. 조금 더 효율적인 전송 메세지 크기
3. 서버의 확장성
4. 타 플랫폼(Android)와의 호환성
5. 오류 수정

현재 메세지 처리 방식과 사용자 고유방식 관리에 대해서는 어느 정도 구상이 끝났습니다.
문제가 되는 부분은 전송 메세지 구조입니다. 최소한으로 전송하기 위해 어떻게 해야할지 고민이 되고 있습니다. 
모르는 것이 많다 보니 생각할 것도 많습니다.

언제 작업하고 언제 완성될지 모르겠지만 꼭 해볼렵니다.
이걸 실제로 사용하는 분이 있는지는 모르겠지만...  
Posted by 초프(초보 프로그래머)