달력

052012  이전 다음

  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  


광고 한번만 클릭 부탁드립니다^^
위에 냐옹이 말구~ 위에 배너요~^_^/ 


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject [DownloadManager 를 이용한 파일 다운로드하기]

최종수정일 : 2012.01.03
- Download 에 문제가 생겨서 인터넷을 더 검색 해보았다.
  키워드는 'DownloadManagerBaseTest' 다. 라이브러리가 있는가보다. 가따 써보자.

최종수정일 : 2011.12.16

안녕하세요~^^
Android 진저브레드를 이용하여서 파일을 다운 받는 루틴을 정리해볼까 합니다.
예제들은 많이 없네요~
그리고 검색하면 할수록 미궁에 빠지게 되네요...

일단, 좀더 간략하게 !
1. 파일은 간략하게 다운이 가능하다.(진저브레드 이상 사용이 가능함) 
2. 중첩으로 파일을 다운받으려고 하면 안된다..( 될때가 있고 안될때가 있다...?? Why? )
3. So, 중첩루틴으로 파일을 다운 받도록 하자.
4. Wifi mode 와 3G mode 에서 다운 성공? 실패? 가 갈린다.

대충 이런저런 상황들....
일단 기본부터 해결하자.

기본~예제들은 다른곳에서 참조하시고~~^^;;
제방식대로~~ 



by 퓨림노

글을 작성하겠습니다.

1. AndroidManifest.xml 에 권한 추가하기

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

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

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



2. onCreate() 안에 추가하기

// Download - Service

        dger = (DownloadManager)getSystemService(Context.DOWNLOAD_SERVICE);

        

        // Download - IntentFilter

        registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));

        registerReceiver(onNotificationClick, new IntentFilter(DownloadManager.ACTION_NOTIFICATION_CLICKED));



3. Handler 


BroadcastReceiver onComplete = new BroadcastReceiver() {

public void onReceive(Context ctxt, Intent intent) {

String name = DownQueueMgr.getInstance().GetTextName();

Count++;

Toast.makeText(DownQueue.this,  "Count : " + Count, Toast.LENGTH_SHORT).show();

long id = DownQueueMgr.getInstance().GetstateID();

Cursor c= dger.query(new DownloadManager.Query().setFilterById(id));

c.moveToFirst();

int state =  c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));

   int reason = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON));

   switch(state){

   case DownloadManager.STATUS_SUCCESSFUL:

   {

    if (DownQueueMgr.getInstance().IsTextLastDownloadFile()) {

if( DownQueueMgr.getInstance().IsDownloading() == true )

return;

Handler handler = DownQueueMgr.getInstance().GetHandler();

Message message = handler.obtainMessage();

message.what = DownQueueMgr.FILE_READ_ADD_QUEUE;

message.obj = DownQueueMgr.getInstance().GetTextName();

handler.sendMessage(message);

DownQueueMgr.getInstance().SetDownloading(true);

} else {

if (DownQueueMgr.getInstance().GetQsize() != 0) {

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

}


Handler handler = DownQueueMgr.getInstance().GetHandler();

Message message = handler.obtainMessage();

message.what = DownQueueMgr.QUEUE_PROCESSING;

handler.sendMessage(message);

}

}

   }

    break;

   case DownloadManager.STATUS_FAILED:

   {

    switch(reason) {

    case DownloadManager.ERROR_FILE_ALREADY_EXISTS:

    Log.w("Download", "Error File Already Exists");

    break;

    default:

    Log.w( "Download", "Unknown : " + reason );

    break;

    }

   }    

   

    break;

   }

//Toast.makeText(DownQueue.this, Count + " : " + name + ", Download Completed!!", Toast.LENGTH_SHORT).show();

}

};

BroadcastReceiver onNotificationClick = new BroadcastReceiver() {

public void onReceive(Context ctxt, Intent intent) {

Toast.makeText( DownQueue.this, "hi!!", Toast.LENGTH_LONG).show();

}

};


@Override

public void onDestroy() {

super.onDestroy();

unregisterReceiver(onComplete);

unregisterReceiver(onNotificationClick);

}



4. File Download 하는 루틴


public long DownloadFile( String url )

{

m_TextName = "";

m_isTextfile = false;

long stateId = -1;

String filePath = "/a_qrcode/";

Uri urlToDownload = Uri.parse(url);

List<String> pathSegments = urlToDownload.getPathSegments();

if( urlToDownload == null ) 

{

Log.w("Download", "URL Error...!!!!!!!" );

return -1;

}

String file = pathSegments.get(pathSegments.size()-1);

if( file.matches(".*txt.*") ) {

m_TextName = file;

m_isTextfile = true;

m_isDownloaing= false;

}

else {

m_TextName = file;

}

try {

Environment.getExternalStoragePublicDirectory(filePath).mkdirs();

stateId= m_DownloadManager.enqueue(new DownloadManager.Request(urlToDownload)

       .setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI | DownloadManager.Request.NETWORK_MOBILE)

       .setAllowedOverRoaming(false)

       .setTitle(file)

       .setDescription(file + ", Downloaing...")

       .setDestinationInExternalPublicDir(filePath,file) );

}catch( Exception e) {

Log.w("Download", "error....log1 " );

}

return stateId;

}

 

5. 기타 하고 싶은 말
 1. Thread 를 이용하면 Toast 가 사용이 불가하다. 안되는 이유는 책들을 참조하길 바람.
 2. Thread 를 사용하지 않으면 어떻게 사용할 것인가!? Handler 를 사용하는 것이다.
 3. Handler 를 사용하는 방법은 책을 참조!(인터넷 뒤져서 알면...?? 머리속에 들어갈까!?)
 4. Overlap IO 를 DownloadManager 는 지원을 하지 않는 것 같다. 뭐 순차적이든 어떻게든 다운이 되어지긴 하지만, 상황에따라서 되고 안되고...차이가 많은 것 같다.

바쁘니깐 정리는 요까지만 하자.  

기타 Reference

더보기

 

추가되는 내용
// 아래 추가!
<uses-permission android:name="android.permission.ACCESS_ALL_DOWNLOADS"></uses-permission>

http://gitorious.org/rowboat/frameworks-base/blobs/65c36e6133be04e008bc164b62d42884ff06a13a/core/tests/coretests/src/android/app/DownloadManagerIntegrationTest.java

http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android/app/DownloadManagerBaseTest.java.java-doc.htm

//  여기서 무슨 파일을 다운 받음.
https://gist.github.com/CyanogenMod/android_frameworks_base/downloads

자바에서 이런것도 제공하는건가..ㄸ
http://www.java2s.com/Code/Android/CatalogAndroid.htm
http://www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/android.app.htm

// 추가!
http://toriworks.tistory.com/218

http://stbaeya.com/tc/219?TSSESSIONstbaeyacomtc=4db60f017c891d0d506fa774286c6f1c

// 그냥 파일 다운로드 하는 거
http://journae.springnote.com/pages/5947557?print=1
저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노


광고 한번만 클릭 부탁드립니다^^
위에 냐옹이 말구~ 위에 배너요~^_^/ 


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject [Android] Eclipse 소스코드 한글 깨질 때

최종수정일 : 2011.08.10

안녕하세요~^^

by 퓨림노

글을 작성하겠습니다.

이클립스에서 한글이 깨질 때 있다.
어떻게 할까!? 고민하자.
물론 결론부터 이야기하면 유니코드니, UTF-8 이니 저장방식이 틀려서 그렇다고 할테다.

방법은 간단하다.
뭐 바꿔주면 되는거니깐 말이다.

메뉴의
[windows] - [ preferences] 메뉴에
 [general] - [content types] 탭으로 간다. 

그리고  
아래와 같이,
Java Source File 를 선택하고 아래 
Default encoding : UTF-8  을 삽입해 준다. 

 
 
뭐 이렇게하고 프로젝트를 닫았다가 다시 여니깐 괜찮다. 
뭐 인터넷 소스를 다운받아서 열때 저런 문제가 생기더라. 라는 말이다. 해결완료! 


Reference
[1] lswcharming님의 블로그 ( http://blog.naver.com/PostView.nhn?blogId=lswcharming&logNo=30080446440&redirect=Dlog&widgetTypeCall=true )
     - 아무래도 책 2권의 NDK 를 보고, 구글에서 검색된 포스팅인데...의외로 꼼꼼히 정리가 잘되어 있었습니다. 하지만 처음 보는 저한테 이미지가 부족한 ㅜ_ㅜ 조금더 제가 꼼꼼히 작성해보리라 ...합니다. 
[2] (Android pub) ( http://www.androidpub.com/583308 )
저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노

광고 한번만 클릭 부탁드립니다^^


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject [android] Conversion Euler to Matrix

최종수정일 : 2011.08.04

안녕하세요~^^
android를 사용함에 있어서 Sensor 와 관련된 부분입니다.  
Android 의 Sensor 중에 Accelerometer 값을 받아 옵니다. 이때, Device 장비에서 Anroid API 함수를 사용함으로써
Rotation Matrix 를 구합니다.

하지만 실험중에... R과 R inverse 값을 서로 곱하여 보았는데 Identity 값이 되지 않더군요.

그래서 Accelerometer value 를 이용하여서 Matrix(Camera의 orientation)을 구하고자 합니다.  
by 퓨림노

글을 작성하겠습니다.


Android 에서는 Accelerometer 값은 Azimuth, pitch, roll 입니다. 
아래의 그림에서는 heading, attitude, bank 로 설명이 되어 있으나, 

heading = yaw = Azimuth
attitude = pitch 
bank = roll 

이라고 보시면 됩니다. 

Accelerometer 값을 이용해서 이제 Rotation Matrix을 만들어 보겠습니다. 

공식은 아래와 같습니다. 

[1] Conversion Euler To matrix

http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToMatrix/index.htm)


위 site 를 가시면 'ㅅ'/ 콘트롤 CV를 할 수 있습니다. 


그렇게 소스코드를 작성 하시면 되겠죠? 
이제 아래의 소스를 보고 실험을 하도록 하겠습니다.

(물론 실험결과는 비공개 -_-/) ; 안했으니깐요...

그럼 다음 시간에 봅시다 빠빠~ 





Reference
[1] Conversion Matrix to Euler 
http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToEuler/index.htm )
     - 정리가 잘되어있습니다. 
[2] Conversion Euler to Matrix
 
http://www.euclideanspace.com/maths/geometry/rotations/conversions/eulerToMatrix/index.htm
[3] etc ( 각각 들어가 보시기 바랍니다. )
 http://www.ogre3d.org/tikiwiki/Euler+Angle+Class
 http://www.gamedev.net/topic/81843-euler--heading-bank-attitude-gt-x-y-z-/
 http://www.euclideanspace.com/maths/geometry/rotations/euler/index.htm
 http://www.ogre3d.org/tikiwiki/Euler+Angle+Class
 http://en.wikipedia.org/wiki/Euler_angles http://orobot.net/wiki/index.php/Euler_Angles


저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노

광고 한번만 클릭 부탁드립니다^^


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject : [Android] getRotation()

최종수정일 : 2011.08.03

안녕하세요~^^
음~ 카메라 사용하면서 회전이 되었는지 안되었는지 알아보기 위해서 사용하였습니다.
물론 다른 용도로 사용이 가능합니다.

당연! 센서겠죠? Portrait, landscape 2가지 모드가 있는데, 3D OpenGL 에 출력을 하기위해서 현재 Device 가 어떻게 되어있는지 알아야 합니다.
그리고 0, 90, 180, 270 4가지 회전중에 현재 어떤 mode를 하고 있는냐에 따라서 Axis 를 변경해 주어야 합니다.
지금은 getRotation() 함수를 사용하는 것에만 집중하도록 하겠습니다.

Axis를 맞추는 과정은 .... 후에 다루도록 하겠습니다.  


by 퓨림노

글을 작성하겠습니다.

다른 블로그를 보면 어디에 넣어야 하는지, 적혀있지 않아서 -ㅅ-/ 살짝 놀랬습니다. 

저는 화면 mode에 따라서 sensor의 Axis를 변경하려고 합니다. 그래서 다음과 같은 곳에 넣어두었습니다. 
 

public void onSensorChanged(SensorEvent event) {
...
 
  if (mGravity != null && mGeoMagnetic != null) {
   ...
 // get Rotattion - 항상 90도로 나옴 ( 당연한 결과 Landscape 이니깐 )
    WindowManager wm = (WindowManager)getSystemService( Context.WINDOW_SERVICE );
    Display disp = wm.getDefaultDisplay();				
    int orientation = disp.getRotation();
				
    Vanishing.getInstance().SetRotationofScreen( orientation );
				
    switch( orientation )
    {
      case Surface.ROTATION_0:
          Toast.makeText(MainActivity.this, "Rotation 0", Toast.LENGTH_SHORT ).show();					 
          break;
      case Surface.ROTATION_90:					
          Toast.makeText(MainActivity.this, "Rotation 90", Toast.LENGTH_SHORT ).show();
          break;
      case Surface.ROTATION_180:
          Toast.makeText(MainActivity.this, "Rotation 180", Toast.LENGTH_SHORT ).show();
          break;
      case Surface.ROTATION_270:
          Toast.makeText(MainActivity.this, "Rotation 270", Toast.LENGTH_SHORT ).show();
          break;		
     }
  }
}




그리고 출력은 Canvas 화면에 출력하였습니다. 
그리고 딱히 Reference 를 달지 않겠습니다. 이번껀 T_T 창을 닫아버렸네요... 



Reference
[1] Android Developers ( http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html ) ( 한글버전 : http://catnest.tistory.com/37 )
     - 음...Sensor 를 다루는 개발자라면 꼭한번 읽어 보길 바랍니다. 

[2] Being a Developer ( http://neodreamer.tistory.com/460 )
 
저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노

광고 한번만 클릭 부탁드립니다^^


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject remapCoordinateSystem()

최종수정일 : 2011.08.02

안녕하세요~^^
Camera 와 OpenGL 을 사용하면서 Axis 가 아직도 해깔립니다.
그래서....하면서 정리중입니다.

정리가 완료된 것은 아직 미공개 상태로 둘까 중입니다. =ㅅ=!!!
어디 삽질해봐욥!! ㅎㅎㅎㅎ 이러면서 ㅎㅎㅎ....
되기나 되면 -ㅅ-/ 공개하겠죠 ㄷㄷㄷ 일단 헤메고나서 .  


by 퓨림노

글을 작성하겠습니다.

public static boolean remapCoordinateSystem (float[] inR, int X, int Y, float[] outR)


이런 녀석을 어떻게 해야할까요? 아니 사용방법입니다. 
간단하게  코드를 작성해보았습니다. 

public void onCreate(Bundle savedInstanceState) {
...
 
float[] R = new float[16];
float[] outR = new float[16];
float[] mV = new float[3];

for( int i=0; i<16; i++ )
  R[i] = 0;   	 	

R[15] = 1;
R[0] = 1;
R[5] = 1;
R[10] = 1;

SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR);				
SensorManager.getOrientation(outR, mV);
...
} 

디버깅을 해서 값을 볼까요?
먼저 초기 R 값 입니다.(기본으로 넣었습니다.)

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1   

그리고 remapCoordinateSystem() 함수를 거치고 난 후에 결과 outR 입니다.

1 0 0 0 
0 0 1 0
0 -1 0 0
0 0 0 1   


아! 함수에 대한 설명이랑, 그림이 빠졌군요!? 

먼저 함수에 대한 설명


public static boolean remapCoordinateSystem (float[] inR, int X, int Y, float[] outR)

inR the rotation matrix to be transformed. Usually it is the matrix returned by getRotationMatrix(float[], float[], float[], float[]).
X defines on which world axis and direction the X axis of the device is mapped.
Y defines on which world axis and direction the Y axis of the device is mapped.
outR the transformed rotation matrix. inR and outR can be the same array, but it is not recommended for performance reason. 
 


일단, OpenGL 의 기본 Axis 만 생각하도록 하겠습니다. 
그리고 Device가 회전을 하게됨으로써, Axis 가 변경이 됩니다.
화면 좌표계, 센서좌표계가 틀리게 됩니다. 

remapCoordinateSystem 함수를 사용하여서 Axis 를 변경 합니다. OK! 

그리고 2,3번째 파라미터는 X , Y 축으로 할 부분을 지정해 주면 됩니다. Z 축은 자동으로 계산합니다. 

그리고 결과 Matrix 는
outR 로 나오게 됩니다.  
위에서 실험한 Axis는 
다음과 같습니다. 









 
저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노

광고 한번만 클릭 부탁드립니다^^


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject Android rotate 시 Activity create 방지

최종수정일 : 2011.07.29

안녕하세요~^^

by 퓨림노

글을 작성하겠습니다.
소스 수정 - Activity 마다 다 넣어줍니다^^

 
@Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); }

AndroidManifest.xml 파일 수정

android:configChanges="keyboardHidden|orientation" // 추가



저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노

광고 한번만 클릭 부탁드립니다^^


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject [Android] 메모리(SD카드)공간에 폴더 생성하기

최종수정일 : 2011.08.04
- 업데이트 내용
1. 폴더 생성시 오류발생 -> 예외처리 및 소스 수정

최종수정일 : 2011.07.29




안녕하세요~^^
오늘은 간단한 팁^^
Android SD Card에 폴더를 생성 해볼까요? 


by 퓨림노

글을 작성하겠습니다.^^

저는 Data 폴더를 생성할 때

000
001
002
003
004

...
099 

이런씩으로 폴더를 생성합니다. 

물론

000_time  <- 현재시간

여러 데이터를 저장해야되니 말이죠~!!
그래서, 한폴더에 저장해두고~ 정리를 하려니 귀찮더라구요. 
그래서 폴더명을

001_현재시간
으로 저장을 하려고 합니다. 
소스는 다음과 같습니다. 

public String makeDirectory()
	{
		File sd;
		File Filename;
		
		try {			
			while(true) {
				String inTime   = new java.text.SimpleDateFormat("HHmmss").format(new java.util.Date());
				sd = Environment.getExternalStorageDirectory();
				String sNum = "00" + Integer.toString( m_DirNumber );
				String Path = sd.getAbsolutePath()  + "/a_test/" + sNum + "_" + inTime;	 
				Filename = new File(Path);
				
				Log.w("vbflash", sNum+"\n");
				
				if( !Filename.isDirectory() ){
					Filename.mkdirs();
					m_DirNumber++;
					return Path;
				}
				
			}
		}catch(Exception e)
		{			
		}
		return null;
	}

작성일 : 2011.08.04

안녕하세요.. 일단 소스 에러난 거 때문에 다시 수정하였습니다. 
찾아보니깐 -_-a 아니, 이유를 보니 생성된 볼더 체크가 안되었더군요....

File.exists()  함수를 사용해서 폴더가 있으면, continue 로 돌려서 없에버렸습니다. 
프로그램이 자잘한걸로 죽으면 귀찮겠죠? -_-/ 그래도 포스팅으로 글 남깁니다.
파일 처리에 관련되어서 조금더 자세한걸 알고 싶으시면 아래 링크를 추가합니다.
찾아가보시길 바랍니다.

<수정된 소스> 
public String makeDirectory()
	{
		File sd;
		File Filename;
		String sNum;
		
		try {			
			while(true) {				
				sd = Environment.getExternalStorageDirectory();
				
				if( m_DirNumber < 10 )
					sNum = "00" + Integer.toString( m_DirNumber );
				else if( m_DirNumber < 100 )
					sNum = "0" + Integer.toString( m_DirNumber );
				else
					sNum = Integer.toString( m_DirNumber );
				
				
				m_SavePath = sd.getAbsolutePath()  + "/a_test/" + sNum;	 
				Filename = new File(m_SavePath);
				
				if( Filename.exists() ) {
					m_DirNumber++;
					continue;
				}
				else if( !Filename.isDirectory() ){
					Filename.mkdirs();
					m_DirNumber++;
					return m_SavePath;
				}				
			}
		}catch(Exception e)
		{			
		}
		return null;
	}




저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노

광고 한번만 클릭 부탁드립니다^^


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject Camera 사용시 영상 종류 선택

최종수정일 : 2011.07.25

안녕하세요~^^
(주절주절~ 쓰겠습니다.) 


by 퓨림노


Android 에서 영상의 종류를 선택하는 방법이 될까!?

 
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
   // Now that the size is known, set up the camera parameters and begin
   // the preview.
 
   Camera.Parameters parameters = mCamera.getParameters();
   parameters.setPreviewSize(w, h);
   parameters.setPictureFormat(PixelFormat.JPEG);
   parameters.setPreviewFormat(PixelFormat.YCbCr_422_SP);
   parameters.setPreviewFrameRate(1);
   mCamera.setParameters(parameters);
   mCamera.startPreview();




 
저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노

광고 한번만 클릭 부탁드립니다^^


포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject Android에서 camera 구동시 발생 문제

최종수정일 : 2011.07.25

주절주절~^^;;

by 퓨림노



This class is not thread-safe, and is meant for use from one event thread. Most long-running operations (preview, focus, photo capture, etc) happen asynchronously and invoke callbacks as necessary. Callbacks will be invoked on the event thread open(int) was called from. This class's methods must never be called from multiple threads at once. 

Reference

[1] Android Developer ( http://developer.android.com/reference/android/hardware/Camera.html  )

Android 에서   카메라를 구동시, long-running operations( preview, focus, photo caputre, etc) 같은 작업을 할때, 비동기적으로 callbacks 를 해결해야 할 것 같다. 

해결 방법은 찾아보고 - 업데이트를 하도록 하자!

그리고 다음 포스팅 을 읽어보도록 하자.

Reference
[2] 안드로이드 길라잡이 ( http://android007.tistory.com/entry/Processe-and-Lifecycle )
- Activity의 process-and-lifecycle에 대해서 설명을 하고 있다. 카메라를 동작시에 왜 사진을 촬영할 때, 가끔 뻗어버리는 경우가 생기는지 알 수 가 있다.  결론을 말하자면, processing 을 하고 있는 카메라, Thread로 돌리기 때문에 service에 묻혀버려 실행이 되지 않는 다는 뜻이다.  
 



아...찾다보니 하나 더 있다. 정리하도록 하자. 

Reference
[3] Android Developer ( http://developer.android.com/reference/android/hardware/Camera.html )

 

public final void takePicture (Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback postview,Camera.PictureCallback jpeg)

 

Triggers an asynchronous image capture. The camera service will initiate a series of callbacks to the application as the image capture progresses. The shutter callback occurs after the image is captured. This can be used to trigger a sound to let the user know that image has been captured. The raw callback occurs when the raw image data is available (NOTE: the data will be null if there is no raw image callback buffer available or the raw image callback buffer is not large enough to hold the raw image). The postview callback occurs when a scaled, fully processed postview image is available (NOTE: not all hardware supports this). The jpeg callback occurs when the compressed image is available. If the application does not need a particular callback, a null can be passed instead of a callback method.

This method is only valid when preview is active (after startPreview()). Preview will be stopped after the image is taken; callers must callstartPreview() again if they want to re-start preview or take more pictures.

After calling this method, you must not call startPreview() or take another picture until the JPEG callback has returned.

- 기타다른 예제에서 startPreview() 를 해주는 소스가 많다.
물론 써보았지만, 화면이 멈춰있다. 어떻게 해결할까???

카메라를 reconnect() 를 하면 되지 않을까? (포스팅 작성중 해보지는 않았다. 직접 해보자.) 
저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노

광고 한번만 클릭 부탁드립니다^^

포스팅을 보시는 분들을 위해 노력 하는 블로거를 위하여! 부탁드립니다. 재미 삼아 포스팅을 정리하지만, 광고를 달아보았습니다. 얼마나 열심히 할 수 있을지...의문이지만요^^ 

Subject HashMap 사용법, (아니 중첩 arraylist 사용법)

최종수정일 : 2011.06.06

안녕하세요^^
Android 에서 이제 GoogleMap을 사용하기위해서는...(책을 읽어보세요~^^)
구글에 인증을 하기위한 과정을 메모해두도록 하겠습니다. 

음!! 근데 API Key 는...전부 가리더라구요? =ㅅ=/ 그래서...모자이크 처리좀 하겠습니다. 
그리구 제꺼두 'ㅅ'/ 저장해둬야겠네요...두개의 포스팅이.

그리고 포스팅은 간단하게 하겠습니다. 
by 퓨림노

[ API Key 등록하기 ]


(포스팅을 자세히 하기는 귀찮네요.. =ㅅ=/ 일단 바쁘니깐...그림을 보고 따라해주세요~ㅎㅎ
메모는 안남깁니다)

1. Keytool 파일이 있는 장소에서 
- C:\Programs Files\Java\jdk1.6.0_22\bin 에서 명령어를 실행합니다.

2. debug.keystore 파일을 keytool.exe 가 있는 폴더로 복사
- debug.keystore 파일은 (C:\Documents and Settings\vbflash\.android) 에 있음


3. 인증서 지문에 나온 MD5 코드를 아래에 삽입한다.

 
4. 아래 그림과 같이 코드가 나온다. ( 'ㅅ'/ 그림은 삭제 하였습니다.)


간단하게 작성하였습니다. 'ㅅ'! 질문은 꼬리로~^^
저작자 표시 비영리 동일 조건 변경 허락
Posted by 퓨림노