close
  • 홈
  • :
  • 위치로그
  • :
  • 태그
  • :
  • 방명록
  • :
  • 관리자
  • :
  • 새글쓰기
블로그 이미지

이슬나라 [isulnara.com]
프로그램 관련 문의...
전체 (208)
자작 프로그램 (24)
EzIP (3)
IEPageSetup (3)
iSysInfoX (2)
메신저 알림이 (1)
ezSVC (1)
WebFTP (2)
iDebugX (1)
기타 (10)
버그 신고 (1)
이것저것.. (55)
WebFTP 게시판 (0)
팁 모음 (77)
linux (21)
프로그래밍 (36)
윈도우 (5)
네크워크 (7)
기타 (7)
윈도우 숨은.. (4)
터미널 서비스.. (1)
공개 웹하드 (1)
관리자 (0)
PC 원격제어.. (1)
NAS (43)
«   2012/02   »
일 월 화 수 목 금 토
      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      
usbcopy dspack ezlink utf-8 IEPageSetup cwRSync DS209+II DateCompare SQL Server 델파이 에뮬레이터 펌웨어 max_allowed_packet TCP Wraper 블록 msn 알림이 JDBC CRC dsm 3.2 Spin The Bottle 한글 openSUSE11.3 iso android 메신저 setuid scp AjaXplorer VMWare xbmc
[ezLink] 동시 접속수...
ezLink 1.2.1.2 정식... (3)
MD5 CRC 체크섬.
Apache, Subversion...
CentOS에 MongoDB 설치.
참고로.. <div></div> 사...
kjj / 10:16
안녕하세요... 지금 jsp...
kjj / 10:14
프로젝트 클린한 다음에...
isul / 02/07
소스 그대로 사용했는데...
june / 02/06
예.. 제가 직접 만들어서...
isul / 01/29
일반 어플리케이션을 서...
ㅇㅇ/ / 2009
사이코웨어 : nProtect,...
√ MIRiyA's AstraLog / 2008
웹페이지에서 인쇄시 머...
醉生夢死™ / 2006
웹페이지에서 MAC Addres...
날자~!! 날어~!! / 2005
 최근글 목록
 2011/11 [2]
 2011/10 [3]
 2011/09 [1]
 2011/07 [3]
 2011/06 [1]
넷하드 - NAS 카페
무료 원격제어 프로그램
블로그가 뭥미?
솔라리스 테크넷
스티브 맥코넬
시놀로지 NAS 카페
하얀나무 - 캠핑 전문 쇼핑몰
하얀나무's Story
Total of
458052 visitors
Today 247
Yesterday 390
 
글검색결과[안드로이드] : 4
2011/06/13  [android] 병돌리기 앱
2011/04/29  [android] Activity idle timeout for HistoryRecord 에러 발생 시
2010/08/24  [안드로이드] 스플래시(로딩) 화면 띄우기 (36)
2010/07/29  안드로이드(Android) 에뮬레이터(emulator)에서 시리얼 통신하기 (10)
     
 자작 프로그램/기타 
[android] 병돌리기 앱
Posted on 2011/06/13 23:45
 
 
 
 
안드로이드 앱 개발은 몇 개 했었는데.. 마켓에 등록하기는 이번이 처음입니다.

병돌리기(Spin The Bottle) 앱입니다.


뭔가를 선택하거나 내기를 할때 간편하게 즐길 수 있는 룰렛 게임입니다.


게임 방법
--------------------------------------------
* 흔들거나 병을 터치해서 병을 돌립니다.

* 메뉴 키를 눌러서 아이템 선택 및 입력 가능(원하는 게임을 직접 만들어 보세요.)
* 병 변경 가능
* 터치하는 세기에 따라 병이 돌아가는 속도가 결정됩니다.
* 설정에서 당첨 표시 캐릭터, 소리 등을 선택할 수 있습니다.


스크린샷 :

c10613fc1ec77fe01e8940f17c02e0ed.jpg f12e0713ff3050c14d0b7e66972cf92a.jpg
897fe5c50e5cd6d3bc20d5df9e5bcc1f.jpg 66ce3170c9412962fed4271119c8d2b1.jpg
f6421c171ea424f3b75dd2b8917a1fc6.jpg 797ee5bdf35699c1b606c815e4c170f5.jpg



다운로드

안드로이드 마켓 : https://market.android.com/details?id=com.uniroid.spinthebottle

                        마켓 링크

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
이올린에 북마크하기
android, Spin The Bottle, 병돌리기, 안드로이드
Trackback [0] : Comment [0]
TrackbackAddress
http://isulnara.com/tt/trackback/243
SecretComment
     
 팁 모음/프로그래밍 
[android] Activity idle timeout for HistoryRecord 에러 발생 시
Posted on 2011/04/29 01:38
SurfaceView를 상속한 뷰 클래스를 하나 만들어 액티비티를 띄울 경우 아래와 같은 에러가 발생하면서
뷰가 표시되지 않고, 까만 화면만 표시되다 에러가 발생하는 경우
WARN/ActivityManager(374): Launch timeout has expired, giving up wake lock!
WARN/ActivityManager(374): Activity idle timeout for HistoryRecord{4776baf0 com.isulnara.game/.GameMain}

◆ 원인

-> SurfaceView를 상속한 뷰 내부의 쓰레드(Thread)에서 LOCK이 걸려서 발생함.

SurfaceView를 상속한 뷰 내부의 코드 중 아래처럼 synchronized를 사용하고
synchronized (holder)
{
...
}

액티비티 또는 쓰레드 내부에서 동시에 synchronized를 사용한 특정 메소드에 접근할 경우
LOCK이 걸려서 무한대기하다 에러를 발생시키는 것으로 확인했음..


◆ 해결방법

1. LOCK 발생 시키는 상황을 만들지 않도록 코딩
2. 동기화가 필요없을 경우 synchronized 블럭 제거
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
이올린에 북마크하기
Andorid, HistoryRecord, SurfaceView, Thread, 안드로이드
Trackback [0] : Comment [0]
TrackbackAddress
http://isulnara.com/tt/trackback/242
SecretComment
     
 팁 모음/프로그래밍 
[안드로이드] 스플래시(로딩) 화면 띄우기
Posted on 2010/08/24 18:07
안드로이드(android) 앱이 실행되면서 스플래시(splash, 로딩) 화면을 띄우는 소스입니다.

여러가지 방법이 있겠지만 제가 사용하는 방법은 아래와 같습니다.

AndroidManifest.xml
<!-- 메인 액티비티 -->
<activity android:name="MainActivity" 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="SplashActivity"/>

MainActivity .java
public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        startActivity(new Intent(this, SplashActivity.class));

        initialize();  // 시간이 걸리는 작업 처리
    }

    /**
     * 스플래시 표시하는 것과 초기화를 동시에 진행시키기 위하여 쓰레드 처리
     *
     */
    private void initialize()
    {
        InitializationRunnable init = new InitializationRunnable();
        new Thread(init).start();
    }


    /**
     * 초기화 작업 처리
     *
     */
    class InitializationRunnable implements Runnable
    {
        public void run()
        {
            // 여기서부터 초기화 작업 처리
            // do_something
        }
    }
}

SplashActivity.java
public class SplashActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        initialize();
    }

    private void initialize()
    {
        Handler handler =    new Handler()
                                     {
                                         @Override
                                         public void handleMessage(Message msg)
                                         {
                                             finish();    // 액티비티 종료
                                         }
                                     };

        handler.sendEmptyMessageDelayed(0, 3000);    // ms, 3초후 종료시킴
    }
}


* 화면을 가로/세로 모드로 전환할 경우 스플래쉬 액티비티가 보이는 문제가 발생할 경우 대처
- 여러가지 방법이 있겠지만 아래처럼 처리하면 됩니다.(2010/10/27 추가)

AndroidManifest.xml
<!-- 메인 액티비티 -->
<activity android:name="MainActivity" android:label="@string/app_name" android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

<!-- 스플래시(로딩) 액티비티 -->
<activity android:name="SplashActivity"/>
예제 다운로드:
SplashDemo.zip

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
android, splash, 로딩, 스플래시, 안드로이드
Trackback [0] : Comment [36]
TrackbackAddress
http://isulnara.com/tt/trackback/227
BlogIcon slog2 수정/삭제 답변하기
2010/10/27 17:31
화면 rotation시에 계속 스플래쉬 액티비티가 보이는 문제가 있네요..
BlogIcon isul 수정/삭제
2010/10/27 17:53
본문에 처리 방안 관련하여 내용 추가하였습니다.
고맙습니다.
BlogIcon 녹차 수정/삭제 답변하기
2010/11/01 21:23
큰 도움 됐습니다. FLAG를 이용해서 어찌할까 생각해봤는데 이 방법이 훨씬 간단하네요 ^^
BlogIcon isul 수정/삭제
2010/11/02 01:20
도움이 되었다니 저도 기쁩니다^^
BlogIcon 애니 수정/삭제 답변하기
2010/11/24 10:03
와우~^^ 감사합니다.
막 어제밤에 삽질하고 있었는데.. 이런방법이 있군요^^
감사합니다. ^^ 자주 놀러와야겟네여 ㅎㅎ
BlogIcon isul 수정/삭제
2010/11/24 23:44
안드로이드 관련 팁은 달랑 이거 하나 밖에 없네요^^
lemon 수정/삭제 답변하기
2011/02/22 14:55
시작부터 감이 좋습니다 ^^.. 착한 자료 감사합니다//
대학생 수정/삭제 답변하기
2011/03/22 23:51
어떻게 하는지 잘모르겠어요 ㅠ 관련예제 하나 올려주시면 안될까여? ㅠㅠ 전체 소스로요
BlogIcon isul 수정/삭제
2011/03/24 00:36
위에 있는 소스는 완전한 프로젝트 파일은 아니지만 필요한 부분은 다 나와 있습니다.
이 소스와 관계없이 일단 액티비티 두 개 있는 앱을 하나 만들어 보시면 어떻게 적용해야 될지 감이 올거라 생각됩니다.
루지메이앙 수정/삭제 답변하기
2011/04/08 20:17
이렇게 하는거랑 로딩화면 부터 띄우고 x초시 이동시키는거랑 다른점이 있나요?;;
BlogIcon isul 수정/삭제
2011/04/09 13:12
이렇게 하면 로딩 화면이 표시되는 동안에 특정 작업을 할 수 있습니다.
예를 들면 로딩에 시간이 걸리는 작업이 있을 경우 스플래시 화면이 표시되는 동안에 처리하는 거죠..
그리고, 또 다른 점은 시작 액티비티가 다르다는 것이죠..
로딩 화면 후 이동시키는 방식은 이동된 액티비티에서 뒤로 가기 버튼을 누르면 로딩 화면으로 돌아오게 되겠죠.. 이런 현상을 방지하려면 또 뭔가 작업을 해줘야 되겠구요..
루지메이앙 수정/삭제
2011/04/11 22:29
흠... 로딩화면부터 띄우는 거랑 같은 것 같은데..

SplashActivity 먼저 띄우고 3초뒤 MainActivity를

StartActivity 하면서 finish 하는 것과 동일해 보이네요 ^^;;
BlogIcon isul 수정/삭제
2011/04/11 23:29
일반적으로 사용하는데는 크게 차이가 없습니다...
편한 방법으로 사용하면 됩니다.
말씀하신 방법으로 할 경우에는 MainActivity에서 어떤 작업을 시키고자 할 경우 앱 실행 후 3초 후부터 가능하겠죠..
민이 수정/삭제 답변하기
2011/05/04 13:42
로딩문제 때문에 다양한 방법을 써봤는데 이게 가장 깔끔하고 좋은것 같네요
덕분에 한시름 덜게 된듯합니다. ㅎㅎ 유용한 정보 감사드립니다.
BlogIcon isul 수정/삭제
2011/05/09 00:17
도움이 되었다니 저도 기쁩니다.
^_____________^
환이 수정/삭제 답변하기
2011/06/06 22:54
질문있습니다 이 방법처럼 해서 잘되는데 문제는 어플을 종료후 다시 에뮬레이터로 마우스 클릭으로 실행을하니
Application is not installed on your phone 이렇게 뜨면서 실행이 안됩니다
근데 또 에뮬 다시켜서 자동실행 되도록 나두면 또 실행은 되구요 왜이런 현상이 생기나요...해결방법좀 알려주세요 ㅠㅠ
BlogIcon isul 수정/삭제
2011/06/07 09:14
구성하신 AndroidManifest.xml과 스플래시 화면 띄우는 부분의 소스를 올려주시면 확인해겠습니다.
설치된 앱을 삭제한 후에 다시 테스트 해보아도 동일한 문제가 발생하는지요?
수정/삭제 답변하기
2011/06/07 13:40
관리자만 볼 수 있는 댓글입니다.
환이 수정/삭제 답변하기
2011/06/07 13:42
이건 spl.java 소스입니다

package kr.ac.ys;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

public class spl extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.spll);
Handler z = new Handler();
z.postDelayed(new splashhandler(), 5000);

}
class splashhandler implements Runnable{
public void run(){
startActivity(
new Intent(getApplication(),Main.class));
spl.this.finish();
}
}
}

이건 Main.java 소스입니다
package kr.ac.ys;

import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class Main extends Activity {
AnimationDrawable frameAnimation;

public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus) frameAnimation.start();
}

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

ImageView imgView = (ImageView) findViewById(R.id.animationImage);
imgView.setVisibility(ImageView.VISIBLE);
imgView.setBackgroundResource(R.anim.simple_animation);
frameAnimation = (AnimationDrawable) imgView.getBackground();

//frameAnimation.stop();

Button b = (Button) findViewById(R.id.button3);
Button e = (Button) findViewById(R.id.button2);
Button f = (Button) findViewById(R.id.button1);
Button g = (Button) findViewById(R.id.button4);
Button h = (Button) findViewById(R.id.button5);

e.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this, help.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
finish();
}
});
f.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this, DB1.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
finish();
}
});
g.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this, sang.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
finish();
}
});


b.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(Main.this, option.class);
startActivity(intent);
overridePendingTransition(R.anim.fade, R.anim.hold);
finish();
}
});
h.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
finish();
}
});

}

}

Main manifest소스입니다
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="kr.ac.ys"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" />

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".spl"
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="option"></activity>
<activity android:name="help"></activity>
<activity android:name="DB1"></activity>
<activity android:name="sang"></activity>
<activity android:name="spl"></activity>
<activity android:name="Main"></activity>


</application>
</manifest>

해결방법좀 알려주세요 에뮬상에서 어플 지웠다가 다시해도 안되네요 ㅠㅠ
BlogIcon isul 수정/삭제
2011/06/08 01:13
남겨주신 코드 상에는 별 문제가 없는 거 같습니다.
spl 클래스만 있으면 실행에는 문제가 없어야 되는데요..
저도 원인을 모르겠네요.
주희 수정/삭제 답변하기
2011/06/07 14:28
안드로이드 사진 하나로 움직이게 하고싶거든요
하고싶은건 새(사진)가 왼쪽에서 오른쪽으로 계속 반복되며 움직이게 하고싶은데
전혀 초보라 구현 방법을 모르겠네요............ㅠㅠ
BlogIcon isul 수정/삭제
2011/06/07 14:34
정확히 어떤 것을 원하시는지 모르겠네요..
일반적으로 특정 객체를 움직일 때는 Animation을 이용하면 편리합니다.
이동에는 TransitionAnimation 클래스를 이용하면 되겠네요.
Animation으로 원하는 것이 안될 경우에는 Canvas에 직접 그려야 되겠죠..
어렵다 수정/삭제 답변하기
2011/06/07 14:43
텍스트입력 창을 띄워서 거기에 값을 넣으면 디비에 저장하고 싶은데
텍스트 입력 창 띄우는 방법 좁 알려주세요!
BlogIcon isul 수정/삭제
2011/06/08 01:18
간단한 입력 창은 AlertDialog에 EditText 하나 올리면 되구요.
AlertDialog.Builder alert = new AlertDialog.Builder(context);
alert.setView(editText);
AlertDialog로 검색해보세요. 많이 나옵니다.

좀 복잡하다면 그냥 Layout 구성해서 Activity 하나 만드는 게 좋겠죠..
ch 수정/삭제 답변하기
2011/07/05 23:57
시간걸리는 작업 처리하는 부분에서 오래걸리는 작업을 수행하면, 그 작업을 전부 수행할 때 까지 로딩화면을 안띄우다가, 다 끝나고 나서야 로딩화면을 띄우고, 3초 후에 메인화면을 띄우네요.... 또 화면을 돌리면 다시 로딩화면부터하구요.. 왜그런가요?
BlogIcon isul 수정/삭제
2011/07/06 10:14
위에 설명을 수정하였습니다.
초기화 작업을 위해서는 쓰레드처리를 해야 됩니다.
처음 글 작성 시 이 부분을 언급하려다 귀찮아서 안했습니다.
화면 돌리면 다시 로딩되는 부분은 글 마지막 부분의 AndroidManifest.xml 부분을 다시 확인해보세요.

예제 프로젝트도 첨부하였습니다.
강식 수정/삭제 답변하기
2011/08/17 00:23
인트로띄우고나서 로그인띄우려고 합니다.
handleMessage부분에 fisnish()하고 startActivity(로그인)했거든요.
별 이상은 없는데, 인트로뜨고 로그인뜨기전에 바로 백버튼눌러서 종료했는데
2초후에 로그인이 뜨네요. 이러면안될것같은데요.
이처럼 액티비티들의 실행을 보통 어떻게 구현을 하나요?
BlogIcon isul 수정/삭제
2011/08/17 22:32
인트로 액티비티에서 백버튼 누르는 것을 검사하여 무시하도록 하거나, 백버튼 눌렀을 경우 특정 변수 값을 설정하여 startActivity(로그인)이 호출되지 않도록 처리하면 될것 같습니다.
챙이 수정/삭제 답변하기
2011/12/03 15:31
유용한글 감사합니다. 인토로가 1개가 아니고 2개인 경우에는 어떻게 하나요?
지금 알려주신 방법은 인트로에서 메인화면으로 넘어가는 방법인데 제가 하고싶은 방법은 인트로1에서 인토로2로 넘어가고 다시 인트로2에서 메인으로 넘어가는걸 원하는데 어떻게하는게 좋을까요?
BlogIcon isul 수정/삭제
2011/12/03 23:12
SplashActivity.java의 handleMessage() 부분에서
finish() 하기 전에 두 번째 인트로 액티비티를 띄우면 되겠죠..
두 번째 인트로 액티비티는 첫 번째 인트로인 SplashActivity와 동일하게 하면 되겠죠..
소소창 수정/삭제 답변하기
2011/12/06 20:13
블로그에 댓글 잘 안남기는데.. 너무나 깔끔한 자료에 감사한 마음 갖고 갑니다 ^^
BlogIcon isul 수정/삭제
2011/12/07 00:35
예.. 고맙습니다^^
류작가 수정/삭제 답변하기
2012/01/19 21:28
샘플소스 깔금하게 잘보고갑니다. 그런데 동영상파일로 로딩은 불가능 한건가요?
BlogIcon isul 수정/삭제
2012/01/20 13:23
시도해보지는 않았지만 SplashActivity에 동영상 플레이어 구현하면 문제 없을 거 같은데요..
june 수정/삭제 답변하기
2012/02/06 13:18
소스 그대로 사용했는데 처음 켜자마자 force close 뜨네요.
nullpointerException이라는데 저같은분 안계신가요? 잘 안되서 힘드네요 ㅠ
BlogIcon isul 수정/삭제
2012/02/07 22:51
프로젝트 클린한 다음에 다시 해보세요..
아직까지 문제 있다는 얘기는 못 들어봤습니다.
어느 라인에서 에러가 발생하는지 알려주시지 않아서.. 도움을 드릴 수가 없네요..
SecretComment
     
 팁 모음/프로그래밍 
안드로이드(Android) 에뮬레이터(emulator)에서 시리얼 통신하기
Posted on 2010/07/29 18:30
에뮬레이터 실행
C:\android\tools\emulator.exe -avd Android.2.0.1 -verbose -qemu -serial COM4

안드로이드 에뮬레이터에 쉘 접속
c:\adb kill-server
c:\adb devices
C:\adb shell

안드로이드 에뮬레이터 쉘에서 명령 실행
#cd /data/bin
# ./busybox microcom -s 300 /dev/ttyS2
./busybox microcom -s 300 /dev/ttyS2
connected to '/dev/ttyS2' (300 bps), exit with ctrl-X...
*0100P3
*000114.2696
*0100P3
*000114.2695

시리얼 통신용 프로그램을 만들어서 테스트
# ./seriald
./seriald
 ttyS0 ttyS1 ttyS2
recv: *000114.2712
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
android, emulator, serial, 시리얼통신, 안드로이드, 에뮬레이터
Trackback [0] : Comment [10]
TrackbackAddress
http://isulnara.com/tt/trackback/223
소바 수정/삭제 답변하기
2010/09/08 11:10
안드로이드 기반에서 시리얼 통신에 관한 정보를 찾다 글을 보고 왔습니다만
잘 이해가 안되서 글 올립니다.
현재까지 수집한 정보로 안드로이드에서는 시리얼 통신이 안된다고 알고 있었는데 사용할수 있는 방법이 있으면
정보를 얻고 싶습니다.
무례한 부탁일지도 모릅니다만 안드로이드에서 시리얼 통신을 할수 있는 방법이 있으면 자세히좀 알고 싶습니다.

sobakr@gmail.com
BlogIcon isul 수정/삭제
2010/09/08 12:36
안드로이드에서도 시리얼 통신이 됩니다.

자바로 앱을 만드는 경우와 C나 Pascal 같은 언어로 개발하는 방법 등이 있습니다.
먼저 C나 Pascal 같은 언어로 개발하는 경우에는 일반적으로 PC에서 시리얼 통신 프로그램을 개발하는 것과 동일하며, 크로스 컴파일만 하면 됩니다. 에뮬레이터에서 테스트하기 위해서 장치만 /dev/ttyS2로 설정했습니다.
전 프리 파스칼로 개발했습니다.

자바로 앱을 만들 경우는 조금 복잡합니다. 기본 API에 시리얼통신 관련된 것이 없습니다. 그래서 NDK를 이용하여 C로 시리얼통신을 하는 라이브러리(*.so)를 만들고, 자바에서 JNI를 이용하여 그 라이브러리를 불러다 사용해야 됩니다.
저는 NDK를 이용하여 시리얼 포트를 제어하는 함수를 만들고 그 함수를 JNI를 이용하여 자바로 만든 앱에서 호출했습니다.(회사에서 안드로이드 기반 하드웨어를 개발하고 있는 중이라서 에뮬레이터에서만 동작됨을 확인했습니다)
구글에서 배포하는 NDK 예제 소스가 있으니 참고하시면 됩니다.

NDK나 JNI를 이용하지 않는 방법으로는 C나 Pascal 같은 언어로 시리얼 통신용 프로그램(데몬)을 만들고, TCP Server를 띄우고, 자바로 만든 앱에서 localhost TCP Server에 접속하여 데이터를 요청하면 C로 만든 프로그램(데몬)에서 시리얼포트를 통하여 데이터를 받고, 다시 앱으로 넘겨주는 방법도 있습니다.
수정/삭제 답변하기
2011/09/21 10:57
관리자만 볼 수 있는 댓글입니다.
BlogIcon isul 수정/삭제
2011/09/21 22:16
안녕하세요.
아래 사이트에 들어가시면 NDK 받을 수 있고, 그 안에 예제 소스가 많이 들어가 있습니다. c로된 라이브러리와 안드로이드 앱에서 불러오는 예제 모두 있습니다.
http://developer.android.com/sdk/ndk/index.html
수정/삭제 답변하기
2011/09/29 10:12
관리자만 볼 수 있는 댓글입니다.
BlogIcon BongGyun 수정/삭제 답변하기
2011/11/02 17:38
안녕하세요.
안드로이드 기반 장치에서 시리얼 통신 관련 정보를 검색하다보니 이글에 오게되었네요.

에뮬레이터에서 실행하는 것을 따라해보고있는데
시리얼포트를 열때 실패하게되네요;

혹시라도 저와 같은 에러 겪으신적있는지,,

에러는 아래와 같습니다.
Failed CreateFile (2)
ko:qemu: could not open serial device 'COMxx'
BlogIcon isul 수정/삭제
2011/11/04 11:06
C:\android\tools\emulator.exe -avd Android.2.0.1 -verbose -qemu -serial COM4
에러가 위 명령에서 발생하는지요?
먼저 하이퍼터미널 같은 프로그램으로 해당 COM 포트가 오픈되는지 먼저 확인해보세요..
위 명령을 내리기 전에 해당 포트를 오픈하고 있는 다른 프로그램이 있어서는 안되며, -avd 다음에 나오는 Android.2.0.1은 생성하신 Android Virtual Device 명으로 설정해야 됩니다.
BlogIcon BongGyun 수정/삭제 답변하기
2011/11/04 15:43
답변감사합니다.
해당 명령에서 에러가 발생하는것이 맞고, avd의 명칭도 제가 생성한 것으로 잘 작성하엿는데 에러가 납니다...
C#을 이용하여 간단히 시리얼포트 프로그램을 작성하여 테스트를 해보니, 잘 작동합니다.

안드로이드로 시리얼 통신을 해야하는데,, 정말 갈길이 멀고 막막하네요
BlogIcon isul 수정/삭제
2011/11/08 00:28
저도 왜 에러가 발생되는지 모르겠네요..
Win이라면 관리자 권한으로 실행되었는지도 확인해보시고, 시리얼 포트도 한 번 변경해보세요.
그리고, 제가 블로그에 게시한 시리얼 통신 방법은 단독으로 동작되는 실행 프로그램 형식입니다.
혹시나 앱에서 시리얼 통신을 해야 된다면 위와 같은 방법으로 하는 것보다는 JNI를 이용하는 방법이 좋을 것입니다.
BlogIcon BongGyun 수정/삭제 답변하기
2011/11/08 11:00
일단 에러는 해결하였습니다!
COM포트가 13에 잡혀있었는데 1로 변경하니 성공했네요;;

감사합니다
SecretComment
  1