Android에서 수동으로 MediaScan 하기Android에서 수동으로 MediaScan 하기

Posted at 2011.03.20 21:42 | Posted in About Programing/05. Android
크리에이티브 커먼즈 라이선스
Creative Commons License
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
				Uri.parse("file://" 
			     + Environment.getExternalStorageDirectory())));  
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Android에서 기기 계정 정보 가져오기Android에서 기기 계정 정보 가져오기

Posted at 2011.03.07 21:55 | Posted in About Programing/05. Android
크리에이티브 커먼즈 라이선스
Creative Commons License
AndroidManifest.xml 에서 Permission 설정

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

Source

Account[] accounts = AccountManager.get(this).getAccounts();
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Android 내장 메모리의 사진 정보 가져오기Android 내장 메모리의 사진 정보 가져오기

Posted at 2011.02.28 23:52 | Posted in About Programing/05. Android
크리에이티브 커먼즈 라이선스
Creative Commons License
AndroidManifest.xml 에서 Permission 설정




Main.java

package com.eg.giver;

import java.util.ArrayList;

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore.Images;

public class Main extends Activity
{
	ArrayList mTitleArray;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mTitleArray = new ArrayList();
        
        getImages ();
    }
    
    public void getImages ()
    {
    	Cursor mManagedCursor;
    	
    	mManagedCursor = getContentResolver().query(Images.Media.EXTERNAL_CONTENT_URI , null, null, null, null) ;
    	
    	if(mManagedCursor != null)
    	{
    		mManagedCursor.moveToFirst();
    		
    		int nSize = mManagedCursor.getColumnCount();
    		
    		while (true)
    		{
    			String bucket_display_name =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.BUCKET_DISPLAY_NAME)); // 버킷의 이름
    			String bucket_id =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.BUCKET_ID)); // 버킷 ID
    			String date_taken =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.DATE_TAKEN)); // 촬영날짜. 1/1000초 단위
    			String description =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.DESCRIPTION)); // Image에 대한 설명
    			String is_private =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.IS_PRIVATE)); // 공개 여부
    			String latitude = 
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.LATITUDE)); // 위도
    			String longitude =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.LONGITUDE)); // 경도
    			String mini_thumb_magic =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.MINI_THUMB_MAGIC)); // 작은 썸네일
    			String orientation = 
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.ORIENTATION)); // 사진의 방향. 0, 90, 180, 270
    			String picasa_id =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.PICASA_ID)); // 피카사에서 매기는 ID
    			String id =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns._ID)); // 레코드의 PK
    			String data = 
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.DATA)); // 데이터 스트림. 파일의 경로
    			String title =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.TITLE)); // 제목
    			String size = 
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.SIZE)); // 파일의 크기
    			String mime_type =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.MIME_TYPE)); // 마임 타입
    			String display_name =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.DISPLAY_NAME)); // 파일 표시명
    			String date_modified =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(Images.ImageColumns.DATE_MODIFIED)); // 최후 갱신 날짜. 초단위
    			String date_added =
    				mManagedCursor.getString(
    						mManagedCursor.getColumnIndex(
    								Images.ImageColumns.DATE_ADDED)); // 추가 날짜. 초단위
    			
    			mTitleArray.add(title);
    			
    			if (mManagedCursor.isLast())
    			{
    				break;
    			}
    			else
    			{
    				mManagedCursor.moveToNext();
    			}
    		}
    	}
    	
    }
}
저작자 표시 비영리 변경 금지
신고
  1. collin
    좋은 글 감사드립니다. 덕분에 고민하던 문제가 풀리기 시작했네요. ^^ 본문에 코드 중 SyntaxHighlighter 오류인지 ArrayList<string> 와 같이 String 이 string이라고 나와 있네요.
    • 2011.09.21 18:34 신고 [Edit/Del]
      도움이 되셨다니 다행입니다^^
      말씀하신 오타는 저도 수정하려고 노력 해보았습니다만,
      말씀하신데로 SyntaxHighlighter 오류인지 수정이 되질 않네요ㅠ
  2. 레브네인
    안녕하세요. 안드로이드 공부하다가 우연히 들리게 되었습니다.
    아직 초보라서 이해가 가지않는 부분이 많이 있는데.. 그중에서도 위의 소스코드중에
    가장 마지막에 </string></string> 이부분은 왜 넣는건가요?
  3. 에레시아
    정말 좋은정보 감사합니다^^;;
    한가지만 여쭤봐도 될까요? ㅎㅎ;
    값중에 해상도 값이 없는듯한데.. 혹시 알수 있을까요? ㅎㅎ;
  4. 솽솽
    관리자의 승인을 기다리고 있는 댓글입니다
  5. 초보
    관리자의 승인을 기다리고 있는 댓글입니다

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Android 내장 Calendar에서 일정 읽어 오기Android 내장 Calendar에서 일정 읽어 오기

Posted at 2011.02.01 11:55 | Posted in About Programing/05. Android
크리에이티브 커먼즈 라이선스
Creative Commons License
Google Calendar와 동기화 하는 방법을 찾다가 Java에서는 쉽게 구현 가능하지만,
Android와 Google Calendar API가 궁합이 맞지 않다는 것을 알고 우회하기로 하였다.

어차피 내장 Calendar는 Google Calendar와 자동으로 동기화가 되니,
내장 Calendar에서 값을 읽어 오기로 하였다.


// Main.java
package com.calendar;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class Main extends ListActivity {
    /** Called when the activity is first created. */
	
	ArrayAdapter mArrayAdapter;
	List mItems = new ArrayList();
	ListView mListView;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mListView = (ListView)findViewById(android.R.id.list);
        
        setCalendar();
    }
    
    public void setCalendar ()
	{
		Uri calendars = Uri.parse("content://com.android.calendar/events");
		
		String[] projection = new String[] {
				"calendar_id",
				"htmlUri",
				"title",
				"eventLocation",
				"description",
				"eventStatus",
				"selfAttendeeStatus",
				"commentsUri",
				"dtstart",
				"dtend",
				"eventTimezone",
				"duration",
				"allDay",
				"visibility",
				"transparency",
				"hasAlarm",
				"hasExtendedProperties",
				"rrule",
				"rdate",
				"exrule",
				"exdate",
				"originalEvent",
				"originalInstanceTime",
				"originalAllDay",
				"lastDate",
				"hasAttendeeData",
				"guestsCanModify",
				"guestsCanInviteOthers",
				"guestsCanSeeGuests",
				"organizer",
				"deleted"
		} ;
		Cursor managedCursor = getContentResolver().query(calendars, projection, "selected=1", null, null) ;

		if(managedCursor.moveToFirst()) {
			int[] calendar_id               = new int[managedCursor.getCount()];
			
			String[] htmlUri                = new String[managedCursor.getCount()];
			String[] title                  = new String[managedCursor.getCount()];
			String[] eventLocation          = new String[managedCursor.getCount()];
			String[] description            = new String[managedCursor.getCount()];
			int[] eventStatus               = new int[managedCursor.getCount()];
			int[] selfAttendeeStatus        = new int[managedCursor.getCount()];
			String[] commentsUri            = new String[managedCursor.getCount()];
			int[] dtstart                = new int[managedCursor.getCount()];
			int[] dtend                  = new int[managedCursor.getCount()];
			String[] eventTimezone          = new String[managedCursor.getCount()];
			String[] duration               = new String[managedCursor.getCount()];
			int[] allDay                    = new int[managedCursor.getCount()];
			int[] visibility                = new int[managedCursor.getCount()];
			int[] transparency              = new int[managedCursor.getCount()];
			int[] hasAlarm                  = new int[managedCursor.getCount()];
			int[] hasExtendedProperties     = new int[managedCursor.getCount()];
			String[] rrule                  = new String[managedCursor.getCount()];
			String[] rdate                  = new String[managedCursor.getCount()];
			String[] exrule                 = new String[managedCursor.getCount()];
			String[] exdate                 = new String[managedCursor.getCount()];
			String[] originalEvent          = new String[managedCursor.getCount()];
			int[] originalInstanceTime      = new int[managedCursor.getCount()];
			int[] originalAllDay            = new int[managedCursor.getCount()];
			int[] lastDate               = new int[managedCursor.getCount()];
			int[] hasAttendeeData           = new int[managedCursor.getCount()];
			int[] guestsCanModify           = new int[managedCursor.getCount()];
			int[] guestsCanInviteOthers     = new int[managedCursor.getCount()];
			int[] guestsCanSeeGuests        = new int[managedCursor.getCount()];
			String[] organizer              = new String[managedCursor.getCount()];
			int[] deleted                   = new int[managedCursor.getCount()];
			
			for (int i = 0 ; i < title.length ; i++) {
				calendar_id[i] = managedCursor.getInt(0);
				Log.i("Calendar", "ID : " + calendar_id[i]);
				htmlUri[i] = managedCursor.getString(1);
				Log.i("Calendar", "htmlUri : " + htmlUri[i]);
				title[i] = managedCursor.getString(2);
				Log.i("Calendar", "title : " + title[i]);
				eventLocation[i] = managedCursor.getString(3);
				Log.i("Calendar", "eventLocation : " + eventLocation[i]);
				description[i] = managedCursor.getString(4);
				eventStatus[i] = managedCursor.getInt(5);
				selfAttendeeStatus[i] = managedCursor.getInt(6);
				commentsUri[i] = managedCursor.getString(7);
				dtstart[i] = managedCursor.getInt(8);
				dtend[i] = managedCursor.getInt(9);
				eventTimezone[i] = managedCursor.getString(10);
				duration[i] = managedCursor.getString(11);
				allDay[i] = managedCursor.getInt(12);
				visibility[i] = managedCursor.getInt(13);
				transparency[i] = managedCursor.getInt(14);
				hasAlarm[i] = managedCursor.getInt(15);
				hasExtendedProperties[i] = managedCursor.getInt(16);
				rrule[i] = managedCursor.getString(17);
				rdate[i] = managedCursor.getString(18);
				exrule[i] = managedCursor.getString(19);
				exdate[i] = managedCursor.getString(20);
				originalEvent[i] = managedCursor.getString(21);
				originalInstanceTime[i] = managedCursor.getInt(22);
				originalAllDay[i] = managedCursor.getInt(23);
				lastDate[i] = managedCursor.getInt(24);
				hasAttendeeData[i] = managedCursor.getInt(25);
				guestsCanModify[i] = managedCursor.getInt(26);
				guestsCanInviteOthers[i] = managedCursor.getInt(27);
				guestsCanSeeGuests[i] = managedCursor.getInt(28);
				organizer[i] = managedCursor.getString(29);
				deleted[i] = managedCursor.getInt(30);
				
				if (title[i] != null)
				{
					mItems.add(title[i]);
				}
				
				managedCursor.moveToNext() ;
			}
			managedCursor.close();
			
			mArrayAdapter = new ArrayAdapter (this, android.R.layout.simple_list_item_1, mItems);
			mListView = (ListView)findViewById (android.R.id.list);
			mListView.setAdapter(mArrayAdapter);
			mListView.setItemsCanFocus(true);
		}
	}
}

마지막줄에 </string></string></string></string>이 자꾸 붙네요-_-
무시하세요.

// main.xml




    	



LISTVIEW 와 LINEARLAYOUT 이 모두 대문자로 적혀있는데, 수정이 안되네요-_-;;
ListView, LinearLayout 으로 수정해서 사용하시기 바랍니다.

// AndroidManifest.xml


    
        
            
                
                
            
        

    
    



 
저작자 표시 비영리 변경 금지
신고
  1. ibj2012
    안녕하세요.. 숙신님.
    "Android 내장 Calendar에서 일정 읽어 오기" 글을 보고 따라해보았습니다.
    그러나 실행이 잘 되지 않네요.. 답답하여서 질문 남깁니다.
    테스트환경은 안드로이드 2.2 갤럭시탭입니다.
    응용프로그램(android.calendar프로세스)이 예상치 않게 중지되었습니다. 다시 시도해주세요.
    라고 팝업창이 뜹니다.
    어떻게 해야할지 모르겠네요..
    바쁘시겠지만 잠시 조언 좀 부탁드리겠습니다.
    • 2011.05.16 10:33 신고 [Edit/Del]
      단순히 예상치 않게 중지 되었다는것만 알려주시면
      어디서 문제인지 잘 알수가 없습니다^^
      에러 Log 메세지나, 어느 시점에서 에러가 나는지에 대해서 말씀을 해 주셔야 정확한 답변을 드릴수 있을듯 합니다.
      지금 예상되는 바로는 Manifest 설정 문제 인것 같은데, 혹시 Permission이나 Activity 설정 올바르게 하셨는지 확인해보시겠어요?ㅎ
    • ibj2012
      2011.05.16 17:32 신고 [Edit/Del]
      문제를 해결하였습니다.
      원인은 대소문자 문제입니다. ㅠㅠ
      ListView를 LISTVIEW로 잘못적었네요..
      숙신님께서 Manifest쪽 문제인것같다고 하여서 그쪽으로 보다가 xml파일을 전부 확인해보니 main.xml파일에 대소문자를 잘못적었더군요.. 이런 기초적인 실수를 하다니 부끄럽습니다..ㅠㅠ
      질문을 올릴때 이렇게 빨리 답변을 해주실지 몰랐는데.. 너무 빠른 답글에 놀랐습니다. 감사드립니다.
      제가 안드로이드가 처음이여서 모르는 것이 많습니다. 다음에 또 잘 이해가 되지 않는 것들을 여쭤봐도 될런지요? ㅎㅎ
      항상 건강하시기바랍니다. ^^
    • 2011.05.16 18:13 신고 [Edit/Del]
      언제든지 환영합니다^^
      부족한 실력이지만 도움이 되었으면 좋겠네요^^
  2. ibj2012
    안녕하세요. 숙신님.
    또 질문이 있습니다.^^
    제가 지금 안드로이드폰에서 서버에 로그인을 해야되는데요..
    서버는 현재 정성 서비스중인 웹서버와 제가 임의로 구현한 소켓서버입니다. 소켓통신 테스트는 하였습니다.
    둘다 로그인 후 안드로이드에서 액티비티가 넘어가도 세션이 유지되어야되는데요.
    처음부터 제가 구현할 실력이 못되어서 책과 인터넷에서 참고할만한 예제 소스를 찾고 있지만 쉽지 않네요. 혹시 로그인을 구현해보신적이 있으시나요?
    참고할만한 예제가 있으시면 무지한 중생에게 도움을 부탁드리겠습니다.
    계속 질문만드려서 죄송합니다. 오늘도 즐거운 하루 보내세요..^^
    • 2011.05.18 10:54 신고 [Edit/Del]
      Login을 구현해 보았냐는 질문을
      Android에서 소켓통신 하는걸 구현해 보았냐는 질문으로 이해해도 될까요?^^
      아니면 Activity가 넘어가도 Login 상태가 유지되어야 하는데, 그 방법을 모르겠다는 질문인가요?ㅎ
    • ibj2012
      2011.05.18 13:06 신고 [Edit/Del]
      최종적으로 제가 구현하고자하는 것은 로그인입니다.
      첫번째로 정상적인 사이트에 로그인을 하여 해당 사이트에서 로그인하였을때 제공받는 정보들을 안드로이드에서 조회하고 싶습니다.
      두번째로 제가 디비를 외부에 구성해놓고, 중간에 소켓서버를 열어두고 안드로이드가 소켓통신으로 서버와 통신하여 서버가 외부 디비로 쿼리를 조회하도록 하는 것인데요. 이때 로그인을하여서 사용자마다 다른 테이블을 조회하려고 합니다.
      그리고 Activity가 넘어가도 로그인 상태가 유지되도록 하여야 하는것도 물론 필요합니다.
    • 2011.05.18 20:37 신고 [Edit/Del]
      사이트에 로그인 하였을 때 제공받는 정보들을 얻고 싶으시다면, [HTML 파싱]이나 [XML 파싱]을 키워드로 검색해 보시기 바랍니다.
      두번째 질문은 소켓통신이 된다면 당연히 구현이 되는 사항인데 어느 부분에서 막히셨는지 잘 모르겠네요^^ 소켓 통신이 된다면 두번째에서 질문하신 모든 내용이 다 가능합니다^^ 혹시 Packet 설계는 하셨나요?
  3. 윤지용
    안녕하세요. 안드로이드에서 구글캘린더를 연동시키는 어플을 구현하려고 이리저리 찾아보던 도중 이 블로그를 발견하게된 학생입니다.

    제가 만들고자 하는건 읽어오는게 아니라 캘린더에 새로운 일정을 등록하고자 하는데요. 어떤식으로 하면 될지 좀 여쭤보고 싶네요.

    예를들어 addschedule("연도", "월", "일", "내용") 이런식으로 함수를 호출하면
    구글캘린더에 등록하는 식으로 말이죠.
    • 2011.05.19 10:37 신고 [Edit/Del]
      Google에서 Calendar와 연동하는
      Java 소스를 제공해주고 있습니다.

      하지만, Android에서는 Java의 모든 API를 제공하지 않습니다.

      저도 일정 등록을 해보려고 시도 하다가
      Google에서 제공해주는 Java API가 Android에서는
      제공하지 않아서 구현하지 못했었습니다^^

      물론 방법은 있겠지만, 제가 답변 드릴수 있는
      부분은 없는것 같네요^^

      도움이 되지 못해서 죄송합니다.
  4. 순삭!
    숙신님 안녕하세요
    저소스로 한번 돌려볼려고 긁어서 돌려보았는데 mItems.add(title[i]); 이부분에서 add가 에러가 납니다.왜그럴까요?
    • 2011.07.16 21:01 신고 [Edit/Del]
      ArrayAdapter<STRING> mArrayAdapter;
      List<STRING> mItems = new ArrayList<STRING>();



      ArrayAdapter<String> mArrayAdapter;
      List<String> mItems = new ArrayList<String>();

      으로 바꿔보세요.
      그래도 안되면 로그캣 참조하세요^^
  5. 순삭!
    에뮬레이터에서 아이콘까지 만들어지는데 예상치 못하게 중지되었다고 나오네요;; 왜그런 걸까요..ㅠㅠ
  6. dtstart와 dtend는
    long 형으로 받아야 합니다 흑흑....
    timestamp가 짤리는...
  7. 비밀댓글입니다
  8. 비밀댓글입니다
  9. 힝..
    안녕하세요, 다이어리 일정을 가져오는 코드를 보고 가져와 써보려 하는데요..
    여러 에러들을 수정하고 하고,, 한 결과..
    moveToFirst 이쪽 널포인트익셉션이 발생하네요.. 왜그런가요?

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

대구대학교 App 공모전 시연용 동영상대구대학교 App 공모전 시연용 동영상

Posted at 2011.01.13 00:19 | Posted in Project/Android기반 자녀 지킴이
크리에이티브 커먼즈 라이선스
Creative Commons License



저작자 표시 비영리 변경 금지
신고

'Project > Android기반 자녀 지킴이' 카테고리의 다른 글

대구대학교 App 공모전 시연용 동영상  (2) 2011.01.13
시연 동영상  (0) 2011.01.09
  1. ㅎㅎ 완료 한거 추카.ㅋ 꾸준히 블로그를 하고 있구나.ㅎ
    • 2011.01.17 00:27 신고 [Edit/Del]
      완료를 하긴 했는데,
      지적사항도 많이 나오고
      등급도 잘 못받아서 속상해요ㅠ
      좋은 경험 삼아서
      다음 과제 부터는 파이팅 하려구요 ㅎ

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

시연 동영상시연 동영상

Posted at 2011.01.09 21:04 | Posted in Project/Android기반 자녀 지킴이
크리에이티브 커먼즈 라이선스
Creative Commons License


 

apk 를 배포한다거나, 정식 서비스 계획은 없습니다.

영화 [악마를 보았다]를 보고 난 뒤,
꼭 필요한 프로그램이 아닐까 해서 개발하였습니다.

하지만, 악용될 경우 사생활 침해의 우려가 매우 높기 때문에
개발 했다는 것에 만족하겠습니다.

저작자 표시 비영리 변경 금지
신고

'Project > Android기반 자녀 지킴이' 카테고리의 다른 글

대구대학교 App 공모전 시연용 동영상  (2) 2011.01.13
시연 동영상  (0) 2011.01.09

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Android system 구축 및 설계 필기Android system 구축 및 설계 필기

Posted at 2010.11.22 15:43 | Posted in About Programing/05. Android
크리에이티브 커먼즈 라이선스
Creative Commons License
일시 : 2010년 11월 21일 9시 ~ 18시
강사 : 이우성


□ Android platform
- OS 기능
- Middleware 기능 : Database, Graphic library 등
- Application framework : class 환경, 실행 환경 등

총 4개 계층 중 제일 아래 Linux kernel이 있음.

□ Linux kernel이 제공하는 기능
- Memory 관리
- Process 생성 / 소멸 / 스케쥴링
- 전원 관리 : Android 용에서 추가.
- Application 강제 종료

□ Java virtual machine


- *.class가 Load되면 Memory에 탑재 된다.
- I/O 관련 부분은 Native library에 도움을 받아야 한다.
- 실행 모듈에선 Native OS용 Code가 나온다.
- Google에서는 License를 피하기 위해 Java virtual machine이랑 조금 다른 Dalvik virtualmachine을 Android에 탑재 하였다.
- Dalvik virtual machine은 Instance type이다. 즉, Application마다 하나씩 생성 된다.

□ Application 생성 순서
Linux process 생성 → 그 안에 Dalvik virtual machine 생성 → 그 안에 Application 생성

□ Java version
- EE : Server에서 주로 사용
- SE : PC에서 사용. Android의 기반이 된다.
- ME : Embedded에서 사용. License가 필요하다. Android가 무료로 공개되고 나서 입지를 잃었다.


□ Application framework : Application이 동작 할 수 있는 환경.

□ Activity manager : Application 하나가 실행되는 것을 관리.

□ Application의 종류
- Key application : 이미 내장되어 있는 Application. Android나 제조업체에서 제공.임의 삭제 불가.
- Download application : 사용자가 설치하는 Application. 2.2 부터는 외부 Memory에 저장 가능.

□ Application 개발 형태
- Java 기반 Application : Android에서 제공하는 Java 기능만 사용하여 개발.
- Java 기반 C 함수 사용
- Linux system program : C언어 사용
- Android platform porting

□ Android booting 과정
Bootloader에 의해서 Linux kernel이 먼저 호출 → init 이라는 Linux 최상위 Process 생성 → Zygote process 생성(Android의 부모 Process)

□ Android Application 구조
- 동적 구조 : Program 동적 수행 code.*.java → java compiler → *.class → Dalvik에서 지원하지 않음.Android SDK에서 classes.dex로 변환.
- 정적 구조(Resource) : 고정된 형태의 값. *.xml화면 구성 정보. Image. *.png 권장.Resource compiler 사용.각종 값(문자열, 색상, 크기, 스타일 정보)
- Application 정보 : Android Manifest.xml
□ Application 구성 요소
- Activity : 사용자 화면 구성 및 Event 처리.
- Service : Background 상태에서 처리.
- Content provider : Data 공유를 위한 Interface.
- Broadcast receiver : System에서 전달되는 Message 수신.
- Component : Activity, Service, Broadcast receiver
- Intent : Message object. Component간 Message 전달용.


□ Activity 상태
- 활성화 상태 : 화면에 보여지면서 사용자 Message 수신 가능 상태.
- 일시정지 상태 : 화면은 보이는데 Event 수신이 안되는 상태.
- 정지 상태


□ Message 종류
1. Component name
2. Action
3. Category
4. Data / Mime type
5. Extra
6. Flag

□ Intent 사용 방법
- 명시적 Intent 사용 : Component name
- 암시적 Intent 사용 : Action, Category, Data/Mime type다른 Activity가 가진 요소를 활용 한다.

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

RelativeLayoutRelativeLayout

Posted at 2010.11.09 03:14 | Posted in About Programing/05. Android
크리에이티브 커먼즈 라이선스
Creative Commons License




저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Android에서 ImageButtonAndroid에서 ImageButton

Posted at 2010.11.09 03:11 | Posted in About Programing/05. Android
크리에이티브 커먼즈 라이선스
Creative Commons License
.xml

 <ImageButton
    android:id = "@+id/profile_icon"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:src = "@drawable/profile_icon"
    android:text = "">
</ImageButton>
저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

Android Activity 추가하기Android Activity 추가하기

Posted at 2010.11.08 23:59 | Posted in About Programing/05. Android
크리에이티브 커먼즈 라이선스
Creative Commons License
1. 메니페스트 파일에 액티비티 등록하기


 안드로이드에서 액티비티를 호출하기 위해서는 먼저 메니페스트 파일에 액티비티가 등록되어 있어야 합니다. 메니페스트 파일에 액티비티를 등록해주기 위해, 먼저 메니페스트 파일(AndroidManifest.xml) 파일을 연 후, Application 탭을 클릭합니다.


 여러가지 속성을 설정할 수 있는 화면들과 함께 어플리케이션의 여러 구성요소들을 등록할 수 있는 Application Nodes 화면이 화면 좌측 하단에 있습니다. 이곳에서 액티비티 뿐만 아니라 다른 액티비티 구성요소 (서비스, 컨텐트 프로바이더 등)도 추가해줄 수 있습니다.

 액티비티를 추가하기 위해 Application Nodes 부분의 Add... 버튼을 클릭합니다.



 Add.. 화면을 클릭하면 다음과 같은 대화상자가 나타나는데, 이곳에서 "Activity"를 클릭합니다.
 "OK" 버튼을 클릭한 후, 추가된 Activity를 선택한 후 오른쪽의 Attributes 화면을 보면 다음과 같은 화면이 보일 것입니다.

2. 액티비티 소스 코드 만들기

 메니페스트 파일에 액티비티를 선언하였으니, 이 액티비티의 실질적인 동작을 구현할 자바 소스 코드를 만들어야 합니다.
파란색으로 되어있는 Name* 을 클릭하여 새 클래스를 만들어줍시다.


 위와 같은 대화상자가 뜨게 될 것입니다. 다른 것은 특별히 건드릴 필요가 없고, 클래스의 이름 (일반적으로 액티비티의 이름과일하게 설정합니다) 을 입력합니다. 이름을 입력했으면, Finish 버튼을 누릅시다.

저작자 표시 비영리 변경 금지
신고

Name __

Password __

Link (Your Website)

Comment

SECRET | 비밀글로 남기기

티스토리 툴바