반응형
블로그 이미지
개발자로서 현장에서 일하면서 새로 접하는 기술들이나 알게된 정보 등을 정리하기 위한 블로그입니다. 운 좋게 미국에서 큰 회사들의 프로젝트에서 컬설턴트로 일하고 있어서 새로운 기술들을 접할 기회가 많이 있습니다. 미국의 IT 프로젝트에서 사용되는 툴들에 대해 많은 분들과 정보를 공유하고 싶습니다.
솔웅

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

카테고리


반응형

회사에서 앞으로 Hybrid 앱 쪽을 고민하는 것 같습니다.

지금까지 저희 팀에서는 모바일 웹 어플리케이션만 만들었는데요.


이번에 Hybrid 관련해서도 관심을 가지더라구요.


일단 제가 알아볼 기술은 아래 3가지 입니다.


1) 현재 디바이스가 네트워크와 연결 상태에 있는지 여부

2) 현재 연결된 네트워크 이름 알아낼 수 있는지 여부 (WiFi 이면 그 이름도)

3) 현재 특정 앱이 디바이스에 깔려 있는지 여부 알아내기 (혹은 실행하기)


이 세가지인데요.


제가 알아낸 것은 PhoneGap 에서 지원하는 Connection 이라는 API 입니다.

이 API 로 1번 문제는 해결할 수 있었습니다.


인도에 있는 팀에서 플러그인을 만들어서 2번 문제까지도 해결을 했는데요.

아마 PhoneGap 과 Java와 JS 등등을 사용해서 해결한 것 같더라구요.

나중에 소스 분석 좀 해 봐야겠어요.


3번은 아직 방법을 찾지 못했습니다.

안드로이드나 iOS Native language 를 사용해서 해결해야 될 것 같기도 하고 아니면....

웹 기술로도 모바일 기기의 이메일, 카메라, SMS 등을 실행시킬수 있는 걸로 봐서 간단하게 해결 할 수도 있을 것 같기도 한데...


좀 더 연구해 봐야겠습니다.


일단 이 글에서는 제가 알아본 PhoneGap 의 Connection 을 이용한 예제를 정리해 놓겠습니다.




결과화면은 이렇습니다. 처음 시작할 때나 'Click It 버튼을 클릭할 때 Alert 화면으로 현재 연결된 네트워크 Type 을 보여 줍니다.


우선 파일 구조부터 살펴 보죠.



우선 PhoneGap 프로젝트를 만듭니다.

자세한 내용은 이전글을 참조하시구요.


우선 빨간 줄을 그은 파일들은 그냥 복사만 해 넣으면 되는 겁니다.

폰갭 다운 받은 폴더에서 해당 파일을 복사해서 넣으세요.

이것도 이전글을 참조하세요. config.xml 은 지난번에는 복사해 넣지 않은건데 이번엔 복사해 넣으셔야 됩니다.


이 파일에서 PhoneGap 에서 지원하는 기능들을 사용할 경우 해당하는 플러그인을 불러올거거든요.


그 다음 파란줄로 그은 파일들이 여러분이 손을 보셔야 될 파일들 입니다.

일단 MainActivity.java 파일들을 보죠.


package com.example.test;

import org.apache.cordova.*;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends DroidGap {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        super.loadUrl("file:///android_asset/www/index.html");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

처음 Android Project 를 만들면 약간 다르게 돼 있을겁니다.

자세한 내용은 역시 이전글에 있습니다. 참고하세요.


주요한 코딩은 index.html 부분에 있습니다.


<!DOCTYPE html>
<html>
  <head>
    <title>navigator.connection.type Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova-2.2.0.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for Cordova to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // Cordova is loaded and it is now safe to make calls Cordova methods
    //
    function onDeviceReady() {
        checkConnection();
    }

    function checkConnection() {
        var networkState = navigator.network.connection.type;

        var states = {};
        states[Connection.UNKNOWN]  = 'Unknown connection';
        states[Connection.ETHERNET] = 'Ethernet connection';
        states[Connection.WIFI]     = 'WiFi connection';
        states[Connection.CELL_2G]  = 'Cell 2G connection';
        states[Connection.CELL_3G]  = 'Cell 3G connection';
        states[Connection.CELL_4G]  = 'Cell 4G connection';
        states[Connection.NONE]     = 'No network connection';

        alert('Connection type: ' + states[networkState]);
    }

    </script>
  </head>
  <body>
  <p><br><p>
    <p>A dialog box will report the network state.</p><br>
    <center><input type="button" value="Click it" onClick="checkConnection()"></center>
  </body>
</html>


이 코드는 PhoneGap API Document에 나와 있는 내용입니다.

제가 덧붙인 부분은 아랫부분에 버튼을 만들고 그 버튼을 클릭하면 checkConnection() 함수를 호출하는 부분입니다.


우선 처음에 시작은 onDeviceReady() 함수에서 합니다.

이 함수는 앱이 시작하면 자동으로 호출되는 함수 같습니다.


이 함수 안에서 checkConnection() 함수를 호출하니까 앱이 시작할 떄 checkConnection()이 동작을 하게 됩니다.


checkConnection() 에는 Cordova API 에서 제공하는 Connection 기능을 구현해 놓았습니다.


navigator.connection.type 로 현재 연결된 Network type 을 받아서 

networkState 변수에 담습니다.

그리고 var states 배열에 각 Network 타입마다 적당한 문장을 대입시켜 넣구요.

alert('Connection type: ' + states[networkState]); 로 해당 배열을 출력시킵니다.


하고 나니 간단하네요.


Test.zip

필요하신 분들은 이 파일을 다운 받아서 실행해 보세요.


Test.apk

위 파일은 안드로이드 애플리케이션으로 빌드한 파일 입니다.


이 파일을 안드로이드 폰에 깔아서 실행시키시면 동작할 겁니다.



반응형


반응형

즐거운 금요일입니다.

일주일간 일을 끝마치고 아주 가뿐한 마음으로 집에 돌아왔습니다.


지난주 차타고 한시간 거리에 있는 한인마트에 가서 이것 저것 사면서 닭똥집도 좀 샀거든요. ^^

와이프가 막걸리도 한병 사고..


오늘 아주 가벼운 마음으로 막걸리에 닭똥집 먹었습니다.


이번 주말에 문재인 후보가 확실히 역전할 거라고 생각하니 기분이 더 좋더라구요.


승리가 눈에 보여서 그런가요?

이쪽이든 저쪽이든 네거티브가 나오면 왠지 조마조마 해 져요.


지금 이 분위기대로 가면 이길 것 같은데... 왠지 이상한 사건 터져서 분위기가 바뀌게 되지 않을 까 해서요.


그러니 여당은 어떻겠어요. 이대로 가면 안되니 어떻게 해서든 뭔가 하나 터트려서 분위기를 확 휘젓고 싶지 않겠어요?


요즘 저는 문재인 후보 에 대한 얘기만 하지 저쪽 후보는 이름도 거론하지 않아요.. ^^


오늘 거기에 딱 맞는 소식이 들리더라구요.


강풀이 그린 '내가 문제인을 지지하는 이유' 라는 만화...


오늘은 그 만화를 보면서 다시 한번 다짐 합니다.

꼭 문재인 후보를 대통령으로 만들자!!!!





반응형

slider 생성 관련 예제들..

2012. 12. 15. 05:54 | Posted by 솔웅


반응형
Examples of manipulation of sliders



Transmit the slider's value to the server


slider 의 값을 서버로 전달하는 것은 이전 글에서 봤듯이  change event에서 구현할 수 있습니다.  이 이벤트는 축에서 버튼을 움직일 때마다 무수히 많이 발생하게 됩니다 서버에 수없이 현재 값을 전달하게 되겠죠... 해결책은 뭘까요?


하나는 축에서 버튼의 움직임이 끝났을 때에만 즉 손가락이나 마우스가 slider에서 떠났을 때에만 서버로 그 값을 전달하는 방법이 있겠고 이렇게 change event가 아닌 다른 이트를 사용하는 방법이 있겠죠.


Transmit the value of the slider to the server by Ajax


<!DOCTYPE html>


<html> 

<head> 

  <meta name=viewport content="user-scalable=no,width=device-width" />

  <link rel=stylesheet href=jquery.mobile/jquery.mobile.css />

  <script src=jquery.js></script>

  <script src=jquery.mobile/jquery.mobile.js></script>

</head> 


<body> 


<div data-role=page id=home>

  <div data-role=header>

    <h1>Home</h1>

  </div>


  <div data-role=content>

    <span> Indicate the number of rooms: </span><br />

    <input type=range min=1 max=100 /><br />

</div>


</body>

</html>


<script>


$("input").live ("slidercreate", function ()

{

  $(".ui-slider").bind ("vmouseup", function (event)

  {

    var value = $("input").val ();

    $.ajax (

    

      url : "action.php", 

      data : { value : value },

      complete : function (xhr, result)

      {

        if (result != "success") return;

        var response = xhr.responseText;

        $("#home div:jqmData(role=content)").append (response);

      }

    });   

  });

});


</script>


change
event를 사용하는 대신에 슬라이더에서 손가락이 떠날때 발생하는
mouseup event를 사용했습니다.


action.php file


<?
$value = $_REQUEST["value"];
$html = "";
$html .= "Value: <span id=txt>$value</span><br />";
echo utf8_encode ($html);
?>



action23.php

tistory542_01.html


아래는 버튼을 몇번 옮기고 난 후의 화면입니다.





Use a submit button to transmit information


이제 서버에 slider이 값을 전달하기 위해 Submit button을 사용해 보겠습니다. slider의 값을 표시하는 새창에는 back 버튼을 표시하겠습니다.      


Use a submit button to transmit the value of the slider


<!DOCTYPE html>


<html> 

<head> 

  <meta name=viewport content="user-scalable=no,width=device-width" />

  <link rel=stylesheet href=jquery.mobile/jquery.mobile.css />

  <script src=jquery.js></script>

  <script src=jquery.mobile/jquery.mobile.js></script>

</head> 


<body> 


<div data-role=page id=home>

  <div data-role=header>

    <h1>Home</h1>

  </div>


  <div data-role=content>

    <form action=action.php>  

      <span> Indicate the number of rooms: </span><br />

      <input type=range min=1 max=100 name=slider /><br />

      <input type=submit value=OK />

    </form>

  </div>

</div>


</body>

</html>



slider와 관계가 있는 <input> element 에는 이제 name attribute가 있는데요 이것은 서버로 슬라이더의 값을 전달할 때 사용될 겁니다.


action.php file


<?
$slider = $_REQUEST["slider"];
?>

<!DOCTYPE html> 
<html> 
<head> 
  <meta http-equiv=Content-Type content=text/html;charset=iso-8859-1 />
</head> 

<body>
<div data-role=page id=win2 data-add-back-btn=true>
  <div data-role=header>
    <h1>Window 2</h1>
  </div>
  
  <div data-role=content>
    <p> Value of slider : <?= $slider ?> </p>
  </div>
</div>
</body>

</html>


action24.php


tistory542_02.html


Change the opacity of an image with a slider


We would like to modify the opacity of an image using a slider. The minimum value is 0 (opacity of 0), the max is 100 (opacity of 1). Note that we do not change the value of the slider from 0 to 1, because it allows only two possible values for the following: 0 or 1.

이제 슬라이더를 이용해서 이미지의 투명도를 조절해 보겠습니다. 미니멈 값은 0이고 맥시멈 값은 100 입니다. 0에서 1이 아니라는 것을 유념해 주세요. 왜냐하면 그렇게 하면 오직 두개의 값만 표시될테니까요.

그런데 투명도의 범위는 0에서 1이니까 이것을 현재 값에서 100으로 나누겠습니다.


Use a slider for varying the opacity of an image


<!DOCTYPE html>


<html> 

<head> 

  <meta name=viewport content="user-scalable=no,width=device-width" />

  <link rel=stylesheet href=jquery.mobile/jquery.mobile.css />

  <script src=jquery.js></script>

  <script src=jquery.mobile/jquery.mobile.js></script>

</head> 


<body> 


<div data-role=page id=home>

  <div data-role=header>

    <h1>Home</h1>

  </div>


  <div data-role=content>

    <span> Change the opacity of the image: </span><br />

    <input type=range min=0 max=100 value=100 /><br /><br /><br />

    <img src=images/jquery.jpg height=50% />

  </div>

</div>


</body>

</html>


<script>


$("input").live ("slidercreate", function ()

{

  $("input").bind ("change", function (event)

  {

    $("img").css ( { opacity : $("input").val () / 100 } );

  });

});


</script>


tistory542_03.html



그 나는 값이 0.29가 되면 아래와 같이 표시될 겁니다.      




반응형