'안드로이드'에 해당되는 글 33건

  1. 안드로이드 개발 - 연락처 선택/정보 가져오기(ACTION_PICK) 4
  2. 안드로이드 개발 - 안드로이드 TextView 자동 링크걸기[Linkify, Autolink](인터넷, 이메일, 지도, 전화번호)
  3. [Android/JAVA] 자바 연산자(그리고, 또는, etc)를 사용하여 효과적으로 개발하기
  4. 안드로이드 개발 - R.drawable.변수 R.string.변수 사용하기 1
  5. 안드로이드 개발(자바개발 포함) - 이클립스 소스 코드가 지저분할때
  6. 안드로이드 개발 - 진저브레드(2.3) 이하 버전에서 리스트뷰 스크롤시 하얗거나 검게 변하는 문제 해결
  7. 안드로이드 앱 개발 - 배경을 연속된 패턴으로 바꾸기(android:background)
  8. 안드로이드 개발 - String.xml 문자열/정수(숫자) 변수 설정하기
  9. 안드로이드 개발 - String을 int로, int를 String으로 바꾸기
  10. 안드로이드폰 카메라 무음 설정하기 - 초점 소리까지 완전하게 없애기(무음이 완전히 되지 않는 경우) 24
흔히 카카오톡 연락처 공유처럼 앱 개발시에 사용자가 직접 번호를 입력하는 불편함을 줄이기 위해서 연락처 선택 화면을 띄워야 하는 경우가 있습니다.



안드로이드 개발 - 연락처 선택/정보 가져오기(ACTION_PICK)

1. 버튼등 OnClickListener등에 넣어 연락처 선택 화면이 나오게 합니다.
Intent intent = new Intent(Intent.ACTION_PICK);
 intent.setData(ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
         startActivityForResult(intent, 0);


2. 연락처 선택을 하면 결과값을 받아옵니다.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK)
{
Cursor cursor = getContentResolver().query(data.getData(), 
new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
ContactsContract.CommonDataKinds.Phone.NUMBER}, null, null, null);
cursor.moveToFirst();
                  name = cursor.getString(0);        //0은 이름을 얻어옵니다.
           number = cursor.getString(1);   //1은 번호를 받아옵니다.
            cursor.close();
}
super.onActivityResult(requestCode, resultCode, data);
} 



참고한 사이트 : 
http://chonggi7.tistory.com/46



도움이 되셨나요?
그럼 손가락을 눌러주세요:)
 
안드로이드에서 앱을 사용하다보면 인터넷 링크나, 전화번호 이메일 등 누르면 추가적인 액션을 할 수 있도록 링크가 걸어집니다.

저같은 경우도 TextView에 자동 링크를 어떻게 구현할까 고민하다가 다행이게도 자동 링크 기능이 안드로이드에 내장되어있다는 사실을 알게 되었습니다.


안드로이드 개발 - 안드로이드 TextView 자동 링크걸기[Linkify, Autolink](인터넷, 이메일, 지도, 전화번호)

Activity에서와 xml에서 자동 링크 설정을 정의할 수 있고 Linkify와 Autolink로 나뉩니다.

1. Activity(java)에서 자동링크 설정하기 - Linkify

사용 예제는 아래 내용과 같습니다.

==Example==

public class LinkifyActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TextView txtPhone1 = (TextView)findViewById(R.id.txtPhone1);
        Linkify.addLinks(txtPhone1, Linkify.PHONE_NUMBERS);
        
        TextView txtPhone2 = (TextView)findViewById(R.id.txtPhone2);
        Linkify.addLinks(txtPhone2, Linkify.PHONE_NUMBERS);
        
        TextView txtWeb = (TextView)findViewById(R.id.txtWeb);
        Linkify.addLinks(txtWeb, Linkify.WEB_URLS);
    }
}


 
이 외에도 Linkify의 자동 링크 설정 종류입니다.

모든연결    => Linkify.ALL

e-mail      => Linkify.EMAIL_ADDRESSES

주소         => Linkify.MAP_ADDRESSES

인터넷 URL => Linkify.WEB_URLS

전화번호    => Linkify.PHONE_NUMBERS

TextView를 정의하고 자신이 자동링크를 걸 링크 종류를 지정해주시면 됩니다. ALL 같은 경우에는 전체 링크를 말합니다.

자동 링크를 거는 것에 대해 변수가 있다면 이 방법을 사용하는 것을 권장합니다.

2. xml(Layout)에서 자동링크 설정하기 - AutoLink
  
반면에 xml TextView에서 손쉽게 자동링크 기능 옵션을 추가할 수 있습니다.
TextView를 Activity에서 생성하는것 또는 자동링크를 지정하는데에 변수가 없다면 이 방법을 추천드립니다.

예제 :
 <TextView
  android:id="@+id/txtAutoWeb"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:autoLink="web"
  android:text="http://tarks.net" />

 
  TextView에 android:autolink=""을 삽입하는 방법으로 자동링크 유형을 지정합니다.

자동링크 유형입니다. 자신에 알맞은 유형을 선택하여 TextView에 정의해주시면 됩니다.

NONE        => android:autoLink="none"

e-mail      => android:autoLink="email"

주소         => android:autoLink="map"

인터넷 URL => android:autoLink="web"

전화번호    => android:autoLink="phone"

모든연결    => android:autoLink="all"

참고한 사이트

http://blog.naver.com/PostView.nhn?blogId=ovter&logNo=135936941



이런 방법으로 한후 문자열 중에 링크가 있을때 자동링크처리가 되는걸 확인하실 수 있습니다.


도움이 되셨나요?
그럼 손가락을 눌러주세요:) 


단순한 어플리케이션을 만들때에는 굳이 사용할 필요가 없지만 논리적 연산을 많이 해야하거나, 조건이 많은 앱이라면 연산자가 필요할 때가 있습니다.

 저는 주로 이항, 관계, 동등, 논리 연산자를 많이 사용하고, 또 많이 사용됩니다.(아래참조)

다양한 연산자들

 

1. 산술 연산자(Arithmetic Operators)

 

산술 연산을 수행하는 연산자를 말하며, 다른 언어에서 사용되는 사칙 연산자와 기능 및 서식 형태가 큰 차이가 없다. 이러한 산술 연산자는 이항 연산자, 부호 연산자, 증감 연산자 등으로 구별된다.

 

 

이항 연산자(Binary Operators)

연산자

의 미

사용 예

+

덧셈 연산자(Additive operator)

a=b+c;

b와 c를 더한 값을 a에 대입

-

뺄셈 연산자(Subtraction operator)

a=b-c;

b에서 c를 뺀 값을 a에 대입

*

곱셈 연산자(Multiplication operator)

a=b*c;

b와 c를 곱한 값을 a에 대입

/

나눗셈 연산자(Division operator)

a=b/c;

b에서 c를 나눈 값을 a에 대입

%

나머지 연산자(Remainder operator)

a=b%c;

b에서 c를 나눈 나머지 값을 a에 대입

 

부호 연산자(Sign Operators)

연산자

의 미

사용 예

+

양수 연산자(Unary plus operator)

b = +a;

양수임을 의미

-

부호의 반전(Unary minus operator)

b = -a;

  <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?xml:namespace prefix = o />

 

증감 연산자(Increment/Decrement Operators)

연산자

의 미

사용 예

++

증가 연산자(increment operator)

a++; 또는 ++a;

a=a+1; 과동일

--

감소 연산자(decrement operator)

a--; 또는 --a;

a=a-1; 과동일

 

산술 연산자의 우선순위와 결합성

연산자 우선순위

연산자

결합성

-(단항), ++, --

우에서 좌로

*, /, %

좌에서 우로

+, -

좌에서 우로

=

우에서 좌로

         ※결합성이란 동일한 우선순위를 갖는 연산자들이 어느 방향으로 결합하는가를 결정

 

 

 

 

 

2. 관계 및 논리연산자

 

자바에서는 C/C++언어와는 다르게 모든 비교 및 논리 연산 식에 대한 결과는 참(true)이나 거짓(false)으로 처리한다.

 

 

관계 연산자(Relational operators)

연산자

의 미

사용 예

<

~ 보다 적다.

a < b

a가 b보다 적으면 true, 그렇지 않으면 false

<=

~ 보다 적거나 같다.

a <= b

a가 b보다 적거나 같으면 true, 그렇지 않으면 false

>

~ 보다 크다.

a > b

a가 b보다 크면 true, 그렇지 않으면 false

>=

~ 보다 크거나 같다.

a >= b

a가 b보다 크거나 같으면 true, 그렇지 않으면 false

 

동등 연산자(Equality operators)

연산자

의 미

사용 예

==

~ 와 같다.

a == b

a와 b가 같으면 true, 그렇지 않으면 false

!=

~ 와 같지 않다.

a != b

a와 b가 같지 않으면 true, 그렇지 않으면 false

 

논리 연산자(Conditional Operators)

연산자

의 미

사용 예

&&

AND(논리곱)

a && b

a와 b가 참이면 true, 그렇지 않으면 false

||

OR(논리합)

a || b

a 또는 b가 참이면 true, 그렇지 않으면 false

 

논리 부정 연산자(Logical complement operator)

연산자

의 미

사용 예

!

NOT(논리 부정)

!a

a가 거짓이면 true, 참이면 false

 

instanceof 연산자

객체명 instanceof 클래스명

객체명 instanceof 인터페이스명




3. 비트 단위 연산자(bitwise operators)

 

시스템 프로그램이나 게임 프로그램 등을 개발할 경우에는 각 비트들을 조작해야 하는 경우가 발생할 수 있다. 따라서 java는 각 비트에 접근하기 위해 비트 단위 연산자를 제공하며 비트 단위 연산자는 연산의 대상이 비트(bit)단위로 이루어지므로 먼저 연산 대상을 2진수로 변환하여 연산을 해야 한다.

또한 비트 단위 연산자는 피연산자로 double 또는 float 형을 제외한 산술 형 데이터를 취한다.

 

 

비트 단위 부정 연산자(Unary bitwise complement)

연산자

의 미

사용 예

~

해당 비트를 반전(0→1, 1→0)

b = ~a;

a값을 비트 단위로 반전시켜 b에 대입

 

비트 단위 논리 연산자

연산자

의 미

사용 예

&

비트 단위 AND

c = a & b;

a 와 b를 비트단위 AND 연산 후 c에 대입

|

비트 단위 OR

c = a | b;

a 와 b를 비트단위 OR 연산 후 c에 대입

^

비트 단위 Exclusive OR

c = a ^ b;

a 와 b를 비트단위 XOR 연산 후 c에 대입

■ 비트 단위 논리 연산자의 진리표

a

b

a & b

a | b

a ^ b

0

0

0

0

0

0

1

0

1

1

1

0

0

1

1

1

1

1

1

0

 

비트 단위 이동 연산자

연산자

의 미

사용 예

>>

산술적 우측 Shift 연산자

c = a >> b;

a를 2진수로 변환 후 b 비트만큼 우측으로 이동

(이동으로 생긴 왼쪽 자리는 MSB(부호)로 채움)

<<

산술적 좌측 Shift 연산자

c = a << b;

a를 2진수로 변환 후 b 비트만큼 좌측으로 이동

(이동으로 생긴 우측 자리는 0으로 채움)

>>>

논리적 우측 Shift 연산자

c = a >>> b;

a를 2진수로 변환 후 b 비트만큼 우측으로 이동

(이동으로 생긴 왼쪽 자리는 0으로 채움)

 

 

 

 

 

4. 대입 연산자(assignment operators)

 

대입 연산자 『=』는 그 좌우의 값이 서로 같다(equal)는 수학적인 의미가 아닌, 우측의 값을 좌측에 대입(assign)한다는 의미를 갖고 있다.

 

연산자

의 미

사용 예

=

우변의 값을 좌변에 대입

a=b;

 

+=

좌변과 우변의 값을 더해서 좌변에 대입

a+=b;

a=a+b; 와 동일

-=

좌변에서 우변의 값을 뺀 후 좌변에 대입

a-=b;

a=a-b; 와 동일

*=

좌변과 우변의 값을 곱해서 좌변에 대입

a*=b;

a=a*b; 와 동일

/=

좌변에서 우변의 값을 나눈 후 좌변에 대입

a/=b;

a=a/b; 와 동일

%=

좌변에서 우변의 값을 나눈 나머지를 좌변에 대입

a%=b;

a=a%b; 와 동일

<<=

좌변 값을 우변 수만큼 비트단위로 좌측 이동한 값을 좌변에 대입

a<<=b;

a=a<<b; 와 동일

>>=

좌변 값을 우변 수만큼 비트단위로 우측 이동한 값을 좌변에 대입(빈 공간은 MSB로 채움)

a>>=b;

a=a>>b; 와 동일

>>>=

좌변 값을 우변 수만큼 비트단위로 우측 이동한 값을 좌변에 대입(빈 공간은 0으로 채움)

a>>>=b;

a=a>>>b; 와 동일

&=

좌변과 우변의 값을 비트단위 AND 연산 후에 좌변에 대입

a&=b;

a=a&b; 와 동일

^=

좌변과 우변의 값을 비트단위 배타적 OR 연산 후에 좌변에 대입

a^=b;

a=a^b; 와 동일

|=

좌변과 우변의 값을 비트단위 OR 연산 후에 좌변에 대입

a|=b;

a=a|b; 와 동일

 

 

조건 연산자(Conditional operator)

 

조건 연산자는 삼항 연산자 또는 선택 연산자라 하며, 자바 언어 중 유일하게 피연산자(오퍼랜드)가 3개 필요한 연산자이다.

 

변수 = 조건식 ? 값1 : 값2;

조건식을 판단하여 조건식이 참이면 『값 1』을, 조건식이 거짓이면 『값 2』를 갖는다.

 

■ 사용 예

max = x > y ? x : y;

x 변수의 값이 y 변수의 값보다 크면 x를, 그렇지 않으면 y를 max에 대입한다.

일부 출처 : http://goldenpig.egloos.com/3032166 


도움이 되셨나요?
그럼 손가락을 눌러주세요:)
 


안드로이드 자바에서는 이미지나 문자열 리소스를 불러올때 R.drawable. 이나 R.string 을 사용합니다.
그런데 이미지나 문자열을 불러올때 이미지 이름이나 문자열 이름을 달리하여 변수로 사용하고 싶을 때가 있습니다.

예를들면 R.drawable.t_1 R.drawable. t_2  R.drawable.t_3 와 같이 규칙성있는 이미지같은걸 말합니다.

Drawable 그림파일 변수


    tmpSign = "n_"+ 변수;



// 가변 아이콘을 호출할 경우

int lid = this.getResources().getIdentifier(tmpSign, "drawable", this.getPackageName());

((ImageView)v.findViewById(R.id.iconView)).setImageResource(lid);


// 가변 아이콘을 호출할 경우

int lid = this.getResources().getIdentifier(tmpSign, "string", this.getPackageName());

String str = this.getString(lid); 혹은 this.getResouces().getString(lid); 

String 문자열 변수

 
int lid = getResources().getIdentifier("변수", "string", getPackageName());

tv_nation.setText( lid );    

그냥 lid를 사용하면 R.java에 저장되어있는 숫자 값으로 나옵니다.
따라서 getString(lid)로 표현해줘야만 문자열이 나옵니다.


도움이 되셨나요?
그럼 손가락을 눌러주세요:) 

자고로 깔끔하고 정돈된 소스코드는 개발의 속도와 효율성이 아주 높아질 뿐만 아니라 개발의 재미를 더 잘 느낄 수 있습니다.
저는 주로 안드로이드 앱 개발을 위해 이클립스를 사용하는데 작업하다보면 주석처리를 했음에도 불구하고 줄처리가 점점 지저분해짐을 느끼고 있었습니다.

 


안드로이드 개발(자바개발 포함) - 이클립스 소스 코드가 지저분할때

더욱 확실한 소스 코드 정리 방법이 없나 찾아보다가 이클립스 자체에서 소스코드 정리를 해주는 단축키가 있다는 것을 알게 되었습니다.

1. Windows의 경우
Ctrl + Shift + F

2. Mac의 경우
Command + Shift + F
위와 같은 방법으로 할시 소스코드의 줄정렬이 깔끔하게 자동으로 정리되는것을 볼 수 있습니다.




도움이 되셨나요?
그럼 손가락을 눌러주세요:) 

안드로이드 진저브레드(2.3)의 상위 버전인 아이스크림 샌드위치나 젤리빈에서는 이런 현상이 없는데 유독 진저브레드 이하 버전에서는 리스트를 스크롤할 시에 배경이 보이지 않고 하얗거나 검게 변하는 현상이 있습니다.

이런 현상이 있는 이유는 스크롤 속도 최적화를 위해 있는 것인데, 오히려 스크롤이 부자연스러울 뿐더러 보기도 싫습니다.


안드로이드 개발 - 진저브레드(2.3) 이하 버전에서 리스트뷰 스크롤시 하얗거나 검게 변하는 문제 해결

1. 리스트뷰가 정의되어있는 레이아웃에 아래 구분을 추가해줍니다.


   android:cacheColorHint="#00000000" 

예시)
 
<ListView 

    android:id="@android:id/list"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:cacheColorHint="#00000000" 

    android:paddingLeft="@dimen/list_padding"

    android:paddingRight="@dimen/list_padding" />



2. 이 구문은 스크롤 캐시를 투명하게 함으로써 뒤 배경이 보이게 하는 것이므로, 이젠 진저브레드 이하의 운영체제에서도 잘 나오는 것을 확인할 수 있습니다.




도움이 되었나요?
그럼 손가락을 눌러주세요:) 
안드로이드에서 xml 에서 android:background를 통해 배경화면을 변경할 수 있습니다. 이런 경우에는 배경으로 지정된 사진을 화면에 맞게 늘여서 보여줍니다. 이게 그냥 사진이라면 상관 없지만 패턴같은 경우에는 적합하지 않습니다.

안드로이드 앱 개발 - 배경을 연속된 패턴으로 바꾸기(android:background)
 
1. drawable 폴더에 패턴 배경으로 쓸 이미지를 넣어 줍니다.(ex. drawable-xhdpi/back.png)


2. drawable 폴더에 새로운 background.xml 파일을 만들고 xml에다가 아래와 같은 구문을 넣어 줍니다.


<?xml version="1.0" encoding="UTF-8"?>

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"

    android:src="@drawable/back" <-- 파일 이름

    android:tileMode="repeat"

/>


 
3. 배경을 지정할 래이아웃 xml에서 맨 위의 레이아웃 정의하는 부분에 아래 구문을 추가해줍니다.

  android:background="@drawable/background"  

예시 ) 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:background="@drawable/background"

    android:layout_height="match_parent" > 


4. 패턴 배경이 적용된 것을 확인할 수 있습니다.:)


도움이 되셨나요?
그럼 손가락을 눌러주세요:) 
안드로이드 개발할시 주로 문자열을 string.xml 에서 관리합니다. 그런데 이 문자열 사이에 값이 달라지는 변수를 두고 싶을때가 있습니다.


(저 알림창에서의 변수는 10입니다.)

String.xml 문자열/정수 변수 설정하기 - 변수 설정하기
 

"[변수A]가 [변수B]에게 인사합니다." 할때 "변수A, B" 부분이 달라지게 하고 싶을때 :

String.xml
<string name="hello">%1$s가 %2$s에게 인사합니다.</string> 

 %1$s : string  (문자열일시)     %1$d : int   (숫자일시)


JAVA
그리고 자바에서는 아래와 같이 코드를 해줍니다.
Resources res = getResources();
String text = String.format(res.getString(R.string.hello), "아이", "선생님"); 




결과값 -> 아이가 선생님에게 인사합니다.




 
영어권에서 복수형 단어 처리하기

영문으로 할 때에는 여러개일 경우에는 s가 붙는 거처럼 복수형 형태가 되는 경우가 있습니다.

String.xml

  <plurals name="file">
        
<item quantity="one">One file found.</item>
        
<item quantity="other">%d files found.</item>
    
</plurals>
 

%s : string   (문자열일경우)    %d : int    (숫자일경우)



JAVA
String.format(getResources().getQuantityString(R.plurals.file, 2), 4);
출력-> 4 files found.
String.format(getResources().getQuantityString(R.plurals.file, 1), 4);
출력-> One file found. 









도움이 되셨나요?

그럼 손가락을 눌러주세요:)
 

 
문자열인 String과 정수를 나타내는 int를 서로 바꿔야할 때가 있습니다.
아래 코드는 서로 유형을 바꿔주는 코드입니다.

String -> int
 
      int numInt = Integer.parseInt(numStr);
        System.out.println(numInt);


Int -> String

     String numStr2 = String.valueOf(numInt);
        System.out.println(numStr2);
 


도움이 되셨나요?
그럼 손가락을 눌러주세요:)
  
제가 저번에 올린 안드로이드폰 카메라 무음 설정하기(http://jhrun.tistory.com/104) 의 방법은 저는 젤리빈으로 업그레이드하면서 찍는 소리는 나지 않으나 셔터소리가 나 제대로 무음이 되지 않습니다.



안드로이드 카메라 무음 설정하기 - Build.prop을 건드려 무음 설정하기

주의!!! 루팅을 통한 모든 시스템 변경 활동은 예상치 못한 오류(벽돌)을 감수하실 수 있어야 합니다.

먼저 아래 링크의 방법대로 Build.prop을 수정해야지만 일단 카메라 소리가 나지 않습니다.

 
http://jhrun.tistory.com/104


안드로이드 카메라 무음 설정하기 - 초점 소리까지 완전히 없애기

위와 같은 방법으로 했는데도 완전히 소리가 사라지지 않고 초점맞출때 소리가 나는 경우가 있습니다.
이럴 경우에는 아래와 같은 방법으로 하면 완전히 제거할 수 있습니다.

1. Root Explorer 같은 어플로 /System/csc 폴더에 들어가준후 상단의 마운트 R/W를 눌러 마운트해주세요.



2. feature.xml을 꾹 누른 후 '텍스트 편집기로 열기'를 눌러줍니다.


3. 아래와 같은 항목을 찾아 false부분을 true로 바꿔 입력한 뒤 메뉴 -> 변경 사항 저장을 눌러줍니다.
 

 
<CscFeature_Camera_ShutterSoundMenu>false</CscFeature_Camera_ShutterSoundMenu> 

 




4. 재부팅후 카메라앱에서 설정 -> 촬영음에서 소리를 켜고 끌 수 있습니다.
 





위 방법으로 모두 시도했는데 안된다면 시도해볼 수 있는 방법

1. /system/build.prop에서 ro.camera.sound.forced=1을 ro.camera.sound.forced=0으로 바꾼 후 재부팅.
 

도움이 되셨나요?
그럼 손가락을 눌러주세요:)