블로그 이미지
JoyfulLife

공지사항

최근에 받은 트랙백

글 보관함

calendar

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        

Admob 세팅

2011.08.17 21:19 | Posted by JoyfulLife
LinearLayout layout=(LinearLayout) findViewById(R.id.Admob);
        AdView adView = new AdView(this, AdSize.BANNER, Common.ADMOB_APP_ID);
        layout.addView(adView);
        AdRequest request = new AdRequest();
//        request.setTesting(true);
//        request.addTestDevice("78419238D07A8585AA915F0BB920F287");
        adView.loadAd(request);


주석을 넣으면 테스트를 할 수 있다.
신고

'안드로이드' 카테고리의 다른 글

Admob 세팅  (0) 2011.08.17
html 형식의 글을 string으로 변환  (0) 2011.08.02
cmd logcat  (0) 2011.01.16
Drag and drop in Android  (0) 2010.11.05
안드로이드에서 sd카드 마운트 확인 방법  (0) 2010.10.26
알림 메세지 , "지우기" 로 못 없애기  (0) 2010.09.24

html 형식의 글을 string으로 변환

2011.08.02 23:23 | Posted by JoyfulLife
<description><![CDATA[<p>New York legalizes same-sex marriage
</p>]]></description>
이런 형식의 글을 그냥 보여주면 쓸데없는 정보가 많아서 안된다.
html형식이니 이것을 string으로 변환해야 한다.

Spanned t=Html.fromHtml(String);
String strData=t.toString();

이렇게 해주면 알아서 변환을 해준다.
태그가 너무 복잡하면 에러나서 죽을수도 있다.

신고

'안드로이드' 카테고리의 다른 글

Admob 세팅  (0) 2011.08.17
html 형식의 글을 string으로 변환  (0) 2011.08.02
cmd logcat  (0) 2011.01.16
Drag and drop in Android  (0) 2010.11.05
안드로이드에서 sd카드 마운트 확인 방법  (0) 2010.10.26
알림 메세지 , "지우기" 로 못 없애기  (0) 2010.09.24

cmd logcat

2011.01.16 22:20 | Posted by JoyfulLife
커맨드 창에서.

DLNA 전송 메세지:  adb logcat -s DLNA:*
Zone 인식 메세지 :  adb logcat -s ZONE:*
신고

'안드로이드' 카테고리의 다른 글

Admob 세팅  (0) 2011.08.17
html 형식의 글을 string으로 변환  (0) 2011.08.02
cmd logcat  (0) 2011.01.16
Drag and drop in Android  (0) 2010.11.05
안드로이드에서 sd카드 마운트 확인 방법  (0) 2010.10.26
알림 메세지 , "지우기" 로 못 없애기  (0) 2010.09.24
TAG logcat

Drag and drop in Android

2010.11.05 16:01 | Posted by JoyfulLife

There is a source that someone made using music source in Android platform.

http://www.kandroid.org/board/board.php?board=sourcecode&command=body&no=34

But it's not perfect.

abd



You can see this when you run the source.





When you click the 1's item, and moving to bottom, you 're going to notice the problem.
Did you see the problem?
I don't like 1's item between 0's and 2's.
I wanted 2's item to be bottom.

So, I looked the source. At the first time, I think the source maker made a mistake. So I tried to find source error.
But source was perfect. I compared this source with Android music source, There were no problem.








finally, I got the problem.
problem was gravity.

when you see DndSampleActivity.java
there are

mAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, data);

in OnCreate().

R.layout.simple_list_item_1 is

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:gravity="center_vertical"
    android:paddingLeft="6dip"
    android:minHeight="?android:attr/listPreferredItemHeight"
/>


android:gravity="center_vertical" is not good match at this point.

center_vertical make text to be center. I want text to be bottom.

So I make the row.xml in the layout.

R.layout.row.xml is

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:paddingLeft="6dip"
    android:minHeight="?android:attr/listPreferredItemHeight" android:gravity="bottom|center_vertical"/>

and 
mAdapter = new ArrayAdapter<String>(this,
                R.layout.row, data);

I added bottom to the gravity.



Now, you can see the item that is right place.

신고
String sdcardState = android.os.Environment.getExternalStorageState();
        if (sdcardState.contentEquals(android.os.Environment.MEDIA_MOUNTED)) {

이렇게 하면 된다.

File f = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
        if (f.canRead()) {
            mCanAccessSDcard = true;

        } else {
            mCanAccessSDcard = false;
        }

이렇게 하는 것보다 훨씬 깔끔하다.
신고

알림 메세지 , "지우기" 로 못 없애기

2010.09.24 20:14 | Posted by JoyfulLife

     * 알림영역 선택시 어플 실행.

     * 알림영역 삭제는 어플 종료 이전에는 불가능 하도록 처리해야 .

     */

    private void notifyMessage() {

        String notiTitle = this.getString(R.string.app_name);

        String notiContent = this.getString(R.string.msg_notify_content);

        final NotificationManager notiMgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

        Notification noti = new Notification(R.drawable.ic_notify, notiTitle , System.currentTimeMillis());

        noti.flags |= Notification.FLAG_NO_CLEAR;

       

        PendingIntent i = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class),0);

       

        noti.setLatestEventInfo(this, notiTitle, notiContent, i);

       

        notiMgr.notify(NOTIFY_ID, noti);

    }


이부분이 핵심이다.

noti.flags |= Notification.FLAG_NO_CLEAR;


이렇게 하면 프로세스 죽지 않는한 알림메세지가 안 죽는다.



참조 사이트

http://developer.android.com/reference/android/app/Notification.html#FLAG_NO_CLEAR


http://overoid.tistory.com/25




신고

tab을 그림으로만 표현하기

2010.09.21 09:58 | Posted by JoyfulLife

 final TabHost tabHost = getTabHost();

  iv = new ImageView(this);
  iv.setBackgroundResource(R.drawable.tab_starmain_interview_selector);
  tabHost.addTab(tabHost.newTabSpec(TAB_ID_STAR_MAIN_INTERVEW)
    .setIndicator(iv).setContent(
      new Intent(this, StarInterview.class)));

신고
TAG Tab

NDK , 문서 번역, OVERVIEW.TXT

2010.09.16 10:32 | Posted by JoyfulLife

소개
NDK 는 c/ c++ 로 컴파일된 파일을 어플리케이션 패키지로 넣을 수 있게 해주는 툴이다.

중요한 점:
 1.5 이상의 플랫폼만 NDK를 쓸 수 있다.
1.0, 1.1 는 ABI 와 툴체인의 변화로 제공되지 않는다.


NDK 목표
 VM이  JNI 로 이식된 네이티비 코드를 당신의 어플이 사용할 수 있게 해준다.
 - 당신의 어플 소스 코드는 native 키워드를 선언해야 한다.
 native byte[] loadFile(String filePath);
-  당신은 반드시 함수가 선언된 native shared library 를 제공해야 한다. 그것은 당신의 .apk에 패키징될 것이다. 그 라이브러리는 표준 유닉스 convention 으로 이름이 붙여질 것이다. . (lib<something>.so),. 그리고 표준 JNI entry point 를 가지고 있어야 한다. (libFileLoader.so)
-당신의 어플은 정확하게 라이브러리를 로드해야한다. 예를 들자면,
 static{
System.loadLibrary("FileLoader");
}
 당신은 'lib'이란 것과 '.so' 를 사용해서는 안된다.


NDK 는 안드로이드 sdk를 보완해주고 다음과 같은 점을 도와준다.
 1. JNI-compatible shared librarie(ARM cpu 에서 돌아가는 안드로이드 1.5 플랫폼이상) 을 생성
 2. shared libraried 를 적당한 당신의 어플리케이션 프로젝트에 복사해준다. 그것은 자동으로 당신의 final .apks 에 더해질 것이다
 3.나중의 NDK revision 때 우리는 native code 디버그 툴을 제공할 것이다. 그것은 원격 gdb connection을 통한 것이다. 그리고 soure/symbol 정보를 디버깅 해줄 것이다.

NDK는 더 많은 것을 제공한다.
 1.리눅스 상이나, OS X , 윈도우(with cygwin) 에서 native ARm 바이너리를 생성할 수 있는 cross-toolchains(컴파일러, 링커, 기타.. )
 2..안드로이드를 도와주는 안정된 native APIs의 리스트들과 일치되는 system headers. 이것은 나중에 발매되는 플랫폼의 정의와 일치되는 것을 보장한다.
 이것은 docs/STABLE-APIS.TXT에 문서가 있다.
 중요한 점:
 다음 플랫폼의 업데이트와 release 때  많은 native system libraries 는 frozen 되지 않았다. 그리고 과감하게 바뀔 것이다. 또는 삭제될 것이다.
 3.빌드 시스템은 개발자가 short build files 을 쓸 수 있게 허용할 것이다. 빌드 시스템은 복잡한 toolchain/jplatform/cpu/ABI 들을 상대할 것이다. 다음 버전에의 NDK는 개발자의 build 파일을 변화를 요구하지 않는 더 많은 toolchains과 platform 시스템 인터페이스  를 제공할 수 있다.

II. 안드로이드 NDK의 non-goals:
 NDK는 안드로이드에서 돌아가는 generic native code 를 쓰는 좋은 방법이 아니다. 특수하게, 당신의 어플ㄹ은 자바로 적혀져야 하고, 안드로이드 life-cycle 을 만족해야 한다. 
 
 그렇지만 복잡한 native codd안에서 적은 wrapper 형태로 시작과 끝내는 것을 해주는 것은 가능하다. 

 JNI를 좋게 이해하는 것은 필요하다. 왜냐하면 많은 동작이 개발자들에게 특정한 액션을 요구하기 때문이다. 공통 표준 네이티비 코드가 필요한 것이 아니다. 이것을 다음을 포함한다.
 -VM 객체의 내용에 바로 접근이 가능하지 않다. (포인트를 얻을 수 없기 때문이다)
 -명백한 레퍼런스 관리를 유구한다. (네이트브 코드가 VM 객체를 제어하기 위해서)

NDK는 native api 와 라이브러리를 제공하기 위해서 시스템 헤더를 제공한다. 안드로이드 시스템은 많은 native shared libraries를 포함한다. 이것은 앞으로의 업데이트와 릴리스를 통한 변화를 위해서 잘 고려해야 한다.
 
 시스템 라이브러리는 앞으로 안정화된 NDK  API들의 세트에 더해질 것이다. 


III. 연습
 이것은 당신이 어떻게 native code를 NDK로 빌드할 수 있는지 러프한 방법을 보여준다. 
 1. $PROJECT/jni/  폴더에 native sourece들을 넣는다. 
 2. $PROJECT/jni/Android.mk 를 쓴다. 이것은 NDK build system에게 당신의 소스를 설명해줄 것이다. 
3 . 옵션: $PROJECT/jni/Application.mk 는 좀 더 자세하게 설명을 해준다. 이것은 APPLICATION-MK.TXT 문서를 봐라)
4.$NDK/ndk-build 로 빌드시켜라. 당신의 프로젝트 파일에서 빌드해야 한다. 

III.1 NDK 환경
 이전에는 build/host-setup.sh 로 빌드를 시켰지만 이번에는 제거되었다. 

III.2 C, C++ 위치
 $PROJECT/jni/ 에 둬라. 
 $PROJECT는 당신 어플리케이션의 프로젝트 패스이다. 
 
 당신은 jni 폴더를 구성하는 것에 자유롭다. 당신은 pseudo-unique 이름들을(com.<mycompany.><myproject>)  사용하지 않아도 된다. 
 
 c, c++ 을 제공된다. 
 Android.mk 를 조정하면 다른 곳에 저장을 해도 된다. 

III.3 Android.mk 빌드 script
 Android.mk 는 작은 빌드 스크립트 파일이다. 이것은 docs/ANDROID-MK.TXT 파일에 자세히 적혀 있다. 
 NDK 의 모듈은 다음이 따라 올 수 있다. 
- a static library
- a shared library
 
 당신의 Android.mk 에서 많은 모듈을 정의할 수 있다 

 NDK 는 다음의 빌드 스크립트를 찾을 것이다. 
 $PROJECT/jni/Android.mk

 만약 서브 디렉토리의 Android.mk 를 정의하고 싶다면 당신은 정확하게 탑레벨의 Android.mk 에 포함시켜야 한다. 
 (i.e include$(call all-subdir-makefiles)

III.4 Application.mk 빌드 파일( 옵션)
 


 

신고

Enable or not, BroadcastReceiver

2010.09.12 20:21 | Posted by JoyfulLife
 내가 WIFI를 끄거나 켤때 이것을 감지하는 BroadCastReceiver 를 찾아봤다.

intentFilter filter=new IntentFilter();
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);

이런 식으로 하면 된다.

블루투스를 찾아보았다.
permission을 준 다음에
(android.permission.BLUETOOTH)
 filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);

이런 식으로 하면 된다.

하지만 아직 GPS와 싱크 여부, 화면 밝기 조정, 화면 제한 시간  에 대한 Action 필터를 찾지 못했다.


구글을 해본 결과 화며 제한 시간은 알 수 없다고 했다.
(http://groups.google.com/group/android-developers/browse_thread/thread/94ec00933a7ee6d8#)

GPS는 가능 할 것 같다. 좀 더 찾아봐야 겠다.
신고

쉽게 Dialog 만들기..

2010.07.28 14:50 | Posted by JoyfulLife
평소에 다이얼로그를 만들면셔 불편한 점이 있었다. 그것은 내가 원하는데로 디자인을 할줄 몰랐다는 것이다. 구글 오픈 소스를 보면서 액티비티를 이용해서 다이얼로그를 만드는 법을 알아냈다.


@Override
    protected Dialog onCreateDialog(int id) {
        if (id == WELCOME_DIALOG) {
            mWelcomeDialog = new WelcomeDialog(this, this);
            mWelcomeDialog.setOnCancelListener(this);
            return mWelcomeDialog;
        } else if (id == GAME_OVER_DIALOG) {
            mGameOverDialog = new GameOverDialog(this, this);
            mGameOverDialog.setOnCancelListener(this);
            return mGameOverDialog;
        }
        return null;
    }

public class WelcomeDialog extends Dialog implements View.OnClickListener {

    private final NewGameCallback mCallback;

    private View mNewGame;

    public WelcomeDialog(Context context, NewGameCallback callback) {
        super(context);
        mCallback = callback;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setTitle(R.string.app_name);

        setContentView(R.layout.welcome_dialog);

        mNewGame = findViewById(R.id.newGame);
        mNewGame.setOnClickListener(this);

    }

    /** {@inheritDoc} */
    public void onClick(View v) {
        if (v == mNewGame) {
            mCallback.onNewGame();
            dismiss();
        }
    }
}

이 정도만 보면 어느 정도 이해는 가능할 것 같다. 좀 더 자세한 자료는 구글에서 DivideAndConquer 를 참조하자.


신고
이전 1 2 3 4 다음

티스토리 툴바