로봇 모니터링 2/2 unit 21 로봇 sw 콘텐츠 교육원 조용수. 학습 목표 broadcasting...

24
로로 로로로로 2/2 UNIT 21 로로 SW 로로로 로로로 로로로

Upload: sherilyn-palmer

Post on 29-Dec-2015

261 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

로봇 모니터링 2/2UNIT

21

로봇 SW 콘텐츠 교육원조용수

Page 2: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

2학습 목표

• Broadcasting • Service

Page 3: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

브로드캐스팅3

BroadcastReceiver

BroadcastReceiver

BroadcastReceiver

sendBroadcast

Intent

Intent

Intent

Page 4: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

4브로드캐스팅

• BroadcastReceiver– public abstract

void onReceive (Context context, Intent intent)

• Context– public

abstract Intent registerReceiver (BroadcastReceiver receiver, IntentFilter filter)

– public abstract void unregisterReceiver (BroadcastReceiver receiver)

– public abstract void sendBroadcast (Intent intent)

Page 5: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

5시스템 브로드캐스팅

• ACTION_TIME_TICK• ACTION_TIME_CHANGED• ACTION_TIMEZONE_CHANGED• ACTION_BOOT_COMPLETED• ACTION_PACKAGE_ADDED• ACTION_PACKAGE_CHANGED• ACTION_PACKAGE_REMOVED• ACTION_PACKAGE_RESTARTED• ACTION_PACKAGE_DATA_CLEARED• ACTION_UID_REMOVED• ACTION_BATTERY_CHANGED• ACTION_POWER_CONNECTED• ACTION_POWER_DISCONNECTED• ACTION_SHUTDOWN

Page 6: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

시스템 브로드캐스팅6

public class MainActivity extends RobotActivity{ private Device leftEyeDevice; private Device rightEyeDevice; private BroadcastReceiver br = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(leftEyeDevice != null && rightEyeDevice != null) { String action = intent.getAction(); if(Intent.ACTION_POWER_CONNECTED.equals(action)) { leftEyeDevice.write(0, 255); rightEyeDevice.write(0, 255); } else if(Intent.ACTION_POWER_DISCONNECTED.equals(action)) { leftEyeDevice.write(0, 0); rightEyeDevice.write(0, 0); } } } };

Page 7: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

시스템 브로드캐스팅7

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_POWER_CONNECTED); filter.addAction(Intent.ACTION_POWER_DISCONNECTED); registerReceiver(br, filter); }

@Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(br); }

@Override public void onInitialized(Robot robot) { super.onInitialized(robot); leftEyeDevice = robot.findDeviceById(Albert.EFFECTOR_LEFT_EYE); rightEyeDevice = robot.findDeviceById(Albert.EFFECTOR_RIGHT_EYE); }}

Page 8: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스8

Object

Context

ContextWrapper

Service

Page 9: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 만들기9

public class MyService extends Service{ @Override public IBinder onBind(Intent intent) { return null; }}

Page 10: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 만들기10

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.unit23" android:versionCode="1" android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />

<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name="com.example.unit23.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> <service android:name="com.example.unit23.MyService"> </service> </application>

</manifest>

Page 11: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 호출하기 ( 명시적 인텐트 )11

public class MainActivity extends Activity{ private Intent intent;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

intent = new Intent(this, MyService.class); startService(intent); }

@Override protected void onDestroy() { super.onDestroy(); stopService(intent); }}

Page 12: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 호출하기 ( 명시적 인텐트 )12

public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

startService(new Intent(this, MyService.class)); }

@Override protected void onDestroy() { super.onDestroy(); stopService(new Intent(this, MyService.class)); }}

Page 13: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 생명주기13

Page 14: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 생명주기14

public class MyService extends Service{ @Override public void onCreate() { Log.v("Example", "onCreate"); super.onCreate(); }

@Override public void onDestroy() { Log.v("Example", "onDestroy"); super.onDestroy(); }

@Override public int onStartCommand(Intent intent, int flags, int startId) { Log.v("Example", "onStartCommand"); return super.onStartCommand(intent, flags, startId); }

@Override public IBinder onBind(Intent intent) { return null; }}

Page 15: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 호출하기 ( 암시적 인텐트 )15

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.unit23" android:versionCode="1" android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />

<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name="com.example.unit23.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> <service android:name="com.example.unit23.MyService"> <intent-filter> <action android:name="example.android.SERVICE" /> </intent-filter> </service> </application>

</manifest>

Page 16: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 호출하기 ( 암시적 인텐트 )16

public class MainActivity extends Activity{ private Intent intent;

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

intent = new Intent("example.android.SERVICE"); startService(intent); }

@Override protected void onDestroy() { super.onDestroy(); stopService(intent); }}

Page 17: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

서비스 호출하기 ( 암시적 인텐트 )17

public class MainActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

startService(new Intent("example.android.SERVICE")); }

@Override protected void onDestroy() { super.onDestroy(); stopService(new Intent("example.android.SERVICE")); }}

Page 18: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

마이크 서비스18

public class MyService extends Service{ private MicThread thread;

@Override public void onCreate() { super.onCreate();

thread = new MicThread(); thread.start(); }

@Override public void onDestroy() { super.onDestroy(); if(thread != null) thread.cancel(); }

@Override public IBinder onBind(Intent intent) { return null; }

Page 19: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

마이크 서비스19

private class MicThread extends Thread { private static final int FREQ = 44100; private static final int CHANNEL = AudioFormat.CHANNEL_IN_MONO; private static final int ENCODING = AudioFormat.ENCODING_PCM_16BIT; private boolean running = true;

@Override public void run() { int bufferSize = AudioRecord.getMinBufferSize(FREQ, CHANNEL, ENCODING) * 3; if(bufferSize <= 0) return;

AudioRecord audioRecord = new AudioRecord(AudioSource.MIC, FREQ, CHANNEL, ENCODING, bufferSize); if(audioRecord.getState() != android.media.AudioRecord.STATE_INITIALIZED) { audioRecord.release(); return; } short[] audioData = new short[bufferSize]; audioRecord.startRecording();

Page 20: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

마이크 서비스20

int len, v; long sum; while(running) { len = audioRecord.read(audioData, 0, bufferSize); if(running == false) break;

sum = 0; for(int i = 0; i < len; ++i) { v = Math.abs(audioData[i]); sum += v; } sum /= 100000; if(running == false) break; Intent intent = new Intent("example.intent.action.MICROPHONE"); intent.putExtra("example.intent.extra.MIC_LEVEL", (int)sum); sendBroadcast(intent); } audioRecord.stop(); audioRecord.release(); audioRecord = null; }

void cancel() { running = false; } }}

Page 21: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

마이크 서비스21

public class MainActivity extends RobotActivity{ private Device leftWheelDevice; private Device rightWheelDevice; private BroadcastReceiver br = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if("example.intent.action.MICROPHONE".equals(action)) { int level = intent.getIntExtra("example.intent.extra.MIC_LEVEL", 0); if(level > 100) { leftWheelDevice.write(-30); rightWheelDevice.write(-30); } else { leftWheelDevice.write(0); rightWheelDevice.write(0); } } } };

Page 22: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

마이크 서비스22

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);

registerReceiver(br, new IntentFilter("example.intent.action.MICROPHONE")); startService(new Intent("example.android.SERVICE")); }

@Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(br); stopService(new Intent("example.android.SERVICE")); }

@Override public void onInitialized(Robot robot) { super.onInitialized(robot); leftWheelDevice = robot.findDeviceById(Albert.EFFECTOR_LEFT_WHEEL); rightWheelDevice = robot.findDeviceById(Albert.EFFECTOR_RIGHT_WHEEL); }}

Page 23: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

마이크 서비스23

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.unit23" android:versionCode="1" android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />

<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme"> <activity android:name="com.example.unit23.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> <service android:name="com.example.unit23.MyService"> <intent-filter> <action android:name="example.android.SERVICE" /> </intent-filter> </service> </application>

</manifest>

Page 24: 로봇 모니터링 2/2 UNIT 21 로봇 SW 콘텐츠 교육원 조용수. 학습 목표 Broadcasting Service 2

숙제

• 가속도 센서 서비스 만들기– 서비스에서 폰의 가속도 센서 X 축 , Y 축 값 읽기– X 축 , Y 축 값을 브로드캐스팅으로 보내기– 액티비티에서 브로드캐스팅 받아서 로봇 움직이기

24