Check below
http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/
2011년 5월 31일 화요일
2011년 5월 30일 월요일
잡담 - 과유불급(過猶不及)
과유불급 [過猶不及]
- 지나친 것은 미치지 못한 것과 같다는 뜻. (출처 : 네이버 백과사전)
무엇이든 항상 극으로 치닫는 시대
"적당히"의 미덕이 필요한시기
- 지나친 것은 미치지 못한 것과 같다는 뜻. (출처 : 네이버 백과사전)
무엇이든 항상 극으로 치닫는 시대
"적당히"의 미덕이 필요한시기
2011년 5월 27일 금요일
Android - Widget 관련 좋은글
Widget 동작 원리, 개념정리
http://huewu.blog.me/110089125673
위젯 처음 설치 시 설정 activity 호출 하는 예제
http://android-er.blogspot.com/2010/10/simple-home-screen-app-widget-with.html
http://huewu.blog.me/110089125673
위젯 처음 설치 시 설정 activity 호출 하는 예제
http://android-er.blogspot.com/2010/10/simple-home-screen-app-widget-with.html
2011년 5월 26일 목요일
Java - java.util.Calendar
Calendar c = Calendar.getInstance();
// how to get current date
int year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH);
//JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
int day = c.get(Calendar.DATE);
int week = c.get(Calendar.DAY_OF_WEEK);
//SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, and SATURDAY.
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int ampm = c.get(Calendar.AM_PM);
//AM, PM
....
....
....
System.out.println(String.valueOf((int)(gap / 86400000)));
// 1day = 86400000 milliseconds
// how to get current date
int year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH);
//JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
int day = c.get(Calendar.DATE);
int week = c.get(Calendar.DAY_OF_WEEK);
//SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, and SATURDAY.
int hour = c.get(Calendar.HOUR);
int minute = c.get(Calendar.MINUTE);
int ampm = c.get(Calendar.AM_PM);
//AM, PM
....
....
....
//how to calculate days between from date and to date
Calendar c2 = Calendar.getInstance();
c2.set(Calendar.YEAR, 1980);
c2.set(Calendar.MONTH, 9);
c2.set(Calendar.DATE, 17); // my BirthDay!!!!
//void set(int field, int value)
//can use other "set" method (e.g. set(int year, int month, int day), ...)
long gap = c.getTimeInMillis() - c2.getTimeInMillis();
// "getTimeInMillis" returns milliseconds
System.out.println(String.valueOf((int)(gap / 86400000)));
// 1day = 86400000 milliseconds
can use when calculate D-Day, Biorhythm...
2011년 5월 23일 월요일
Java -Thread
자세한 개념은 생략
1. 구현 방법 두가지가 있음
(1) Thread 클래스 상속
public MyThread extends Thread{
public voic run(){
System.out.println("Hello World");
}
public static void main(String[] args){
(new MyThread()).start();
}
}
(2) Runnable 인터페이스 구현
public MyRunnable implements Runnable{
}
공통점 - run() 에 구현하고 start()로 실행한다.
차이점 - (1)은 상속 (2)는 구현, 다른 클래스를 상속하는 Thread를 사용하고 싶으면 (2)번 방법을 쓸 수 밖에 없다.
2. 주요 method
(1) sleep(int millisec)
millisec( 1/1000초 1초 = 1000 밀리세컨즈) 만큼 thread를 재우고 다른 thread를 수행한다.
e.g. for (int i = 0; i < importantInfo.length; i++) {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
//We've been interrupted: no more messages.
return;
}
//Print a message
System.out.println(importantInfo[i]);
}
출처 - http://download.oracle.com/javase/tutorial/essential/concurrency/sleep.html
(2) join()
해당 thread가 완료될때까지 기다리게 한다. 시간을 설정 할 수도 있다.
e.g. myThread.join(); // myThread가 완료될때까지 다른 thread는 멈춘다.
1. 구현 방법 두가지가 있음
(1) Thread 클래스 상속
public MyThread extends Thread{
public voic run(){
System.out.println("Hello World");
}
public static void main(String[] args){
(new MyThread()).start();
}
}
(2) Runnable 인터페이스 구현
public MyRunnable implements Runnable{
public voic run(){
System.out.println("Hello World");
}
public static void main(String[] args){
(new Thread(new MyRunnable())).start();
}
}
공통점 - run() 에 구현하고 start()로 실행한다.
차이점 - (1)은 상속 (2)는 구현, 다른 클래스를 상속하는 Thread를 사용하고 싶으면 (2)번 방법을 쓸 수 밖에 없다.
2. 주요 method
(1) sleep(int millisec)
millisec( 1/1000초 1초 = 1000 밀리세컨즈) 만큼 thread를 재우고 다른 thread를 수행한다.
e.g. for (int i = 0; i < importantInfo.length; i++) {
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
//We've been interrupted: no more messages.
return;
}
//Print a message
System.out.println(importantInfo[i]);
}
출처 - http://download.oracle.com/javase/tutorial/essential/concurrency/sleep.html
(2) join()
해당 thread가 완료될때까지 기다리게 한다. 시간을 설정 할 수도 있다.
e.g. myThread.join(); // myThread가 완료될때까지 다른 thread는 멈춘다.
2011년 5월 20일 금요일
Item - 바이오리듬
1906년 독일의사 프리즈가 발견
출생일을 기점으로 신체리듬, 감성리듬, 지성리듬 세가지가 변화를 보임으로써 인간의 컨디션 및 삶에 영향을 미친다는 것을 발견
1. 신체리듬(physical) - 신체가 얼마나 외부의 물리적인 변화에 잘 적응하고 이겨내는가, 질병에 대한 면역력, 체내 기관의 기능(23일 주기)
0, 26, 51, 73, 88, 97, 99, 94, 81, 63, 39, 13, -13, -39, -63, -81, -94, -99, -97, -88, -73, -51, -26
2. 감성리듬(emotional) - 인간의 감성을 나타냄, 자신의 기분이나 기분을 좌우하는 신경계 상태 (28일 주기)
0, 22, 43, 62, 78, 90, 97, 100, 97, 90, 78, 62, 43, 22, 0, -22, -43, -62, -78, -90, -97, -100, -97, -90, -78, -62, -43, -22
3. 지성리듬(intellectual) - 인간의 두뇌활동을 알아 볼 수 있음 (33일 주기)
0, 18, 37, 54, 69, 81, 90, 97, 99, 98, 94, 86, 75, 61, 45, 28, 9, -9, -28, -45, -61, -75, -86, -94, -98, -99, -97, -90, -81, -69, -54, -37, -18
참고 http://60gabja.com/bio/013_modujobio.php3
출생일을 기점으로 신체리듬, 감성리듬, 지성리듬 세가지가 변화를 보임으로써 인간의 컨디션 및 삶에 영향을 미친다는 것을 발견
1. 신체리듬(physical) - 신체가 얼마나 외부의 물리적인 변화에 잘 적응하고 이겨내는가, 질병에 대한 면역력, 체내 기관의 기능(23일 주기)
0, 26, 51, 73, 88, 97, 99, 94, 81, 63, 39, 13, -13, -39, -63, -81, -94, -99, -97, -88, -73, -51, -26
2. 감성리듬(emotional) - 인간의 감성을 나타냄, 자신의 기분이나 기분을 좌우하는 신경계 상태 (28일 주기)
0, 22, 43, 62, 78, 90, 97, 100, 97, 90, 78, 62, 43, 22, 0, -22, -43, -62, -78, -90, -97, -100, -97, -90, -78, -62, -43, -22
3. 지성리듬(intellectual) - 인간의 두뇌활동을 알아 볼 수 있음 (33일 주기)
0, 18, 37, 54, 69, 81, 90, 97, 99, 98, 94, 86, 75, 61, 45, 28, 9, -9, -28, -45, -61, -75, -86, -94, -98, -99, -97, -90, -81, -69, -54, -37, -18
참고 http://60gabja.com/bio/013_modujobio.php3
2011년 5월 19일 목요일
Android - about Battery BroadcastReceiver...
public void onReceive(Context arg0, Intent intent){
int level = intent.getIntExtra("level", 0);
int scale = int.getIntExtra("scale", 100);
System.out.println(String.valueOf((level / scale) * 100) + "%");
int plugType = intent.getIntExtra("plugged", 0);
/*
plugType is
BatteryManager.BATTERY_PLUGGED_AC
or BatteryManager.BATTERY_PLUGGED_USB
*/
int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
/*
status is
BatteryManager.BATTERY_STATUS_CHARGING
or BatteryManager.BATTERY_STATUS_DISCHARGING
or BatteryManager.BATTERY_STATUS_FULL
or BatteryManager.BATTERY_STATUS_NOT_CHARGING
or BatteryManager.BATTERY_STATUS_UNKNOWN
*/
int temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
/*
temp / 10 = degrees celsius
*/
}
int level = intent.getIntExtra("level", 0);
int scale = int.getIntExtra("scale", 100);
System.out.println(String.valueOf((level / scale) * 100) + "%");
int plugType = intent.getIntExtra("plugged", 0);
/*
plugType is
BatteryManager.BATTERY_PLUGGED_AC
or BatteryManager.BATTERY_PLUGGED_USB
*/
int status = intent.getIntExtra("status", BatteryManager.BATTERY_STATUS_UNKNOWN);
/*
status is
BatteryManager.BATTERY_STATUS_CHARGING
or BatteryManager.BATTERY_STATUS_DISCHARGING
or BatteryManager.BATTERY_STATUS_FULL
or BatteryManager.BATTERY_STATUS_NOT_CHARGING
or BatteryManager.BATTERY_STATUS_UNKNOWN
*/
int temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, -1);
/*
temp / 10 = degrees celsius
*/
}
2011년 5월 18일 수요일
Android - Widget(Remoteview)에 onClick 적용하기
AndroidManifest.xml - intent-filter에 해당 액션을 정의 해준다.
<intent-filter>
<action android:name="jh.project.widget.digital.third.action.CLICK" />
</intent-filter>
source.java (AppWidgetProvider 에서 돌릴 service) - Remoteview에 onClick시 Pending Intent를 정의하고, onStart에 구현한다.
static final String ACTION_CLICK = "jh.project.widget.digital.third.action.CLICK";
public void onCreate() {
RemoteViews views = new RemoteViews(getPackageName(), R.layout.main);
Intent newIntent = new Intent();
newIntent.setAction(ACTION_CLICK);
PendingIntent pIntent = PendingIntent.getService(this, 0, newIntent, 0);
views.setOnClickPendingIntent(R.id.imgin /*(event를 적용할 componet - e.g. ImageView)*/, pIntent);
}
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
if (ACTION_CLICK.equals(intent.getAction())) {
updateWidget();
}
}
맞나?? ㅋㅋ
<intent-filter>
<action android:name="jh.project.widget.digital.third.action.CLICK" />
</intent-filter>
source.java (AppWidgetProvider 에서 돌릴 service) - Remoteview에 onClick시 Pending Intent를 정의하고, onStart에 구현한다.
static final String ACTION_CLICK = "jh.project.widget.digital.third.action.CLICK";
public void onCreate() {
RemoteViews views = new RemoteViews(getPackageName(), R.layout.main);
Intent newIntent = new Intent();
newIntent.setAction(ACTION_CLICK);
PendingIntent pIntent = PendingIntent.getService(this, 0, newIntent, 0);
views.setOnClickPendingIntent(R.id.imgin /*(event를 적용할 componet - e.g. ImageView)*/, pIntent);
}
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
if (ACTION_CLICK.equals(intent.getAction())) {
updateWidget();
}
}
맞나?? ㅋㅋ
라벨:
android,
onClick,
remoteview,
widget
Android - Battery 잔량 표시
private TextView contentTxt;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
contentTxt = new TextView(this);
setContentView(layout);
layout.addView(contentTxt);
this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
}
private BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent intent) {
// TODO Auto-generated method stub
int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
int ratio = (level * 100) / scale;
int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
int ratio = (level * 100) / scale;
contentTxt.setText(String.valueOf(ratio) + "%");
}
};
Android - File 접근 및 한글 깨짐문제
File 위치 - res/raw
raw폴더는 새로 만들어야 한다.
나중에 파일에 접근할때는 "R.raw.파일명" 으로 Resource ID를 구할 수 있다.
한글 깨짐 - InputStreamReader 생성시 뒤에 인코딩 타입을 적어주면 된다.
try{
//파일명 : raw/code.csv
InputStream in = getResources().openRawResource(R.raw.code);
InputStreamReader inr = new InputStreamReader(in, "euc-kr");
BufferedReader reader = new BufferedReader(inr);
String str;
int i;
StringBuffer buf = new StringBuffer();
try{
while((str = reader.readLine()) != null){
buf.append(str + "\n");
}
}catch(IOException e1){
e1.printStackTrace();
}
try{
in.close();
Log.w("TEXT", buf.toString());
}catch(IOException e){
e.printStackTrace();
}
}catch(Exception e){
Log.w("ERROR", e.toString());
}
Android - android:gravity / android:layout_gravity
android:gravity 또는 android:layout_gravity 속성은 다음과 같은 값으로 설정이 가능하다. 복수의 값을 설정할 시 | 사용. (ex. right|bottom)
- top: 객체를 컨테이너 위쪽 한계로 밀기. 객체의 사이즈 변동 없음.
- bottom: 개체를 컨테이너 밑 한계로 밀기. 객체의 사이즈 변동 없음.
- left: 객체를 컨테이너 왼쪽 한계로 밀기. 객체 사이즈 변동 없음.
- right: 객체를 컨테이너 오른쪽 한계로 밀기. 객체 사이즈 변동 없음.
- center_vertical: 객체를 컨테이너의 수직 중심에 배치. 사이즈 변동 없음.
- fill_vertical: 객체를 컨테이너 높이만큼 상하 확대해 상하로 꽉 차게 배치.
- center_horizontal: 객체를 컨테이너의 수평 중심에 배치. 사이즈 변동 없음.
- fill_horizontal: 객체를 컨테이너 넓이만큼 좌우 확대하여 좌우로 꽉 차게 배치.
- center: 객체를 컨테이너의 수직/수평 중심에 배치. 사이즈 변동 없음.
- fill: 객체를 컨테이너의 크기만큼 수직/수평 확대하여 컨테이너를 완전히 꽉 채우도록 함.
- clip_vertical: 객체의 상하 길이가 컨테이너보다 클 경우. 위아래로 튀어나오는 부분을 잘라냄. top|clip_vertical의 경우 아래쪽에 튀어나오는 객체가 잘려짐. bottom|clip_vertical의 경우 위쪽에 튀어나오 객체가 잘려짐. center_vertical|clip_vertical의 경우 위, 아래 튀어나온 부분 모두 잘림.
- clip_horizontal: 객체가 좌우 길이가 컨테이너보다 클 경우, 좌우로 튀어나오는 부분을 잘라냄. right|clip_horizontal의 경우 왼쪽으로 튀어나온 부분이 잘리며, left|clip_horizontal의경우 오른쪽으로 튀어나온 부분이 잘린다. center_horizontal|clip_horizontal의 경우 컨테이너 좌우로 튀어나온 부분 모두 잘라냄.
Android - 유료 어플 등록 (유료 개발자 등록)
google 계정, adsense 계정 있어야함
1. 안드로이드 개발자 등록 -> https://market.android.com/publish/signup
2. Edit Profile로 이동 하여 Account Type 항목에 "Setup a Merchant Account..." 클릭
3. 정보 입력 후 adsense id 입력
끝~
1. 안드로이드 개발자 등록 -> https://market.android.com/publish/signup
2. Edit Profile로 이동 하여 Account Type 항목에 "Setup a Merchant Account..." 클릭
3. 정보 입력 후 adsense id 입력
끝~
2011년 5월 17일 화요일
Android - Eclipse 에서 proguard 사용하기
eclipse에서 엄청 간단하게 사용 가능함
자세히 알고 싶으면 http://developer.android.com/guide/developing/tools/proguard.html
ADT를 8.0.1 이후 버전으로 업그레이드
프로젝트를 생성하면 자동으로 생성되는 default.properties 를 열어서
proguard.config=proguard.cfg
를 추가해주면 된다
.......고 한다.
간혹 소스 상태에선 잘 돌아가던 프로젝트가 apk 파일로 export 후 에러가나는 경우가 있는데
요 프로 가드란 놈이 난독화, 최적화 하는 과정에서 실제 사용하는 코드를 제거하는 경우가 발생하여 문제가 되기도 한다.
아래 글은 본인이 겪은 aidl을 사용했을경우 nullpointerexception 이 발생하는 경우를 정리한 내용이다.
http://purepleya.blogspot.com/2011/07/android-apk-export.html
귀찮아서 아직 안해봤음.
자세히 알고 싶으면 http://developer.android.com/guide/developing/tools/proguard.html
ADT를 8.0.1 이후 버전으로 업그레이드
프로젝트를 생성하면 자동으로 생성되는 default.properties 를 열어서
proguard.config=proguard.cfg
를 추가해주면 된다
.......고 한다.
간혹 소스 상태에선 잘 돌아가던 프로젝트가 apk 파일로 export 후 에러가나는 경우가 있는데
요 프로 가드란 놈이 난독화, 최적화 하는 과정에서 실제 사용하는 코드를 제거하는 경우가 발생하여 문제가 되기도 한다.
아래 글은 본인이 겪은 aidl을 사용했을경우 nullpointerexception 이 발생하는 경우를 정리한 내용이다.
http://purepleya.blogspot.com/2011/07/android-apk-export.html
귀찮아서 아직 안해봤음.
Java - String.substring Method
1. public String substring(int startIndex)
- startIndex 부터 끝까지의 문자열을 반환 한다.
String a = "1234567";
- startIndex 부터 끝까지의 문자열을 반환 한다.
String a = "1234567";
System.out.println(a.substring(2));
==>>"34567"
String a = "1234567";
System.out.println(a.substring(3));
==>>"4567"
String a = "1234567";
System.out.println(a.substring(4));
==>>"567"
2. public String substring(int startIndex, int endIndex)
- startIndex 부터 endIndex 까지(endIndex를 포함하지 않음) 문자열을 반환한다.
String a = "1234567";
System.out.println(a.substring(1, 3));
==>>"23"
String a = "1234567";
System.out.println(a.substring(4, 5));
==>>"5"
String a = "1234567";
System.out.println(a.substring(0, 5));
==>>"12345"
피드 구독하기:
글 (Atom)