' IOT 기반 응용 SW과정 > Review' 카테고리의 다른 글

jQuery css  (0) 2016.08.03
안드로이드 on/off 버튼?  (0) 2016.08.03
jQuery select option value  (0) 2016.07.26
jsp 마우스 액션  (0) 2016.07.07
CSS 반응형 웹 디자인  (0) 2016.06.21
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
//#include <enc28j60.h>
#include <EtherCard.h>
//#include <net.h>
 
  static byte mymac[] =  { 0x74,0x69,0x69,0x2D,0x30,0x31 };
  byte Ethernet::buffer[700];
 
void setup() {
  // put your setup code here, to run once:
 Serial.begin(9600);
 
 if (ether.begin(sizeof Ethernet::buffer, mymac) == 0
    Serial.println(F("Failed to access Ethernet controller"));
 
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed"));
  ether.printIp("My IP: ", ether.myip);
  ether.printIp("Netmask: ", ether.netmask);
  ether.printIp("GW IP: ", ether.gwip);
  ether.printIp("DNS IP: ", ether.dnsip);
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}
cs


PIN Connections (Using Arduino UNO):

VCC -   3.3V
GND -    GND
SCK - Pin 13
SO  - Pin 12
SI  - Pin 11
CS  - Pin  8 # Selectable with the ether.begin() function




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  const char website[] PROGMEM = "www.google.com";
  static byte hisip[] = {내 ip};
  static uint32_t timer;
 
 
void setup() {
 
  ether.hisport = 8080;
  ether.copyIp(ether.hisip, hisip);
}
 
void loop() {
  // put your main code here, to run repeatedly:
   if (millis() > timer) {
   timer = millis() + 5000;
    Serial.println();
    Serial.print("<<< REQ ");
  ether.packetLoop(ether.packetReceive());
  ether.browseUrl(PSTR("/Spring_Hello/"), "hello.do""내 ip"NULL);
  delay(1000);
}}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void setup() {
  // put your setup code here, to run once:
  pinMode(13,OUTPUT);
  pinMode(3,INPUT);
  Serial.begin(19200);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(13,HIGH);
  delay(1000);
  digitalWrite(13,LOW);
  delay(1000);
  Serial.println(digitalRead(3));
}
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int ledPin = 5;
int buttonApin = 9;
int buttonBpin = 8;
 
byte leds = 0;
 
void setup() 
{
  pinMode(ledPin, OUTPUT);
  pinMode(buttonApin, INPUT_PULLUP); 
  pinMode(buttonBpin, INPUT_PULLUP); 
}
 
void loop() 
{
  if (digitalRead(buttonApin) == LOW)
  {
    digitalWrite(ledPin, HIGH);
  }
  if (digitalRead(buttonBpin) == LOW)
  {
    digitalWrite(ledPin, LOW);
  }
}
cs


Bridge모드

가상머신의 가상의 이더넷카드가 호스트의 이더넷카드와 동급으로 게이트웨이에 달라붙는 방식

Host-only모드


NAT모드

Liunx 명령어

ls : 파일 리스트

pwd : 현재 위치 확인

cd [폴더이름] : 폴더로 들어가기

tab키 : 자동완성

echo [출력할 데이터] : 데이터 출력


폴더경로

/ -> 루트

. -> 현재

.. -> 바로 위

~ -> 사용자 홈



아두이노 LCD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <LiquidCrystal.h>
 
//초기화를 위한 기본적인 인터페이스 핀 리스트
LiquidCrystal lcd (3410111213);
 
void setup() {
  // put your setup code here, to run once:
  lcd.begin(16,2); //가로 16칸, 세로 2칸
  lcd.clear();
}
 
void loop() {
  // put your main code here, to run repeatedly:
  lcd.setCursor(0,0);
  lcd.print("Hello arduino");
  lcd.setCursor(0,1);
  lcd.print("welcome to hell");
}
cs





안드로이드 스튜디오 단축키 설정 - 이클립스



안드로이드 뷰페이저


뷰페이저에 현재 보이는 화면을 그리는 방법은 직접xml파일을 인플레이션해서 배치하던가, 프레그먼트 단위로 박아야한다.

1
2
3
4
5
6
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/viewpager">
             
    </android.support.v4.view.ViewPager>
cs


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
 
public class MainActivity extends Activity {
 
    private Button btn1;
    private Button btn2;
    private Button btn3;
    private ViewPager viewPager;
    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        viewPager = (ViewPager) findViewById(R.id.viewpager);
        btn1.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                viewPager.setCurrentItem(0);
                
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                viewPager.setCurrentItem(1);
                
            }
        });
        btn3.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                viewPager.setCurrentItem(2);
                
            }
        });
        viewPager.setAdapter(new PagerAdapter() {
            
            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                // TODO Auto-generated method stub
                return arg0 == arg1;
            }
            
            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return 3;
            }
 
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                // TODO Auto-generated method stub
//                super.destroyItem(container, position, object);
                //container == viewpager
                //object == 현재 페이지에 박혀있는 view
                ((ViewPager) container).removeView((View)object);
            }
 
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                // TODO Auto-generated method stub
//                return super.instantiateItem(container, position);
                //position에 해당하는 뷰를 인플레이션해서
                //뷰페이저인 container에 addview
                View view = null;
                switch (position){
                case 0:
                    view = getLayoutInflater().inflate(R.layout.page_first, container,false);
                    break;
                case 1:
                    view = getLayoutInflater().inflate(R.layout.page_second, container,false);
                    break;
                case 2:
                    view = getLayoutInflater().inflate(R.layout.page_third, container,false);
                    break;
                }
                ((ViewPager)container).addView(view);
                return view;
            }
            
        });
        
        
    }
}
 
cs


' IOT 기반 응용 SW과정 > Android, Arduino' 카테고리의 다른 글

Day117 아두이노 이더넷 통신  (0) 2016.09.08
Day115 아두이노  (0) 2016.09.06
Day110 아두이노  (0) 2016.08.30
Day109 아두이노  (0) 2016.08.29
Day107 안드로이드 브로드캐스트리시버  (0) 2016.08.25

1. 시리얼이란?

시리얼은 거의 모든 PC에서 표준으로 사용되는 디바이스 통신 프로토콜입니다. 시리얼의 개념을 USB의 개념과 잘 구분하십시오. 대부분의 컴퓨터에는 2개의 RS232 기반 시리얼 포트가 있습니다. 시리얼은 또한 여러가지 디바이스에서 계측을 위한 일반 통신 프로토콜이며, 여러 GPIB 호환 디바이스에는 RS232 포트가 장착되어 있습니다. 뿐만 아니라, 원격 샘플링 디바이스로 데이터 수집을 하는 경우에도 시리얼 통신을 사용할 수 있습니다.

시리얼 통신의 개념은 간단합니다. 시리얼 포트는 정보의 바이트를 한번에 한 비트씩 순차적으로 송수신합니다. 한번에 전체 바이트를 동시에 전달하는 병렬 통신과 비교하면 시리얼 통신은 속도가 느리지만 훨씬 간단하며 장거리에도 사용할 수 있습니다. 예를 들어, 병렬 통신용 IEEE 488 스펙을 보면 기기간 케이블링은 총 20 m 미만이어야 하며, 두 개의 디바이스간은 2 m 미만이어야 합니다. 반면 시리얼 통신은 최대 1.2 Km의 통신거리를 보장합니다.

통상 엔지니어들은 ASCII 데이터를 전송할 때 시리얼 통신을 사용합니다. 이 때 송신용 (Tx), 수신용 (Rx), 그라운드용 (GND)의 세 가지의 전송 라인을 사용하여 통신합니다. 시리얼은 비동기식이므로 포트는 한 라인에서 데이터를 전송하고 다른 라인에서 데이터를 수신합니다. 핸드쉐이킹용 라인도 사용 가능하지만 필수 요구사항은 아닙니다. 시리얼 통신의 가장 중요한 특징에는 보드 속도 (baud rate), 데이터 비트, 정지 비트, 패리티가 있습니다. 두 개의 포트가 통신하기 위해서는 이러한 파라미터가 반드시 적절하게 맞춰져야 합니다.


1
2
3
4
5
6
7
8
9
10
11
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello world");
  delay(1000);
}
cs

시리얼 모니터

아두이노에는 특별한 디버깅할만한 수단이 마땅치 않은데, 시리얼 모니터를 안드로이드 로그캣처럼 사용



1
2
3
4
5
6
7
8
9
10
11
12
SoftwareSerial mySerial(10,11);
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  mySerial.begin(9600);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  Serial.println("Hello world");
Serial.write(1);
  delay(1000);
}
cs



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
32
33
34
35
36
37
38
39

7 segment에 시그널로 입력받은 숫자 출력하기

int signal[10][7= {
  { 0,0,0,0,0,0,1 }, //0
  { 1,0,0,1,1,1,1 }, //1
  { 0,0,1,0,0,1,0 },  //2
  { 0,0,0,0,1,1,0 },  //3
  { 1,0,0,1,1,0,0 }, 
  { 0,1,0,0,1,0,0 }, 
  { 0,1,0,0,0,0,0 }, 
  { 0,0,0,1,1,1,1 },  
  { 0,0,0,0,0,0,0 }, 
  { 0,0,0,1,1,0,0 }   
};
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
}
 
void showNum(int num){
  int pin = 2;
  int index = 0;
  for( pin = 2; pin <9; pin++,index++){
    digitalWrite(pin, signal[num][index]);
  }
}
 
void loop() {
if(Serial.available()){
  showNum(Serial.parseInt());    
  }
  
}
cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void setup() {
  // put your setup code here, to run once:
  pinMode(11,OUTPUT); 불이 천천히 밝아졌다가, 천천히 어두워지기
}
 
void loop() {
  // put your main code here, to run repeatedly:
  int i = 0;
  for( i = 0; i <255; i++)
  {
    analogWrite(11,i);
    delay(10);
  }
  for(i = 255; i >0; i--)
  {
    analogWrite(11,i);
    delay(10);
  }
  digitalWrite(11,0);
}
cs


   보모터 

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
#include <Servo.h>
Servo myServo; //서보 기능덩어리를 선언(객체레가 보셔도됨)
 
void setup() {
  // put your setup code here, to run once:
  myServo.attach(10); //servo모터가 사용할 핀번호를 attach메소드에 전달
}
 
void loop() {
  // put your main code here, to run repeatedly:
    int angle;    //각도 변수 선언
    
    //0 -> 180도로 서보모터 움직임
    for (angle = 0; angle < 180; angle++)
    {
        myServo.write(angle);    //angle(각도)값으로 서보모터 제어
        delay(15);                    //delay로 각도의 변화 속도를 조절
    }
    //180 -> 0도로 서보모터 움직임
    for (angle = 180; angle > 0; angle--)
    {
        myServo.write(angle);    //angle(각도)값으로 서보모터 제어
        delay(15);                    //delay로 각도의 변화 속도를 조절
    }
}
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
피에조 부저를 이용한 도레미파솔라시도

int speakerpin = 12//스피커가 연결된 디지털핀 설정
int note[] = {2093,2349,2637,2793,3136,3520,3951,4186}; //도레미파솔라시도
 
void setup() {
  int elementCount = sizeof(note) / sizeof(int);
  for (int i=0; i < elementCount; i++)    //note를 play
  {
    tone(speakerpin,note[i],300);
    delay(750);
  }
}
 
void loop() {
}
 
cs


아두이노 : 마이크로 컨트롤러(micro controller)를 제어하는 방법중 하나,

입력(센서),출력(제어)을 할 수 있는 프로세서와 메모리를 갖춘 소형 컴퓨터




circuits.io

연습용 사이트

브로드캐스트 : OS가 시스템의 상태 정보를 모든 어플리케이션에 알리는 방송


브로드캐스트리시버 : 브로드캐스트를 수신하기 위한 어플리케이션의 구성요소


브로드캐스트리시버 만드는 방법

- 브로드캐스트리시버클래스를 상속받는 클래스 작성
- 해당 클래스를 매니패스트에 구성요소로 등록
- 해당 클래스에 onReceive구현


1
2
3
4
5
6
7
8
9
10
        <receiver 
            android:name=".MyBroadcastReceiver">
            <intent-filter >
 
            브로드캐스트 리시버 정적으로 등록하는 방법
            구현한 브로드캐스트리시버 클래스를 receiver태그로 등록하고
            수신할 액션을 intent-filter에 정의
 
            </intent-filter>
        </receiver>
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class MainActivity extends Activity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        BroadcastReceiver br = new MyBroadcastReceiver();
        registerReceiver(br, new IntentFilter(Intent.ACTION_SCREEN_OFF));
        registerReceiver(br, new IntentFilter(Intent.ACTION_SCREEN_ON));

        //동적으로 등록하는 방법(manifest엔 없어도됨)
        //동적으로하면,, 브로드캐스트리시버를 넣었다뺏다 할 수 있고
//        몇몇 액션에 대해서는 보안상의 이유로 동적으로만 등록 가능
    }
}
cs

1
2
3
4
5
6
            <intent-filter >
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
            </intent-filter> 문자수신액션
 
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
 
cs



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
32
33
34
35
36
37
38
39
40
41
42
import java.util.Date;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
 
public class MyBroadcastReceiver extends BroadcastReceiver{
 
    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Bundle bundle = intent.getExtras();
        Object[] messages = (Object[]) bundle.get("pdus");
        SmsMessage[] smsMessage = new SmsMessage[messages.length];
 
        for(int i = 0; i < messages.length; i++) {
            // PDU 포맷으로 되어 있는 메시지를 복원합니다.
            smsMessage[i] = SmsMessage.createFromPdu((byte[])messages[i]);
        }
 
        // SMS 수신 시간 확인
        Date curDate = new Date(smsMessage[0].getTimestampMillis());
        Log.d("문자 수신 시간", curDate.toString());
 
        // SMS 발신 번호 확인
        String origNumber = smsMessage[0].getOriginatingAddress();
 
        // SMS 메시지 확인
        String message = smsMessage[0].getMessageBody().toString();
        Log.d("문자 내용""발신자 : "+origNumber+", 내용 : " + message);
        
        SmsManager smsManager = SmsManager.getDefault();
        String sendTo = "010xxxxxxxx";
        String myMessage = message;
        smsManager.sendTextMessage(sendTo, null, myMessage, nullnull);
    }
 
}
cs

1
2
    <uses-permission android:name="android.permission.SEND_SMS"/>
 
cs


' IOT 기반 응용 SW과정 > Android, Arduino' 카테고리의 다른 글

Day110 아두이노  (0) 2016.08.30
Day109 아두이노  (0) 2016.08.29
Day105 안드로이드 웹뷰  (0) 2016.08.19
Day103  (0) 2016.08.17
Day102 안드로이드  (0) 2016.08.11

웹뷰는 안드로이드 위젯의 한 종류로 내장 웹브라우저

안드로이드 앱 안에서 HTML을 호출하여 앱을 구현하는 하이브리드 형태의 앱을 개발하는데도 많이 사용된다.

하이브리드 앱은 네이티브앱에 비해 개발이 비교적 쉽고, 기기간 호환성을 해결하기 상대적으로 편하다는 장점이 있으며,

HTML기반인 만큼 상대적으로 반응성이 약하고, 애니메이션등의 다양한 UI효과를 넣기 어렵다.


그럼에도 불구하고 SNS나 기타 서비스 앱에서는 타 웹사이트 링크로 가는 기능들을 제공하기 위해 웹뷰가 많이 사용된다.

웹뷰에 사용되는 브라우저는 우리가 일반적으로 사용하는 브라우저 수준은 아니며, 

안드로이드 OS에 맞게 일부 기늘들을 제외한 아주 기본적인 웹브라우저이다.


모바일 웹페이지    //    하이브리드 앱    //    네이티브 앱


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
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" 
    android:orientation="vertical">
    
    <RelativeLayout 
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <EditText 
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_toLeftOf="@+id/main_btn_search"
        android:id="@+id/main_edt_url"/>
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:id="@+id/main_btn_search"/>
    </RelativeLayout>
    <WebView 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/main_webView"/>
 
 
</LinearLayout>
 
cs


귄한부여(Manifest)

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



1
2
3
4
5
6
7
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" 
        android:hardwareAccelerated="true">
  하드웨어가속사용(성능향상) : 웹뷰나 미디어재생같은 기능 사용시
cs

findViewById

1
2
3
4
5
6
7
8
9
10
11
    private EditText uriEdt;
    private Button searchBtn;
    private WebView webview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        uriEdt = (EditText) findViewById(R.id.main_edt_url);
        searchBtn = (Button) findViewById(R.id.main_btn_search);
        webview = (WebView) findViewById(R.id.main_webView);
    }
cs

1
2
3
4
        //이 함수를 생략하면 어플 위에 새창이 뜬다.
        webview.setWebViewClient(new WebViewClient());
        
        webview.loadUrl("http://pikac.tistory.com");
cs


1
2
3
4
5
6
7
8
9
10
11
12
        searchBtn.setOnClickListener(new View.OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                String url = uriEdt.getText().toString();
                if(!url.startsWith("http://")){
                    url = "http://" +url;
                }
                webview.loadUrl(url);
            }
        });
cs



1
2
3
4
5
6
7
8
9
10
11
        webview.setWebViewClient(new WebViewClient(){
 
            @Override
            public void onPageFinished(WebView view, String url) {
                // TODO Auto-generated method stub
                super.onPageFinished(view, url);
                urlEdt.setText(url);
                //page가 다 불려졌을때 현재 url을 url입력창에 세팅
            }
            
        });
cs



1. 웹브라우저스럽게 앞으로가기, 뒤로가기 버튼 추가, 눌렸을 때 웹브라우저 히스토리를 이용해 앞 뒤 이동하기

1
2
webview.goBack(); 뒤로가기
webview.goForward(); 앞으로가
cs

1
2
gobackBtn.setEnabled(webview.canGoBack());
goforwardBtn.setEnabled(webview.canGoForward());
   이동할곳 없을 시 비활성화cs



2. 외부가 아닌 html파일을 저장해놓고 로드하기

1
webview.loadUrl("file:///android_asset/ladder.html");
cs


3. 자바스크립트 코드 동작하기

1
webview.getSettings().setJavaScriptEnabled(true);
cs

4. 북마크 저장하기

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
32
public class Bookmark {
    private int _id;
    private String name;
    private String url;
    private Date redDate;
    public int get_id() {
        return _id;
    }
    public void set_id(int _id) {
        this._id = _id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public Date getRedDate() {
        return redDate;
    }
    public void setRedDate(Date redDate) {
        this.redDate = redDate;
    }
    
} 모델 생성
 
cs


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;
 
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
 
public class BookmarkDBmanager {
    private static final String DB_NAME = "bookmark.db";
    private static final String TABLE_NAME = "bookmark";
    public static final int dbVersion = 1;
    
    private SQLiteDatabase db;
    private Context context;
    private SQLiteOpenHelper openHelper;
    
    private class MySQLiteOpenHelper extends SQLiteOpenHelper{
        
        
        public MySQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {
            super(context, name, factory, version);
            // TODO Auto-generated constructor stub
        }
 
        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            String sql = "create table"+TABLE_NAME + "id integer primary key autoincrement,"
                    + " name text, url text, regdate text";
            db.execSQL(sql);
            
        }
 
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // TODO Auto-generated method stub
            
        }
        
    }
    public BookmarkDBmanager(Context context){
        this.context = context;
        this.openHelper = new MySQLiteOpenHelper(context, DB_NAME, null, dbVersion);
        db = openHelper.getWritableDatabase();
    }
    public void insertBookmark(Bookmark bookmark){
        ContentValues params = new ContentValues();
        params.put("name", bookmark.getName());
        params.put("url", bookmark.getUrl());
        params.put("regdate"new SimpleDateFormat("yyyy-MM-dd").format(bookmark.getRedDate()));
        db.insert(TABLE_NAME, null, params);
    }
    public List<Bookmark> selectAll(){
        Cursor cursor = db.rawQuery("select * from "+TABLE_NAME, null);
        List<Bookmark> list = null;
        while(cursor.isAfterLast()){
            Bookmark bookmark = new Bookmark();
            bookmark.setName(cursor.getString(1));
            bookmark.setUrl(cursor.getString(2));
            try {
                bookmark.setRedDate(new SimpleDateFormat("yyyy-MM-dd").parse(cursor.getString(3)));
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            list.add(bookmark);
            cursor.moveToNext();
        }
        return list;
    }
}
 
cs


' IOT 기반 응용 SW과정 > Android, Arduino' 카테고리의 다른 글

Day109 아두이노  (0) 2016.08.29
Day107 안드로이드 브로드캐스트리시버  (0) 2016.08.25
Day103  (0) 2016.08.17
Day102 안드로이드  (0) 2016.08.11
Day101  (0) 2016.08.10

- 웹뷰(웹앱의 기반)

- 아직 안한 안드로이드 구성요소 
 : 서비스( 화면이 없는 명령처리 흐름 ) -> 다운로드, 음악재생....
 : 브로드캐스트리시버 (os로부터) -> SMS수신
    sms를 수신하면 특정 이메일이나 문자로 전달하는 예제

 : 컨텐트프로바이더 -> 같은 기기에 설치된 서로 다른 앱 간에 데이터 공유
  (생략)


- 위치정보 활용

- 미디어 활용

- 센서정보 활용


스프링에서 json으로 응답하기

- 필요한 라이브러리
 -> 잭슨 매퍼data-bind/잭슨 매퍼asl

- 서블릿 설정파일에 mvc:annotation-dirven태그 추가

- 응답합 컨트롤러 작성(리턴값을 데이터로, 그 앞에 @ResponseBody 달기)

1
2
3
4
5
6
7
8
9
10
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.8.1</version>
        </dependency>
cs

1
2
3
4
5
6
7
8
    <servlet>
        <servlet-name>json</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>json</servlet-name>
        <url-pattern>*.json</url-pattern>
    </servlet-mapping>
cs


' IOT 기반 응용 SW과정 > Android, Arduino' 카테고리의 다른 글

Day107 안드로이드 브로드캐스트리시버  (0) 2016.08.25
Day105 안드로이드 웹뷰  (0) 2016.08.19
Day102 안드로이드  (0) 2016.08.11
Day101  (0) 2016.08.10
Day99 안드로이드 파일 복사  (0) 2016.08.08

+ Recent posts