팝업 윈도우를 사용하는 이유는 커스텀하게 배경을 넣을때 사용하면 유명함
또한 좌표위치도 조절이 가능하기 때문에 아래나 위로 붙일때 유효하게 사용가능함
아래는 리스트 뷰에서 클릭시에 팝업을 띄워 처리하는 방법을 제시해줌.

http://ememomo.tistory.com/3

[공식사이트]
android sdk
http://developer.android.com/sdk/index.html

아이콘 생성툴
http://developer.android.com/guide/practices/ui_guidelines/icon_design.html

android library document
http://developer.android.com/reference/packages.html

android 블루투스 정보
http://docs.androidside.com/docs/guide/topics/wireless/bluetooth.html

android 블루투스 chat source
http://developer.android.com/resources/samples/BluetoothChat/index.html

 

[블로그]
android 개발 블로그
http://www.androidside.com/bbs/board.php?bo_table=B49&wr_id=2617&page=0

안드로이드 기반 오픈 소스 프로젝트 및 참고 사이트 모음
http://www.androidpub.com/89895


 

안드로이드 강좌 3 - 프로젝트 실행과 디버깅 그리고 단말 세팅
http://www.androidpub.com/764


Expat XML Parser
http://www.hpc.wm.edu/SciClone/documentation/software/misc/expat/reference.html#XML_SetStartElementHandler


sqlite 3 한글 문제 및 사용번 adb devices
http://underclub.tistory.com/260?srchid=BR1http%3A%2F%2Funderclub.tistory.com%2F260


안드로이드 데이트 타임 포멧 형식
http://developer.android.com/reference/android/text/format/DateFormat.html

http://www.androidside.com/bbs/board.php?bo_table=B46&wr_id=1521잘되어있음.

 

챠트 그래프 엔진
http://www.achartengine.org/

http://youngik.tistory.com/41?srchid=BR1http%3A%2F%2Fyoungik.tistory.com%2F41


바이오리듬예제
http://www.cocoadev.co.kr/205


안드로이드 디자인 ui 에디터 툴
http://www.androidside.com/page/help/droiddraw.php


안드로이드 버튼 롤오버
http://www.androidside.com/bbs/board.php?bo_table=B46&wr_id=11310&page=2


구글 검색
안드로이드 asset db


 sdcard db 쓰고 읽기
http://androcat.egloos.com/1799323


코너를 둥글게 하는 코드가 기재된 사이트를 소개합니다.

   http://stackoverflow.com/questions/1705239/how-should-i-give-images-rounded-corners-in-android
[출처] Android Side - http://www.androidside.com/bbs/board.php?bo_table=B49&wr_id=6954#c_7014

 

커스텀 버튼 만들기 (숫자표시???)
http://blog.cyworld.com/kenur/3865946

테이블레이아웃 TableLayout
http://tigerwoods.tistory.com/12


테이블 모서리 둥글게
http://lomohome.com/317


안드로이드 소켓통신

http://blog.naver.com/west372?Redirect=Log&logNo=80099128812
소켓통신!!!
http://pulsebeat.tistory.com/24
파일전송
http://blog.paran.com/du19s/38833337

C 와 java server 소켓
http://www.javanuri.com/devforum/boardView.jsp?Id=306222&gb=qna&menuId=9


c 와 java servlet
http://dont.pe.kr/tt/25


struts ajax 업로드
http://ant103.egloos.com/tag/%ED%8C%8C%EC%9D%BC%EC%97%85%EB%A1%9C%EB%93%9C/page/1


안드로이드 게시판
http://blog.naver.com/PostView.nhn?blogId=q1q3q5&logNo=10095649155

 

[아이폰 개발 sdk] http://developer.apple.com/devcenter/mac/index.action

 

WebView 화면 확대 축소

http://blog.outsider.ne.kr/462

 

3D openGL ES 소개

http://zorg.tistory.com/128

 

 

 

Android NDK 시작하기

http://blog.naver.com/ofking00/120119379228

 

 

Hello Android NDK example

http://micropilot.tistory.com/1522?srchid=BR1http://micropilot.tistory.com/1522

다운로드 받은 설치 프로그램을 다운 받아 설치해보도록 하자.

Setup-Subversion-1.6.6.msi 더블 클릭하여 실행!!!

SVN 설치에 관해선 별 다른 특별한 그 무엇은 없는 것 같다. 일단은.. 무조건 Next!!!

 

Step1.Welcome to the Subversion Setup Wizard

 

Step 2 Information

이런 저러한 정보들. 보통은 그냥 읽지 않고 넘어가는 경우가 대부분이다.

난 혹시나 유용한 정보가 있을지 몰라 어떤 프로그램이든 설치할 때 다 읽어본다.

 

Step 3 Destination Folder

설치경로는 본인이 끌리는대로..

 

Step 4 Ready to install Subversion

 

Step 5 Installing Subversion

 

Step 6 Completed the Subversion Setup Wizard

 

마지막으로 Finish를 클릭하면 SVN 설치 끝.

 

설치 경로엔 아래와 같이 폴더가 생긴다.

 

그럴리는 없겠지만 혹시나 path가 설정이 안되어져 있는지 다시 한번 확인!!

C:\Program Files\Subversion\bin 이 설정되어 있는게 보인다.

이렇게 되면 어느 위치에서든지 Subversion의 bin 하위 폴더의 프로그램들을 실행 시킬 수 있다.

* 특정 URL에 있는 파일을 다운로드 받아서 storage로 저장을 하고 싶을경우

    public void onCreate(Bundle savedInstanceState) {
        ....
        try {
            String DownloadURL = "http://www.androes.com/exchange.xml";
            String FileName = "/mnt/sdcard/exchange.xml";
            InputStream inputStream = new URL(DownloadURL).openStream();
            
            File file = new File(FileName);
            OutputStream out = new FileOutputStream(file);
            saveRemoteFile(inputStream, out);
            out.close();
            Logger.d("androes", "File Write /mnt/sdcard/exchange.xml");
            
        } catch(Exception e){
            Logger.d("androes", "File Write Failed! /mnt/sdcard/exchange.xml");
            e.printStackTrace();
        }
    }

    public void saveRemoteFile(InputStream is, OutputStream os) throws IOException    
    {
        int c = 0;
        while((c = is.read()) != -1)
            os.write(c);
        os.flush();    
    }  


* AndroidManifest.xml 파일에 아래항목 추가

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

특정 URL에 있는 파일을 다운로드 받아서 storage로 저장을 하고 싶을때 아래와 같은 코드를 사용하여 작업할 수 있습니다.


InputStream inputStream = new URL(DownloadURL).openStream();
    
File file = new File(FileName);
OutputStream out = new FileOutputStream(file);
writeFile(inputStream, out);
out.close();

 위 코드에서 DownloadURL 부분과 FileName 부분만 원하시는 내용으로 채워서 사용하시면 됩니다. 사용된 writeFile 함수의 구현은 다음과 같습니다.


public void writeFile(InputStream is, OutputStream os) throws IOException
{
     int c = 0;
     while((c = is.read()) != -1)
         os.write(c);
     os.flush();
}  

 인터넷이 허용된 상태여야 다운로드를 받을 수 있기 때문에 AndroidManifest.xml 파일에 아래와 같이 추가 되어 있어야 에러가 나지 않습니다.


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

 만약 sdcard와 같은 곳으로 저장을 한다면 아래 내용도 추가를 해야합니다.


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

 파일을 다운로드 받을 필요는 없고, 파일에 있는 값만 컨트롤 하고 싶으면 맨 위에 있는 소스에서 InputStream을 가지고 내용을 얻어와서 사용을 하면 됩니다.

<com.android.settings.IconPreferenceScreen
                      settings:icon="@drawable/ic_settings_connectivity" android:key="connectivity_settings"                                   android:title="@string/connectivity">
<intent android:action="com.lge.autorun.connectivitySettings" /> 
</com.android.settings.IconPreferenceScreen>

다음 내용은 xml을 이용하여 패키지를 호출하는 방법 입니다.
 

<목표> [안드로이드] Preference – UI 정보, 간단한 변수 저장하기

   

 

  이번에는 Preference에 대해 다루어 보겠습니다. Preference(이하 프리퍼런스)는 화면 이동 시 간에 발생하는 데이터 손실을 방지하기 위해 사용되는 자료형입니다. 간단한 예로 들자면, 친구에게 메시지를 보내기 위해 열심히 문자를 쓰고 있는 와중에, 전화와 온다고 가정합시다. 전화를 받고 나서 긴 장문의 메시지가 날라간다면 어떤 느낌이 들까요? 이런 일을 방지하기 위해서 프리퍼런스라는 자료형을 사용합니다. 화면 전환 시, UI 정보를 저장하고, 다시 그 화면으로 돌아왔을 때의 UI 정보를 불러와서 다시 화면에 뿌려주는 역할을 합니다. 이 밖에도 화면 전환 시에 저장하고 싶은 데이터를 저장할 수도 있습니다. 즉 간단하게 말하면, 임시 저장소라고 생각하시면 될 것 같습니다.

   

[핵심코드]   Preference

   

엑티비티 변환  데이터를 저장합니다.

SharedPreferences prefs = getSharedPreferences("PrefName"MODE_PRIVATE);

SharedPreferences.Editor editor = prefs.edit();

editor.putString(KEY_MY_PREFERENCE, text);

editor.commit();

엑티비티를 다시 실행하였을  데이터를 불러옵니다.

SharedPreferences prefs = getSharedPreferences("PrefName"MODE_PRIVATE);

String text = prefs.getString(KEY_MY_PREFERENCE"");

   

   

  아래의 예제에서는 간단하게 두 엑티비티 간의 화면이 바뀌었다가 다시 돌아왔을 때 제대로 프리퍼런스가 동작이 되고 있는지 확인합니다.

     

   

STEP 1  Java Source Code

   

  자바 코드는 두 가지를 다루게 됩니다. 첫 엑티비티는 시작화면으로, 간단히 데이터를 입력하고 화면을 전환시킵니다. 두 번째 엑티비티는 별다른 기능없이 다시 첫번째 엑티비티로 돌아가는 역할만 수행합니다.

   

     

[[Activity]]   Preference 를 이용한 첫 번째 엑티비티

   

package example.preference;

   

import android.app.Activity;

import android.content.Intent;

import android.content.SharedPreferences;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

   

   

public class PreferenceTestActivity extends Activity {

   

public static final String KEY_MY_PREFERENCE = "my_preference";

@Override

   public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   setContentView(R.layout.main);

   

   Button bt = (Button)findViewById(R.id.nextButton);

   bt.setOnClickListener(new View.OnClickListener() {

              

            @Override

            public void onClick(View v) {

                Intent intent =

                new Intent(PreferenceTestActivity.this, NextActivity.class);

                startActivity(intent);

            }

        });

   

   SharedPreferences prefs = getSharedPreferences("PrefName"MODE_PRIVATE);

   String text = prefs.getString(KEY_MY_PREFERENCE"");

      //  번째인자는 두번째 인자는 키에 대한 데이터가 존재하지 않을 경우의 디폴트값

     final EditText edit =(EditText)findViewById(R.id.text);

   edit.setText(text);

}

   

    // onStop() :  이상 엑티비티가 사용저에게 보여지지 않을  불립니다.

    //          기존에 존재하는 데이터를 저장합니다.

   protected void onStop() {

    super.onStop();

   

   EditText editText =(EditText)findViewById(R.id.text);

   String text = editText.getText().toString();

   

       // 데이타를 저장합니다.

   SharedPreferences prefs = getSharedPreferences("PrefName"MODE_PRIVATE);

   SharedPreferences.Editor editor = prefs.edit();

   editor.putString(KEY_MY_PREFERENCE, text);

   editor.commit();

   }

}

     

[Activity ①]   SharedPreferences 이용하여 데이터 저장하기

   

  첫 번째 엑티비티로 화면에서 간단한 UI를 조작하고 있습니다. 버튼을 클릭하면 Intent를 이용하여 다음 엑티비티로 전환합니다. 화면을 전환하게 되면 onStop()이 호출이 되게 되며, 이 상태에서 저희가 사용할 프리퍼런스를 이용해서 데이터를 저장해야합니다. 위의 코드에서 보는 것처럼 SharedPreFerences라는 데이터 유형을 사용해야 합니다. 안드로이드 자체에서 제공해주는 자료형으로써, getSharedPreferences( Key값, Permission값 ) 메서드를 호출하여 자료형의 속성을 지정할 수 있습니다.

"PrefName" 은 말그대로 자신이 정하고 싶은 Key 값이라고 보시면 됩니다. 다음에 데이터를 호출할 때 이 Key 값을 이용하여 그 자료형을 불러올 수 있습니다. 다음 인자는 이 자료형에 대한 권한 설정을 해주는 부분입니다. MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE 을 이용하여 이 파일에 대한 접근 권한을 설정합니다.

   

MODE_PRIVATE

-rw-rw----

MODE_WORLD_READABLE

-rw-rw-r--

MODE_WORLD_WRITEABLE

-rw-rw--w-

   

  위에서 보시는 것과 같이 이 데이터에 대한 권한을 설정할 수 있습니다. 리눅스 개발을 한번이라도 접해신분들이라면 곧바로 이해가 되실 겁니다. 이렇게 저장된 프리퍼런스는 xml 형태로 저장이 됩니다. (소스 내에 존재하진 않습니다.) 패키지 파일 내에 있는 shared_prefs 영역에 선언된 SharedPreferences 자료가 저장되어 있는 것을 확인하실 수 있습니다.

  이렇게 저장된 프리퍼런스를 이용하여 Editor라는 자료형으로 선언합니다. 말 그대도 편집하기 위해서 선언을 한 뒤에, 자신이 저장하고 싶은 데이터 이름을 설정해주고, 저장하고 싶은 변수를 넣으면 저장이 됩니다. 그리고 마지막으로 commit()을 호출하면 데이터가 저장됩니다.

   

[[Activity ②]]   SharedPreferences 이용하여 데이터 불러오기

   

  이제 저장한 데이터를 이용하여 불러와야 합니다. 불러오는 부분은 엑티비티가 생성 시, 즉 onCreate( ) 부분에 넣으면 됩니다. SharedPreferences를 설정해주고, 미리 정해둔 Key 값을 넣어 데이터를 불러오면 됩니다. 아주 간단하게 작업이 이루어집니다.

  엑티비티의 라이프 사이클을 고려하여, 해당하는 부분에 알맞도록 프리퍼런스가 동작하도록 설정해주면, 입맛에 맞게 이용할 수 있습니다.

   

   

[[Activity]]   단순히 뒤로갈 수 있게 만드는 두 번째 화면 엑티비티

   

두 번째 화면 엑티비티는 테스트를 위해 필요한 부분입니다. 단순히 다시 화면으로 돌아갔을 때 원래의 값이 남아 있는지 확인 하는 부분입니다. 엑티비티를 생성하시고 간단히 뒤로 가는 버튼을 넣어주면 됩니다. 별다른 어려운 점이 없는 부분이니 넘어가겠습니다.

   

 class NextActivity extends Activity {

   

    public void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);

   setContentView(R.layout.next);

   

   Button bt = (Button)findViewById(R.id.previousButton);

   bt.setOnClickListener(new View.OnClickListener() {

              

            @Override

            public void onClick(View v) {

                Intent intent =

                new Intent(NextActivity.this, PreferenceTestActivity.class);

                startActivity(intent);

            }

        });

  }

}

    

     

STEP 2  Xml Code

     

   첫 번째 엑티비티는 텍스트뷰와 에디트박스, 버튼으로 구성되어 있습니다. 에디트박스에 있는 데이터가 저장되고 다시 돌아왔을 때 저장되었는지를 확인합니다. 제대로 저장이 되어 있다면, 쓰고 있던 메시지가 그대로 저장이 되어야 합니다.

   

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

   <TextView

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"

   android:text=" 엑티비티"

   />

   <EditText

   android:id="@+id/text"

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"

   />

   <Button android:text="다음으로"

   android:id="@+id/nextButton"

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"></Button>

</LinearLayout>

   

  두 번 째 엑티비티는 첫 번째 엑티비티를 이용하여 돌아가기 위해 버튼만 구현해 놓았습니다.

   

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

   <TextView

   android:layout_width="fill_parent"

   android:layout_height="wrap_content"

   android:text="다음 엑티비티"

   />

   <Button android:text="이전으로"

   android:id="@+id/previousButton"

   android:layout_width="wrap_content"

   android:layout_height="wrap_content">

   </>

</LinearLayout>

   

   

STEP 3  AndroidManifest.xml Code

   

  메니페스트에는 다음 엑티비티를 허용하겠다는 퍼미션만 추가하면 됩니다.

     

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="example.preference"

android:versionCode="1"

android:versionName="1.0">

   <application android:icon="@drawable/icon"android:label="@string/app_name">

   <activity android:name=".PreferenceTestActivity"

android:label="@string/app_name">

      <intent-filter>

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

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

       </intent-filter>

      </activity>

     <activity android:name=".NextActivity"></activity>

   </application>

</manifest>

   

   

   

 마무리 >  프리퍼런스(Preference)를 이용하여 간단한 데이터 저장하기

   

  화면 이동 시 일어날 수 있는 데이터 손실을 미리 방지하기 위해 프리퍼런스를 사용합니다. 이러한 간단한 정보를 데이터베이스를 이용하여 접근하는 것은 속도와 효율적인 면에서 큰 손실이 아닐 수 없습니다. 그렇기 때문에 안드로이드에서 제공해주는 SharedPreferencs라는 데이터 유형으로 프로그래밍 내에서의 변수 선언처럼 간단히 데이터를 저장하고 불러 올 수 있습니다. 엑티비티의 각각의 라이프 사이클에 맞게 데이터를 저장, 불러오기를 한다면 조금 더 사용성에 이점이 있도록 어플리케이션을 개발할 수 있습니다.

     

  InputStream inputStream = null;
        FileOutputStream fileOutputStream = null;
        byte[] buf = new byte[100];
        try {
            inputStream = new URL("http://xxx.xxx.xxx.xx/target.dat").openStream();
            String file_name = "result.dat";
            fileOutputStream = openFileOutput(file_name, MODE_WORLD_READABLE);
            int cnt = 0;
            while((cnt = inputStream.read(buf )) != -1) {
                fileOutputStream.write(buf , 0, cnt);
                fileOutputStream.flush();
            }
        } catch (MalformedURLException e) {
        } catch (IOException e) {
        } finally {
            try {
                if(inputStream != null) inputStream.close();
                if(fileOutputStream != null) fileOutputStream.close();
            } catch(IOException ie) {}
        }

+ Recent posts