|
개인 일일 보고서 |
문서 번호 : CJW-007 작 성 자 : 최 주 원 날 짜 : 2014. 11. 11(화) |
Android 통신, DB활용, 서비스, 센서 |
|
1. Android 통신 소켓통신을 이용하기 위해 안드로이드 프로젝트로 클라이언트를, 서버는 자바 프로젝트로 만들었다. 하지만 컴퓨터의 서버와 안드로이드 클라이언트로의 접근은 현재 상황으로는 같은 ip주소로 설정해야 테스트가 가능할 것 같다. 톰캣 또한 같은 조건이어야 하여 외부에서 접근하는 방법을 더 찾아봐야겠다.
2. Android DB활용 안드로이드 내에도 데이터베이스시스템을 이용 가능하다는 것을 처음 알았다. 데이터베이스 시스템인 SQLite이다. 테이블 생성과 데이터 삽입, 수정, 삭제는 쿼리문을 사용하여 어렵지 않았다. 백업을 깜빡한 채로 다른 코드를 저장해버려 소스가 꼬여 안드로이드 설치파일로 대신하겠다.
3. Android 서비스 응용프로그램의 서비스와 같은 개념이다. 어플리케이션를 사용중에 백그라운드에서 실행되는 동작을 서비스라고 한다.
간단한 예제를 보면 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" >
<Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="시작" />
<Button android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="중지" />
</LinearLayout>
<activity_main.xml>
시작을 누르면 미리 저장 해 둔 음악파일을 재생시키고 중지 버튼을 눌러 재생중인 파일을 중지한다.
public class MainActivity extends Activity implements xxOnClickListener{
private static final String TAG = "MusicServiceTest"; Button start, stop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
start = (Button)findViewById(R.id.start); stop = (Button)findViewById(R.id.stop);
start.setxxOnClickListener(this); stop.setxxOnClickListener(this); }
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }
@Override public void xxonClick(View v) { // TODO Auto-generated method stub switch(v.getId()){ case R.id.start: Log.d(TAG, "xxonClick() start "); startService(new Intent(this, MusicService.class)); break; case R.id.stop: Log.d(TAG, "xxonClick() stop "); stopService(new Intent(this, MusicService.class)); break; } }
<MainActivity.java>
public class MusicService extends Service{
private static final String TAG = "MusicService"; MediaPlayer player; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; }
@Override public void onCreate() { // TODO Auto-generated method stub Log.d(TAG, "onCreate()");
player = MediaPlayer.create(this, R.raw.sleepaway); player.setLooping(false); }
@Override public int xxonStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub Toast.makeText(this, "Music Service가 시작되었습니다.", Toast.LENGTH_LONG).show(); Log.d(TAG, "xxonStart()"); player.stop(); return super.xxonStartCommand(intent, flags, startId); }
@Override public void onDestroy() { // TODO Auto-generated method stub Toast.makeText(this, "Music Service가 중지되었습니다.", Toast.LENGTH_LONG).show(); Log.d(TAG, "onDestroy()"); player.stop(); }
}
<MusicService.java>
4. Android 센서
스마트폰의 내장된 센서를 잘 활용한다면 품질이 더 뛰어난 게임이나 사용자 인터페이스를 만들 수 있을 것이다.
스마트폰에 내장된 센서들을 출력 public class MainActivity extends Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String report = ""; SensorManager manager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); List<Sensor> sensors = manager.getSensorList(Sensor.TYPE_ALL); report += "전체 센서수: "+sensors.size()+"\n"; int i = 0; for(Sensor s : sensors){ report += ""+ i++ + " name: "+s.getName()+ "\npower: "+s.getPower()+"\nres: "+s.getResolution()+"\nrange: "+s.getMaximumRange()+"\n\n"; } TextView text = (TextView)findViewById(R.id.text); text.setText(report); }
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
12개의 센서가 탑재되어있는 것을 볼 수 있다.
다음 예제는 현재 스마트폰의 방향 센서값을 실시간으로 나타내준다.
public class MainActivity extends Activity implements SensorEventListener{
private SensorManager mSensorManager; private Sensor mOrientation; TextView text; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mOrientation = mSensorManager.getDefaultSensor(Sensor. text = (TextView)findViewById(R.id.text); }
@Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_UI); }
@Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); mSensorManager.unregisterListener(this); }
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }
@Override public void onSensorChanged(SensorEvent event) { // TODO Auto-generated method stub if(event.sensor.getType() ==
Sensor. text.setText("방향 센서값\n\n방위각: " + event.values[0]+ "\n피치:"+event.values[1]+"\n롤:"+event.values[2]); } }
@Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub
} } 3차원 공간에서 방귀각, 피치, 롤값을 나타내준다. |
이전 진행 |
예상 진행 |
실제 소요 |
0/2, 0/2, 0/2, 0/1 |
0/2, 0/2, 0/2, 0/1 |
3H, 2H, 1H, 1H |
수행 내용 |
||
Android 통신, DB활용, 서비스, 센서 |
||
관련 자료 : Step by Step 안드로이드 프로그래밍, 그림으로 쉽게 설명하는 안드로이드 프로그래밍 |
||
기타 |
||
통신부분이 여전히 막혀 노트북을 가져와 다시 테스트 해보려 한다. 안드로이드 내에 DB를 활용 가능한 것을 알았고, 통신부분만 해결된다면 외부 DB와의 연결도 가능할 것 같다. 기존 주간계획서에서 계획했던 프로세스, 데이터 스토리지, 콘텐트 부분을 학습하지 못하였지만 프로젝트부분에 크게 필요한 부분은 아니라 남는 시간, 주말을 이용하여 모두 학습할 계획이다. |