[Delphi]Assigned 함수 Delphi 2013. 11. 8. 13:36

Assigned(var P : Type) 함수는

P 가 참조하는 포인터 또는 프로시저가 할당되어 있는지 검사하는 함수이다.

 

function Assigned(var P : Type):Boolean;

P : 포인터 또는 프로시저 변수

 

nil 인 경우에는 False 를, 아니면 True 를 반환합니다.

다시 말하면,

체크하려는 변수가 할당되어 있으면 True, 할당되어 있지 않으면 False 를 반환합니다.

 

저 같은 경우는 동적으로 생성한 구조체가 할당되어 있는지 없는지 검사하기 위해 많이 씁니다.

할당되어 있으면 진행하고, 아니면 빠져나오도록 하는 경우에 많이 사용합니다.

 

 

compareTo 를 이용한 String비교

 

Int sort  = 0; //비교결과

//비교군

String data1;

String data2;

 

sort = data1.compareTo(data2)

 

sort = 0 이면                 data1 = data2

sort < 0 보다 작으면      data1 < data2
sort > 0 보다 크면         data1 > data2

 

'ETC' 카테고리의 다른 글

[ETC] SSD USB 설치시 오류  (0) 2012.11.13
[Java] 문자열 관련 Tip!!  (0) 2012.08.30
이클립스 디버깅 Tip  (0) 2012.08.03
이클립스 테마 플러그인하는 방법!(컬러&폰트)  (0) 2012.06.15
이클립스 폰트 설정.  (0) 2012.06.15
[ETC] SSD USB 설치시 오류 ETC 2012. 11. 13. 18:21

USB로 윈도우를 설치하다가 난관에 봉착했습니다.

아...파티션을 만들거나 기존 시스템 파티션을 찾을 수 없습니다

뭔소릴까요..?! 이러다 네이버 지식질 구글링 결과

SSD를 USB 와 혼동하는 상황?! 이런 경우 해결법입니다.

 

http://blog.naver.com/136136?Redirect=Log&logNo=130121757311

 

감사합니다 ㅠㅠ

 

'ETC' 카테고리의 다른 글

[JAVA]compareTo 를 이용한 String비교  (0) 2013.01.15
[Java] 문자열 관련 Tip!!  (0) 2012.08.30
이클립스 디버깅 Tip  (0) 2012.08.03
이클립스 테마 플러그인하는 방법!(컬러&폰트)  (0) 2012.06.15
이클립스 폰트 설정.  (0) 2012.06.15

안드로이드 MIME타입 떄문에 요즘 머리아픕니다. ㅠㅠ  공부해야쥐 ㅠㅠ

 

안드로이드 확장자로 mime 타입 추출하는 방법

        

          MimeTypeMap mtm = MimeTypeMap.getSingleton(); // mime type 추출용

      // 파일의 이름을 제외한 확장자명 추출
          String fileExtension = str.substring(str.lastIndexOf(".") + 1, str.length()).toLowerCase();           

     //확장자를 통해 String 형태로 Mime타입 추출
          String mimeType = mtm.getMimeTypeFromExtension(fileExtension);

 

이상입니다.

 

Screen Density, DPI

 

Density 

DPI 

Layout 경로 

Drawable 경로 

 Low

120

/res/layout-ldpi

/res/drawable-ldpi

 Medium

 160

 /res/layout-mdpi

/res/drawable-mdpi

 High

 240

 /res/layout-hdpi

/res/drawable-hdpi

 Extra high

 320

 /res/layout-xhdpi

/res/drawable-xldpi

 

1. 실행아이콘 크기

해상도(Screen density) 

크기(픽셀) 

Low 

36 x 36

 Medium

 48 x 48

 High

 72 x 72

 Extra high

 96 x 96

 

2. 액션바 아이콘 크기

 

 

Low

18 x 18

Medium

24 x 24

High

36 x 36

Extra high

48 x 48

 

 

3. 상태바 아이콘 크기

해상도(Screen density)

크기(픽셀)

Low

18 x 18

Medium

24 x 24

High

36 x 36

Extra high

48 x 48

 

4. 대화상자 아이콘 크기

해상도(Screen density)

크기(픽셀)

Low

18 x 18

Medium

24 x 24

High

36 x 36

Extra high

 

5. 리스트뷰 아이콘 크기

해상도(Screen density)

크기(픽셀)

Low

18 x 18

Medium

24 x 24

High

36 x 36

Extra high

 

6. 탭아이콘 크기

해상도(Screen density)

크기(픽셀)

Low

24 x 24

Medium

32 x 32

High

48 x 48

Extra high

 

그 외 고해상도 앱인 경우 구글마켓 등록 시 고해상도 아이콘을 추가 해야 함 : 512 x 512 픽셀

참고사이트 : http://www.creativefreedom.co.uk/icon-designers-blog/android-app-icon-sizes/

 

안드로이드 갤러리(S메모) 공유 받는방법입니다.

 

개발을 하다보니 S메모의 내용을 받으려고 헤메고 다녀서 정리 해둡니다.

 

우선 공유를 받게 되면 기본적으로 URI 형태로 받을수 있습니다.

자 그럼 손을 대야하는곳은

AndroidManifest.xml 와 실제 구동할 Activity 입니다.

 

우선 AndroidManifest.xml입니다

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hjm.shear.test"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

            <intent-filter

                  android:label ="원하는이름">
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="image/*" />
            </intent-filter>            

         </activity>
    </application>

</manifest>

 

빨간 부분이 추가되어야 합니다.

 

다음은 Activity 부분입니다.

 

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//실제액티비티에서 인텐트를 받습니다.

 

         Intent intent = getIntent();

        Bundle extras = intent.getExtras();

//저갔은 경우는 그냥 이미지뷰에 넣었습니다. 참고로 예외처리 안했습니다. ㅋㅋ

 

        ImageView imageview = (ImageView)findViewById(R.id.imgv);

        Uri uri = (Uri) extras.getParcelable(Intent.EXTRA_STREAM); //이게 URI입니다.

//이것이 필요한거구요  


        if(!uri.equals("")){
         String[] proj = { MediaStore.Images.Media.DATA };
           Cursor cursor = managedQuery(uri, proj, null, null, null);
           int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
           cursor.moveToFirst();
         String  path = cursor.getString(index);
           path = path.substring(5);
//path 이게 URI를 갖고 파일경로 알아냅니다. 

 

            imageview.setImageURI(uri); 
        }
       
    }   
}

 

Android에서 Toast를 사용할 때, 메시지가 중복해서 뜨면서 오랫동안 지속되는 경우가 있습니다.

기존 메시지는 삭제하고, 현재 메시지만 보이도록 하는 방법을 공유합니다.

 

1. Toast 객체 선언
public static Toast mToast;

2. onCreate() 에서 Toast.makeText()를 이용하여 Toast 객체 초기화
mToast = Toast.makeText(this, "null", Toast.LENGTH_SHORT);

3. 이 후, Toast를 보여주는 코드에 있는 Toast.makeText().show() 대신 다음으로 변경
mToast.setText(
show this text);

mToast.show();

 

이렇게 수정하면,

l mToast가 보여지지 않던 상황에는, 설정한 string toast를 띄우게 되고,

l mToast가 보여지고 있던 상황에는, mToast에 보여지고 있던 text를 새로운 text로 변경하여 보여줍니다.

항상 가장 마지막에 setText(), show() 했던 text Toast에 보여지게 되며, Toast.LENGTH_SHORT 만큼의 시간이 흐른뒤에 Toast가 사라지게 됩니다.

 

 

 

안드로이드 프로젝트를 진행하면서, 아이디나 String 문자열등 저장해야 할 경우가 생깁니다. 보통의 경우 Data를 저장할 경우 DB를 써야하는데 DB를 쓰기에는 너무 간단하거나 애매한 상황이 생기기도 합니다. 그럴경우에 안드로이드에서 제공하는 SharedPreferences 를 사용하시기 바랍니다.


SharedPreferences는 해당 프로세스(어플리케이션)내에 File 형태로 Data를 저장해 줍니다. 그리고 해당 어플리케이션이 삭제되기 전까지 Data를 보관해 주는 기능을 합니다. (SharedPreferences 사용한 어플리케이션을 지우면 내용이 모두 삭제 됩니다. File이 삭제되는 것이지요.) 자 그럼 사용 방법에 대해 알아 보겠습니다.


import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;

public class TestSharedPreferencesActivity extends Activity {
         @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);            
}
         // 값 불러오기
    private void getPreferences(){
        SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
        pref.getString("hi", "");
    }
         // 값 저장하기
    private void savePreferences(){
        SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.putString("hi", "인사잘하네");
        editor.commit();
    }
         // 값(Key Data) 삭제하기
    private void removePreferences(){
        SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.remove("hi");
        editor.commit();
    }
         // 값(ALL Data) 삭제하기
    private void removeAllPreferences(){
        SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);
        SharedPreferences.Editor editor = pref.edit();
        editor.clear();
        editor.commit();
    }
}
 
 SharedPreferences pref = getSharedPreferences("pref", MODE_PRIVATE);

 

getSharedPreferences("pref", MODE_PRIVATE) 에서 "pref" 는 File 이름이라고 생각하시면 됩니다. 하나의 폴더에 여러개의 File이 존재 할 수 있듯이 하나의 어플리케이션에서도 여러개의 SharedPreferences(File) 가 존재 할 수 있습니다. 그러므로 "pref"는 SharedPreferences 이름이라고 보시면 됩니다.
값을 저장하고 불러올때 SharedPreferences 이름이 틀리지 않게 주의하시면 됩니다.

 


사용하실때는 SharedPreferences 는 (Key, Value) 형태로 사용하시면 됩니다. 불러오실때 getString(key, value)를 설정하지만 해당 key에 대한 값이 없을경우 입력한 Value가 Default 값으로 설정됩니다. 즉 위에 보시는것과 같이 key값이 없을경우 "" 공백을 리턴받게 됩니다.

 


또한 주의하실게 get 메서드를 제외한 Data 저장(put), 삭제(remove, clear) 등을 할 경우에는 commit()을 꼭 호출해 주어야 합니다.

private SharedPreferences _prefs = null;

// SharedPreferences => 환경설정파일 생성하고 관리하기 위한 클래스

SharedPreferences 객체 생성방법

context.getSharedPreferences("PREFS_PRIVATE", Context.MODE_PRIVATE);
// SharedPreferences 객체를 얻기위한 메소드
// "파일명", 파일에 접근할 수 있는 권한
// <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
// <map> </map>

private Editor _editor = null;

// Editor => 환경설정파일의 내용을 수정하기 위한 클래스

Editor 객체 생성방법

SharedPreferences.edit();// Editor 객체를 얻기 위한 메소드

SharedPreferences 가 보유하고 있는 값 추출하는 메서드

SharedPreferences.getString("emailaddress", "Unknown");
// getString() 의 첫번째 값은 ~~.xml에서 <string name="~~">
// getString() 의 두번째 값은
<string>값이 없을 경우 기본값 </string>

SharedPreferences에 값을 넣거나 수정하는 메서드

Editor.putString("emailaddress", newemail);
// putString() => <string></string>
// putString()의 첫번째 값 => <string name="~~~">
// putString()의 두번째 값 => <string>~~~~</string>
// <string name="emailaddress">newemail변수의 값</string>

새로운 값, 변경 내용을 SharedPreferences에 실제로 적용시키는 메서드

Editor..commit();
// this._editor에 보관되어 있는
// <string name="emailaddress">newemail변수의 값</string>
// <string name="serverurl">serverurl변수의 값</string>
// 를 SharedPreferences xml 파일에 적용시키는 메소드

실제 사용한 예

/*
* prefs.java Unlocking Android http://manning.com/ableson Author: W. F. Ableson
* fableson@msiservices.com
*/

package com.msi.manning.UnlockingAndroid;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;

public class Prefs {

private SharedPreferences _prefs = null;
// SharedPreferences => 환경설정파일 생성
private Editor _editor = null;
// Editor => 환경설정파일의 내용을 수정
private String _useremailaddress = "Unknown";
private String _serverurl = "http://android12.msi-wireless.com/getjoblist.php";

public Prefs(Context context) {
this._prefs = context.getSharedPreferences("PREFS_PRIVATE", Context.MODE_PRIVATE);
// SharedPreferences 객체를 얻기위한 메소드
// "파일명", 파일에 접근할 수 있는 권한
// <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
// <map> </map>
this._editor = this._prefs.edit();
// Editor 객체를 얻기 위한 메소드
}
// getValue() => SharedPreferences파일의 내용을 얻기 위한 메소드
public String getValue(String key, String defaultvalue) {
if (this._prefs == null) {
return "Unknown";
}

return this._prefs.getString(key, defaultvalue);
}
// setValue() => SharedPreferences파일에 내용을 저장 위한 메소드
public void setValue(String key, String value) {
if (this._editor == null) {
return;
}

this._editor.putString(key, value);

}
// getEmail() => 계정을 추출하는 메서드
public String getEmail() {
if (this._prefs == null) {
return "Unknown";
}

this._useremailaddress = this._prefs.getString("emailaddress", "Unknown");
// getString() 의 첫번째 값은 ~~.xml에서 <string name="~~">
// getString() 의 두번째 값은 <string>값이 없을 경우 기본값 </string>
return this._useremailaddress;
}
// getServer() => 접속할 URL 주소를 추출하기 위한 메소드
public String getServer() {
if (this._prefs == null) {
return "http://android12.msi-wireless.com/";
}

this._serverurl = this._prefs.getString("serverurl", "http://android12.msi-wireless.com/");
return this._serverurl;
}
// setEmail(입력된 사용자계정) =>입력된 사용자계정을 저장하는 메서드
public void setEmail(String newemail) {
if (this._editor == null) {
return;
}

this._editor.putString("emailaddress", newemail);
// putString() => <string></string>
// putString()의 첫번째 값 => <string name="~~~">
// putString()의 두번째 값 => <string>~~~~</string>
// <string name="emailaddress">newemail변수의 값</string>
}
// setServer(입력된 URL주소) => 입력된 URL주소를 저장하는 메소드
public void setServer(String serverurl) {
if (this._editor == null) {
return;
}
this._editor.putString("serverurl", serverurl);
// putString() => <string></string>
// putString()의 첫번째 값 => <string name="~~~">
// putString()의 두번째 값 => <string>~~~~</string>
// <string name="serverurl">serverurl변수의 값</string>
}
// save() => 실제로 ~~.xml 파일에 저장하는 메소드
public void save() {
if (this._editor == null) {
return;
}
this._editor.commit();
// this._editor에 보관되어 있는
// <string name="emailaddress">newemail변수의 값</string>
// <string name="serverurl">serverurl변수의 값</string>
// 를 SharedPreferences xml 파일에 적용시키는 메소드
}
}

실습예제

프로젝트 새롭게 만들고, 메인화면에 아래와 같이 구성...

ToggleButton => 사운드 (기본값 : On)
EditText => 아이디 (기본값 : default)
EditText => 비밀번호 (기본값 : default)

CheckBox => 아이디저장 (기본값 : 체크해제)
CheckBox => 비밀번호저장 (기본값 : 체크해제)

Button => 확인

확인버튼을 누르면 SharedPreferences 파일에

현재 사운드의 On/Off 상태 값, 체크박스에 체크한 값들은 (아이디, 비밀번호) 저장할 수 있도록 코드 작성....
(단, 다시 어플리케이션을 실행하면 현재 SharedPreferences 파일에

저장된 값으로 실행되어야 함..)

안드로이드 개발 중 가끔 다른 앱과 연동해야하는경우 !!!

그 앱이 설치 되어있는지 확인해야할 경우가있습니다.

그럴경우 이렇게 사용하세요

 

 

//패키지 매니저

  PackageManager pm = getPackageManager();
            try {
             //검색할 대상 패키지명
                 pm.getApplicationInfo("검색할 패키지명",PackageManager.GET_META_DATA);
                 }catch (Exception e)
                {
                 //패키지가 없을경우 실행할 내용
                 }

 

혹은

 

PackageManager mPm = getPackageManager();
List<android.content.pm.ApplicationInfo> mInstalledPkgList = mPm.getInstalledApplication(PackageManager.GET_UNINSTALLED_PACKAGES);
         for( android.content.pm.ApplicationInfo appFmc : mInstalledPkgList )
         {
            if(appFmc.packageName.equals("검색할 패키지명"))
             {//설치시
              Check = true;
             }
         }
         if(!Check)

  {
             //미설치시 
  }