안드로이드 팁

from Develop/Android 2010. 11. 11. 17:30
개발중에 메모해둔 팁/힌트입니다.
한참을 헤매다가 때로는 3일에 1개 만들기도 하고, 하루에 1개 겨우 구현하기도 했던 
검색력 향상(?)를 꾀한 개발.
50개가 되었기에 포스팅을 걸어둡니다.
또 50개 모으면 2탄을;
(요약 부분이 있는데 잘려서 입력되네..)

번호

제목

출처

요약

1

이미지와 텍스트가 같이 들어간 버튼 만들기

http://www.androidpub.com/15765

<Button
android:layout_width="fill_parent"
android:layout_width="wrap_content"
android:drawableLeft="@drawable/ic_settings"
android:drawablePadding="4dp"
android:text="Settings"
/>
 
Button button = new Button(mContext);
button.setText("Close");
Drawable close = Drawable.createFromPath("/data/icon/image.png");
close.setBounds(0, 0, close.getIntrinsicWidth(), close.getIntrinsicHeight());

button.setCompoundDrawables(close, null, null, null);

2

버튼 색깔 바꾸기

http://stackoverflow.com/questions/1521640/standard-android-button-with-a-different-color

 

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
    <item android:drawable="@drawable/red_button_rest" />
</selector>

3

전체화면 사용하기(Status bar, Title bar 숨기기)

http://www.androidpub.com/4710

 

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

android:theme="@android:style/Theme.NoTitleBar"

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

 WindowManager.LayoutParams.FLAG_FULLSCREEN);

 

4

ImageButton의 투명 효과 사용하기

http://joywoni.egloos.com/2847047

 

android:background="#a0000000" 를 설정하면 배경이 투명해지므로 버튼 모양을 안봐도 된다.

5

Android 정리문서

http://sgap.springnote.com/pages/5076381

 

SurfaceView와 SurfaceHolder.Callback, thread

6

네이티브 안드로이드 개발 관련 블로그

http://hybridego.net/

 

 

7

안드로이드 개발 각종 예제 소스

http://www.androidpeople.com/2010/01/

 

 

8

메뉴별 이미지 처리

http://stackoverflow.com/questions/2065430/fixed-android-detecting-focus-pressed-color

 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:drawable="@android:drawable/btn_default" ></item>
    <item android:state_focused="true"
        android:drawable="@android:drawable/btn_default" ></item>
    <item android:drawable="@drawable/btn_default_red" ></item>
</selector>

9

객체 Style 처리

http://www.anddev.org/viewtopic.php?p=37330

 

 

10

Button Highlight

http://www.androidpeople.com/category/android-tutorial/

 

 

11

SurfaceView

http://vissel.tistory.com/92

 

 

12

android:configChanges

http://www.androidpub.com/52338

 

android:configChanges="orientation"

onConfigurationChanged()

13

전원관리

http://samse.tistory.com/entry/AlarmManager-PowerManager

 

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);

 PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");

 wl.acquire();

   ..screen will stay on during this section..

 wl.release();

14

하드웨어 콘트롤 관련PDF 문서

http://mikechen.com/classes/2009-11-27%20NTU%20Mobile%20Phone%20Programming%20-%20Mike%20Chen%20-%2010%20-%20Security,%20Camera,%20Audio%20and%20Video.pdf

 

 

15

unique device ID

고유값 가져오기

http://developer.android.com/reference/android/telephony/TelephonyManager.html#getDeviceId%28%29

 

TelephonyManager mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

String imei = mTelephonyMgr.getDeviceId();

16

안드로이드 네이티브 라이브러리Ⅰ

http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=34284

 

[다른블로그] http://infodev.tistory.com/322

17

Introduction android

http://yotteum.tistory.com/entry/Introduction-Android

 

안드로이드 소개

바인딩 설명

18

안드로이드 - 버튼 OnClickListener 인터페이스 구현

http://woosa7.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EB%B2%84%ED%8A%BC-OnClickListener-%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4-%EA%B5%AC%ED%98%84

http://www.cyworld.com/kkjw1801/3222534

 

 

19

Android - Change Tab Background

http://escomic.net/218

 

TabWidget에서 추가되는 Tab의 Background변경하기

Tab마다 View를 얻어와서 직접 BackgroundDrawable을 지정하고

아래 막대부분은 reflection을 이용하여 꽁수로 바꿔치기 한다

 

tab_indicator.xml, tab_bar_left.xml, tab_bar_right.xml 내용은 <selector>로 정의

20

KH5200 드라이버 설치

http://kil.imradriss.co.cc:8000/tc/30

 

 

21

DrawableTop 이미지 변경하기

http://www.androidpub.com/10154

 

보기 1 ================================================
Drawable img = context.getResources().getDrawable(R.drawable.filename);
Drawable img2 = img ;

보기 2 ================================================
Drawable img = context.getResources().getDrawable(R.drawable.filename);
Drawable img2 = context.getResources().getDrawable(R.drawable.filename);

보 기
 3 ================================================
Drawable img = context.getResources().getDrawable(R.drawable.filename);
Drawable img2 = context.getResources().getDrawable(R.drawable.filename2);
================================================

22

Layout 사이즈 동적변경

http://www.androidpub.com/40481

http://gall.dcinside.com/list.php?id=accident2&no=1195485

LinearLayout ll = (LinearLayout)findViewById(R.id.write_LinearLayout);

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,

400);  // 400 이라는 높이를 지정

ll.setLayoutParams(params);

23

Android UI 개발기: XML 안쓰고 UI 코딩하기

http://xrath.com/2009/11/android-ui-%EA%B0%9C%EB%B0%9C%EA%B8%B0-xml-%EC%95%88%EC%93%B0%EA%B3%A0-ui-%EC%BD%94%EB%94%A9%ED%95%98%EA%B8%B0/

 

 

24

전화상태 변화감지 리스너

PhoneStateListener 예제

http://www.kandroid.org/board/board.php?board=AndroidTechQnA&page=124&command=body&no=432

 

MyPhoneStateListener phoneListener=new MyPhoneStateListener();

TelephonyManager telephonyManager  =(TelephonyManager)getSystemService(TELEPHONY_SERVICE);

telephonyManager.listen(phoneListener,PhoneStateListener.LISTEN_CALL_STATE);

 

public class MyPhoneStateListener extends PhoneStateListener {...}

25

안드로이드 하드웨어관련 자료(통화,폰상태,네트워크,카메라,센서)

http://gtko.springnote.com/pages/5396297

http://developer.android.com/reference/android/content/Intent.html

http://developer.android.com/reference/android/net/ConnectivityManager.html

android.net.conn.CONNECTIVITY_CHANGE

 

26

sms 수신해서 요약내용 보여주기

http://www.anddev.org/recognize-react_on_incoming_sms-t295.html

http://flytop.tistory.com/62

android.provider.Telephony.SMS_RECEIVED

 

// SMS 수신 감지 등록

IntentFilter smsRcvFilter = new IntentFilter(CSmsReceiver .ACTION);

smsReceiver =  new CSmsReceiver();

registerReceiver(smsReceiver, smsRcvFilter);

 

//if(smsReceiver != null) {

//    unregisterReceiver(smsReceiver);

//}

 

<!-- SMS Broadcast Receiver 등록 -->

<receiver android:name=".common.CSmsReceiver">

<intent-filter>

<action android:name="android.provider.Telephony.SMS_RECEIVED" />

</intent-filter>

</receiver>

27

BroadcastReceiver XML설정하기

http://www.androidpub.com/186727

<receiver android:name="리시버클래스" android:enabled="true">
<intent-filter><action android:name="android.net.conn.CONNECTIVITY_CHANGE" /></intent-filter>
</receiver>

28

각종 Management 클래스

http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&page=10&wr_id=34565

29

Dialog 구조 분석

(아이콘,텍스트 위치등)

http://sgap.springnote.com/pages/5235569

 

30

SMS 수신시 Toast 메시지 출력

http://www.androidpub.com/138352

 

Intent sendIntent = new Intent(Intent.ACTION_SEND); sendIntent.addCategory("android.intent.category.DEFAULT");      

sendIntent.putExtra("address", PhoneNumberUtils.formatNumber(phoneNumber));

sendIntent.putExtra("exit_on_sent"true);

sendIntent.putExtra("subject""TEST MMS");

sendIntent.putExtra("sms_body""MMS 테스트입니다.");

context.startActivity(sendIntent);

31

Broadcast Receiver :네트워크상태 체크

http://www.anddev.org/viewtopic.php?p=32088

 

OnReceive 메소드 내에서..

ConnectivityManager connec=  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

if(connec.getNetworkInfo(0).getState()==NetworkInfo.State.CONNECTED||connec.getNetworkInfo(1).getState()==NetworkInfo.State.CONNECTING ) {

text.setText("hey your online!!!");

//Do something in here when we are connected

}

elseif(connec.getNetworkInfo(0).getState()== NetworkInfo.State.DISCONNECTED||connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED ) {

text.setText("Look your not online");

}

32

안드로이드 API기능 설명

http://www.jopenbusiness.com/mediawiki/index.php/Android

 

 

33

Actions for BroadcastReceiver

http://www.dearsoft.org/tag/broadcastreceiver/

 

 

34

Layout.out.xml 생성되는 문제

http://www.androidpub.com/101585

main.out.xml 파일은 삭제해 주세효~
그건 xml 을 펼쳐둔 상태에서 Run 을 하면 만들어 지는데, 그럼 제대로 실행이 되지 않아효~

35

Multi Touch

http://www.mentby.com/naya/multitouch-support-in-android-20.html

http://gist.github.com/324166

2.0 부터 지원

36

ScrollView 스크롤 하단으로 내리기

http://www.anddev.org/viewtopic.php?p=36823

sv.post(new Runnable() {

             public void run() {

                           sv.fullScroll(ScrollView.FOCUS_DOWN);

             }

});

37

Timer 만들기

http://developer.android.com/intl/de/resources/articles/timed-ui-updates.html

http://www.developer.com/java/ent/print.php/3589961

http://www.androidpub.com/4374

http://blog.inculab.net/25

 

38

Logcat 동작안하는 에러 발생시 처리

(Could not create the view: For input string: "")

http://www.mail-archive.com/android-developers@googlegroups.com/msg60683.html

hide details Aug 18
 
I have had the same problem.
 
The logcat view crashes after I inserted a filter containing a ":" in
the filtername.
I solved the problem by changing the settings in the file
".metadata/.plugins/org.eclipse.core.runtime/.settings/
com.android.ide.eclipse.ddms.prefs" placed in the workspace of
eclipse.
com.android.ide.eclipse.ddms.logcat.filters= was the key of the fault
setting.

 

39

SSL 인증서 등록하기

http://www.java2go.net/blog/197?TSSESSION=1202a1a23fa67bae15ce3ab15a5a0cea

http://www.virgo81.net/70

http://crazybob.org/2010/02/android-trusting-ssl-certificates.html

http://www.bouncycastle.org/latest_releases.html

keytool -import -keystore cacerts -file C:\cert\TrialRootCA.cer -alias afcert

40

Signing By Private Key

http://www.devx.com/wireless/Article/39972/1954

 

41

영상 녹화하기

http://www.anddev.org/viewtopic.php?p=24723#24723

 

42

SurfaceView 의 이해

http://androidhuman.tistory.com/entry/카메라를-이용하자-SurfaceView에-대한-이해

 

43

안드로이드 JAVA 소스

http://anddev.tistory.com/77

http://anddev.tistory.com/50

http://anddev.tistory.com/42

{SDK_LOCATION}/platforms/1.5/sources

44

SSL 인증서 우회하기

http://www.experts-exchange.com/Programming/Languages/Java/Q_23063074.html

http://7bee.j2ee.us/blog/2008/03/28/1206704820000.html

 

 

45

JAVA SSL 관련 공식문서

http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html

http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CreateKeystore

http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html#CodeExamples

http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/samples/sockets/client/SSLSocketClient.java

 

46

SSL 인증서 증명에러 해결하기

http://blog.naver.com/PostView.nhn?blogId=fidelis98&logNo=140103425406&redirect=Dlog&widgetTypeCall=true

http://code.google.com/p/android/issues/detail?id=1946

http://developer.android.com/intl/de/reference/javax/net/ssl/TrustManager.html

http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/200906.mbox/

http://www.exampledepot.com/egs/javax.net.ssl/GetCert.html?l=rel

http://www.android-portal.com/2007/12/20/secure-server-socket-with-tlsssl-on-android-fails/

http://www.exampledepot.com/egs/javax.net.ssl/TrustAll.html?

http://blog.keduall.co.kr/lsb76/entry/자바-SSL-접속-오류

해결방법http://www.exampledepot.com/egs/javax.net.ssl/TrustAll.html

 

// Create a trust manager that does not validate certificate chains

TrustManager[] trustAllCerts = new TrustManager[]{

   new X509TrustManager() {

        public java.security.cert.X509Certificate[] getAcceptedIssuers() {

             return null;

        }

        public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) {

        }

        public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) {

        }

    }

};

47

안드로이드 Service 에서 Activity 를 실행하는 방법 

http://blog.naver.com/huewu/110084868855

 

Intent i = new Intent(this, ServiceTest.class);

PendingIntent p = PendingIntent.getActivity(this, 0, i, 0);

try {

           p.send();

} catch (CanceledException e) {

           e.printStackTrace();

}

 

48

안드로이드 이미지(사진) 불러오기

http://shinluckyarchive.tistory.com/469

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

 

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
...
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;  
Bitmap src = BitmapFactory.decodeFile(fileListSDCard[i], options);
Bitmap resized = Bitmap.createScaledBitmap(src, 100, 100, true);

 

49

SSL 인증키 무조건 우회하기

http://groups.google.com/group/android-developers/browse_thread/thread/62d856cdcfa9f16e

public class _FakeX509TrustManager implements X509TrustManager { 
        private static TrustManager[] trustManagers; 
        private static final X509Certificate[] _AcceptedIssuers = new 
X509Certificate[] {};
 
        @Override 
        public void checkClientTrusted(X509Certificate[] chain, String 
authType) throws CertificateException {
 
        } 
        @Override 
        public void checkServerTrusted(X509Certificate[] chain, String 
authType) throws CertificateException {
 
        } 
        public boolean isClientTrusted(X509Certificate[] chain) { 
                return true; 
        } 
        public boolean isServerTrusted(X509Certificate[] chain) { 
                return true; 
        } 
        @Override 
        public X509Certificate[] getAcceptedIssuers() { 
                return _AcceptedIssuers; 
        } 
        public static void allowAllSSL() { 
                HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() 
             {
 
                        @Override 
                        public boolean verify(String hostname, SSLSession session) { 
                                return true; 
                        } 
                }); 
                SSLContext context = null; 
                if (trustManagers == null) { 
                        trustManagers = new TrustManager[] { new _FakeX509TrustManager() }; 
                } 
                try { 
                        context = SSLContext.getInstance("TLS"); 
                        context.init(null, trustManagers, new SecureRandom()); 
                } catch (NoSuchAlgorithmException e) { 
                        e.printStackTrace(); 
                } catch (KeyManagementException e) { 
                        e.printStackTrace(); 
                } 
                  
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); 
        } 
}

50

효과음 관련 자료(Creating Sound Effects in Android)

http://www.androidpub.com/257540#4

public void playSound(int index) {
               float streamCurrent = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);  
               float streamMax = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);      
               float streamVolume = streamCurrent / streamMax;   
               mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f); 
}

 

 http://miksnug.pe.kr/26

,
,

RtlVolumeDeviceToDosName() - 마운트된 디스크의 드라이브 문자 구하기

|
StorageStackDevice를 이용하여 드라이브 문자 구하기

참고로 첫번째 인자로 전달되는 VolumeDeviceObject는 마운트된 볼륨과 관련된 Filesystem DeviceObject를 대상으로 IoGetDiskDeviceObject()를 호출하여 구할 수 있다.

RtlVolumeDeviceToDosName

The RtlVolumeDeviceToDosName routine is obsolete for Windows XP and later. Use IoVolumeDeviceToDosName instead.

RtlVolumeDeviceToDosName returns the MS-DOS path for a specified device object that represents a file system volume.

NTSTATUS
  RtlVolumeDeviceToDosName(
    IN  PVOID  VolumeDeviceObject,
    OUT PUNICODE_STRING  DosName
    );

Parameters

VolumeDeviceObject
Pointer to a device object that represents a volume device object created by a storage class driver.
DosName
Pointer to a Unicode string containing the MS-DOS path of the volume device object specified by VolumeDeviceObject.

Return Value

RtlVolumeDeviceToDosName returns STATUS_SUCCESS or an appropriate error status.

Comments

The behavior of this routine is identical to that of IoVolumeDeviceToDosName. For more information about how to use this routine, see IoVolumeDeviceToDosName.

Drivers that must work on older NT-based operating systems may use this routine. Drivers written for Windows XP and later must use IoVolumeDeviceToDosName instead.

Requirements

Versions: Obsolete for Microsoft Windows XP and later. Use IoVolumeDeviceToDosName instead.

Headers: Declared in ntddk.h. Include ntddk.h.


,