본문 바로가기
Development/Free Topic

안드로이드 여러가지 팁

by IMCOMKING 2014. 6. 24.

- Logcat이 죽어서, adb를 재실행하기


C:\adt-bundle-windows-x86_64-20140321\sdk\platform-tools 경로에서 커맨드창을 열고

adb kill-server  // 종료

adb devices   // 실행


- SimpleDateFormat 사용법

String timeStamp = new SimpleDateFormat("yyyyMMdd_HH:mm:ss.SSS").format(new Date());

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html


- File 생성하기

http://arabiannight.tistory.com/47


- 경로 얻어오기

String externalPath = Environment.getExternalStorageDirectory()+ File.separator + "DCIM/Camera/test.jpg";


- 이클립스에서 새로 만들어 설치한 앱이 메뉴 아이콘에 안 뜰 때


<activity

   android:label="@string/app_name"

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

   android:name="com.sagamore.rd.activity.MainActivity" 

   android:configChanges="orientation|keyboard|screenSize"

   android:screenOrientation="sensorLandscape"

   android:launchMode="singleTop">

   

   <intent-filter >

       <action android:name="android.intent.action.MAIN" />

       <category android:name="android.intent.category.LAUNCHER" />

   </intent-filter> 

</activity>



- 액티비티 flag
액티비티를 1개만 생성한다 -> 싱글태스크 or 싱글 인스턴스(차이는 새로 실행한 액티비티를 따로 스택에 쌓을지, 내위에 쌓을지)

액티비티를 여러개 생성한다 -> 싱글 탑 or 클리어 탑

http://darksilber.tistory.com/entry/ACTIVITY-FLAG-%EC%86%8D%EC%84%B1


- 패키지 명으로 intent 를 주어 앱 실행하기

Intent intent = getPackageManager().getLaunchIntentForPackage( " 패키지 이름" );
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
startActivity(intent);

(참고로 설치된 앱의 패키지명을 알고 싶으면, 구글 스토어에서 package name viewer를 쓰면됨)

http://www.androidside.com/bbs/board.php?bo_table=b49&wr_id=84833


- 레이아웃에서 percentage 사용하기
LinearLayout 안에 있는 View에서, layout_width = 0 dp로두고, layout_weight = ".50" 이렇게하면 width에 대해 절반의 비율을 할당함.
단, height와 width에대해 동시에 weight를 줄 수는 없다. (0 dp로 된 쪽에만 웨이트가 적용되고, 0dp는 한군데만 있어야함)
weight_sum을 지정해야 제대로 될 때도 있다.

http://www.androidpub.com/1507297


- ScrollView 사용시 주의사항

반드시 fillViewPort="true"로 지정해주어야 일반적으로 원하는 결과가 나온다

http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-%EC%8A%A4%ED%81%AC%EB%A1%A4%EB%B7%B0ScrollView-%EC%82%AC%EC%9A%A9%EB%B2%95



또한 스크롤 뷰 안에서 리스트뷰를 사용하면 리스트뷰의 스크롤이 안되는데,

http://88oy.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-ScrollView%EC%95%88%EC%97%90-ListView-%EC%8A%A4%ED%81%AC%EB%A1%A4%ED%95%98%EA%B8%B0


를 따라하면 된다


레이아웃 파라미터 사용하기

이걸 사용하면 xml없이 레이아웃 및 View를 만들어서 사용가능하다.(setContents가 불가능할 때 유용함.)

http://tjandroid.blogspot.kr/2011/06/setlayoutparams.html



- 카메라 Preview 없이 찍기

아래 빈 SurfaceView를 만들어주는 것으로 매우 간단하지만, 아쉽게 안되는 기종이 많이 있다. 구글 글래스는 안된다.

http://cell0907.blogspot.kr/2014/01/android-camera-capture-without.html

http://handycodeworks.com/?p=19


아래 방법은 SurfaceView를 매우 작은 사이즈로 만들어주는것. 그러나 예시처럼 0dip는 안되고 1dip는 된다.

http://www.41post.com/3794/programming/android-take-a-picture-without-displaying-a-preview


그래서 결국 Service를 이용해 백그라운드로 촬영하는 방식을 사용하였다.


- 구글 글래스 Video 촬영

permission에 주의.. permission 에러가 안뜨고 전혀 연관성이 없는 에러가 떠서 발견하기 매우 힘들다.


<uses-feature android:name="android.hardware.camera"  android:required="true" />

<uses-feature android:name="android.hardware.camera.autofocus"/>

<uses-feature android:name="android.hardware.microphone"/>

    <uses-permission android:name="android.permission.CAMERA"/>

    <uses-permission android:name="android.permission.RECORD_VIDEO"/>

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

    <uses-permission android:name="android.permission.STORAGE"/>

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>


또한..

https://code.google.com/p/google-glass-api/issues/detail?id=578

이글의 맨 아래 댓글 처럼

	        recorder.setCamera(camera);
		recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
		recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
                recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_720P));
		recorder.setOutputFile(videoFile);
		recorder.setPreviewDisplay(surfaceHolder.getSurface());

반드시 setProfile을 사용해야한다... 구글 글래스에서 지원하는 포멧에 맞게 촬영해야만 start failed : -19에러가 뜨지 않는다...

또한...

http://stackoverflow.com/questions/25038828/mediarecorder-not-working-anymore-on-new-google-glass-firmware-xe19-1-media-se

이글의 맨아래 댓글 처럼

  Camera.Parameters params = mCamera.getParameters();

       params.setRecordingHint(true);

       mCamera.setParameters(params);


setRecordingHint를 사용해야만 media server died라는 에러가 뜨지 않는다...


정말 구글 글래스 비디오 촬영은 개발하기가 까다롭다.




따라서 완성한 구글 글래스에서 background로 비디오 촬영 혹은 사진 촬영(3초에 한번)을 해주는 소스를 공개한다.

Video capture.zip


http://developer.android.com/reference/android/media/MediaPlayer.html

http://developer.android.com/guide/topics/media/camera.html

http://blog.naver.com/PostView.nhn?blogId=windheim&logNo=90103064530

----


apk 파일 리버싱, 디컴파일

dex2jar 를 이용해서 jar로 바꾼다음, 뷰어로 보면서 리버싱.

http://blog.naver.com/PostView.nhn?blogId=man8408&logNo=110111707630



'Development > Free Topic' 카테고리의 다른 글

안드로이드 Thread 사용하기  (0) 2014.10.05
RESTFUL API  (0) 2014.07.22
Java, 클래스간 변수 공유  (0) 2014.06.19
안드로이드 DB, SQLite  (0) 2014.06.19
Excel, Spread Sheet(google), VBA  (0) 2014.06.17

댓글