Nano Blog - 오병우

안드로이드도 BLE를 제공하네요. 


'프로그래밍 > Android 프로그래밍' 카테고리의 다른 글

[Android] AsyncTask 예제  (0) 2014.08.14
[Android] List 예제  (0) 2014.08.13
[Android] MIDI 프로그래밍  (1) 2014.06.24
[Android] Music Synthesizer  (0) 2014.06.24
[Android] Serial 통신 (RS-232C)  (0) 2014.06.12

[Update] 2015년의 Android API23 Marshmallow에서 MIDI API를 제공하고 있으므로 MIDI Device에 연결하거나 노트를 재생하시려는 분들에게 이 글은 큰 의미가 없을 것 같습니다. 

대신 최신 블로그 글을 참조해 주십시오.

http://bwoh.tistory.com/89


---------------------------------------------------------------------------------

실제로 미디를 사용한 프로그램(시퀀서, 건반, 기타 등 음악 앱이나 게임 앱)을 만들기 위해서는 JetPlayer가 답으로 생각된다.


C:\adt-bundle-windows-x86_64-20140321\sdk\platforms\android-3\samples\JetBoy


ADT (Android Developer Tools) 깔고 나서 sdk 디렉토리에 보면 JetBoy라는 JetPlayer를 사용하는 샘플 앱이 있다. (밑줄 친 앞부분은 버전과 각자 설치 환경에 따라 달라질 수 있음)


이걸 분석해 보면 JetPlayer를 사용할 수 있을 듯...


다음 디렉토리에 있는 JetCreator를 사용하여 MIDI 노트를 사용하는 JET 파일을 만들고 그 파일을 앱에서 활용한다.


C:\adt-bundle-windows-x86_64-20140321\sdk\tools\Jet


JetCreator를 사용하려면 Python을 깔아야 한다.



Android 공식 API Guide는 아래 링크로...


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



코드 내에서 MIDI 노트를 바로 플레이할 수 있는 기능이 있는지 모르겠다. 아시는 분은 댓글 달아 주시길...



--------------------------------


MIDI File 생성

http://kevinboone.net/javamidi.html


------------------------------------


Java Sound FAQ

http://www.jsresources.org/faq_midi.html


Java Sound API

http://docs.oracle.com/javase/1.5.0/docs/guide/sound/programmer_guide/


--------------------------------------


CodeGuru에서 MIDI 검색 (Windows용 MCI or DirectX 사용)


http://www.codeguru.com/vb/gen/vb_multimedia/article.php/c1097/Advanced-MIDI-Programming--Utility.htm

http://www.codeguru.com/cpp/g-m/multimedia/article.php/c1573/Playing-MIDI-Files-Directly-From-The-Resource.htm

http://www.codeguru.com/cpp/g-m/multimedia/audio/article.php/c4715/Creating-an-MCI-MIDI-Class.htm

Music Synthesizer for Android


https://code.google.com/p/music-synthesizer-for-android/


안드로이드에서는 iOS에 비해 사운드 처리가 빈약해 보인다.

Midi 프로그래밍을 찾다보니 복잡하지만 좋아보이는 코드가 있었다. 얼핏 보면 NDK도 사용하고 있는 것으로 보인다.


apk 파일이 있으니 받아서 실행해 보시길...


----------------


JetPlayer를 사용해서 미디 파일을 출력하는 것이 그나마 가장 쉬운 방법으로 보인다.

OpenSL을 사용하는 방법이 가장 latency를 줄일 수 있는 방법이라고 한다.


mini2440에서 시리얼 통신이 필요해서 찾아 보는 중임...


https://code.google.com/p/android-serialport-api/

https://code.google.com/p/android-serialport-api/wiki/android_to_rs232_guideline?tm=6



http://android-serialport-api.googlecode.com/svn/trunk/

http://android-serialport-api.googlecode.com/svn/trunk/android-serialport-api/project/



http://www.xue5.com/Mobile/Mobile/678712.html


https://github.com/roboguice/roboguice


https://github.com/excilys/androidannotations


Roboguice (로보주스) 동영상: http://www.youtube.com/watch?v=-npv20gWftc

Android Annotations 동영상: http://www.parleys.com/play/5148922b0364bc17fc56c96d/chapter1/about


살펴 보시기 바랍니다~


곧 나온다고 하네요~


하드웨어는 6월에 나온다는 것 같군요...


http://developer.android.com/wear/index.html

이미지 처리 효율화 방법

http://www.youtube.com/watch?v=pMRnGDR6Cu0


https://developer.android.com/intl/ko/training/displaying-bitmaps/index.html

ListView를 일정 시간 간격으로 재로딩할 경우 스크롤 위치를 저장하고 복원할 필요가 있다.



Fragment에서 사용하는 예제~~

앱 개발시 Facebook SDK를 사용할 때 페이스북 앱이 설치되어 있지 않으면 인터넷을 통해 인증되고 정상 동작하지만, 페이스북 앱이 깔려 있으면 로그인 화면이 페이스북 앱의 로그인 화면이 나오면서 인증이 되지 않는 증상으로 난감했다.


결론부터 말하자면 Facebook 개발자 홈페이지에 등록한 안드로이드 앱의 Key Hash 때문이다.


개발자 홈페이지에 debug용 및 앱 업로드용 Key Hashes를 모두 등록해 두어야 한다.



1. 먼저 자신의 Debug용 Key Store가 어디에 있는지 파악해야 한다.

C:\Users\에 현재 계정의 아이디로 폴더가 지정되므로 탐색기로 들어가서 .android 폴더가 있는지와 .android 폴더 내에 debug.keystore 파일이 있는지 확인해야 한다.

예를 들어, 현재 사용하는 계정이 Administrator라면 탐색기로 

C:\Users\Administrator\.android 폴더에 debug.keystore 파일이 있는지 확인한다.


2. Keytool을 사용하여 인증서를 익스포트해야 한다.

keytool.exe 파일은 자바 런타임을 설치하면 깔린다. 자바 런타임 버전에 따라 숫자가 달라진다.

예를 들어, 자바 런타임이 7버전이라면 C:\Program Files\Java\jre7\bin 폴더에 keytool.exe 파일이 설치된다.


커맨드 창(cmd)을 실행하여 (1)번에서 확인한 Debug용 Key Store를 지정한다. alias로는 androiddebugkey를 지정한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore


위와 같이 실행하면 암호를 물어본다. 여기서는 android를 입력한다.


제대로 되었다면 이상한 문자들이 나타날 것이고 (삑삑 소리도 들리고...), 잘못 되었다면 눈으로 알아볼 수 있는 문자(오류를 설명하는 테스트)들이 나타난다.


3. 암호화 하여 Key Hash를 만든다.

이 때 openssl이 설치되어 있어야 한다. 밑의 명령어를 cmd 창에서 실행해 보고 안된다면 openssl을 설치하고 수행해야 한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore | openssl sha1 -binary


마찬가지로 이상한 문자들이 나타나면 성공!!!


4. Base64로 인코딩한다.


"C:\Program Files\Java\jre7\bin\keytool" -exportcert -alias androiddebugkey -keystore C:\Users\Administrator\.android\debug.keystore | openssl sha1 -binary | openssl base64


5. cmd 창에서 마우스 오른쪽 버튼을 눌러서 "표시"를 선택하고 커서로 출력 스트링을 선택하고 Enter를 누른다.


6. 페이스북 개발자 홈페이지의 Key Hashes에 Ctrl+V로 붙여넣기하고 맨 맽에 오른쪽에 있는 "변경 내용 저장" 버튼을 누른다.


------------------------------------------

주의할 점은, 앱 업로드용으로는 다른 별도의 Key Store를 사용하므로 그 키스토어에 대한 Key Hash를 추가로 지정해 주어야 한다.

------------------------------------------

그리고, 페이스북 개발자 홈페이지에서 Status & Review에서 general public?을 "예"로 해두어야 한다.

또한, 설정에서 Single Sign On에서도 "예"로 설정해 두었다.



항상 this, getActivity(), getApplicationContext() 쓸 때 혼동이 오네요.


싱글톤 객체 만들 때의 예제와 각 Context별 사용과 관련된 좋은 블로그 글이 있어서 링크를 걸어둡니다.


http://www.kmshack.kr/354

한 눈에 볼 수 있어서 좋으네요~


http://androiddrawables.com/


http://androiddrawableexplorer.appspot.com/



시스템에 있는 것을 활용하는 것은 양날의 칼 같습니다. 쉽게 쓸 수 있고 공통성이 있지만, 버전 업되면서 언제 바뀔지 (심지어는 없어질지) 모르죠..



위의 링크 중간 쯤에 내려가 보면 Download the Action Bar Icon Pack 링크가 있습니다.


Android SDK 설치 디렉토리에서 접근할 수도 있습니다.

[설치 디렉토리]\adt-bundle-windows-x86_64-20130729\sdk\platforms\android-18\data\res\drawable-hdpi

Android의 공식 API 가이드

http://developer.android.com/intl/ko/guide/topics/ui/drag-drop.html



다음은 android.view.View.OnDragListener 를 사용한 예제

조금 이상하게 동작하는 것 같으나, 소스가 간단하니 조금만 수정하면 될 듯...


http://www.techrepublic.com/blog/software-engineer/try-androids-useful-drag-and-drop-api/



Drag & Drop으로 순서를 바꾸려면 ImageView를 별도의 LinearLayout으로 각각 묶고... 다음을 Drop에 추가하면 된다.


View swapped = to.getChildAt(0);

to.removeView(swapped);

from.addView(swapped);



만약 원래 예제 처럼 빈 곳에 넣으려면 또 조금 수정하면 될 듯.

유용한 코드들이 많네요~


http://www.technotalkative.com/category/android/listview/

URL에서 이미지를 여러 개 받아와야 할 때 매우 유용한 소스입니다.


https://github.com/thest1/LazyList/


ImageLoader imageLoader=new ImageLoader(this); imageLoader.DisplayImage("http://127.0.0.1/image.php", imageView);


라이센스는 MIT license.

강추!!!


웹에서 UI를 통해 간단히 리소스(아이콘, 테마, 위젯 등)를 만들어서 다운로드 받을 수 있는 사이트


http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html

공식 사이트에서 디자인을 위한 데이터를 다운로드 할 수 있습니다.


http://developer.android.com/design/downloads/index.html



http://developer.android.com/design/style/iconography.html


홈 페이지 내에서 액션바 아이콘 팩도 다운로드 받을 수 있습니다. (AI 파일)