SlideShare uma empresa Scribd logo
1 de 4
Baixar para ler offline
1
2018 Final-term Examination (100)
Architecting Smart Devices
Date: 2018-12-11
1. LocationManager가 LocationListener 등록에 사용하는 함수를 제시하고
GPS_PROVIDER와 NETWORK_PROVIDER의 차이점을 서술하시오. 예를 들어 정밀하게
위치를 추적하기 위해 0.1초에 한 번씩 미세한 위치 변화도 모두 추적할 수 있는 적절
한 함수 입력을 제시하시오. (20)
- LocationListener를 등록하는 함수는 LocationManager. requestLocationUpdates()임
- GPS_PROVIDER는 GPS를 이용해 위치 정보를 획득할 수 있다. NETWORK_PROVIDER는
이동 통신 network이나 WiFi 정보를 이용해 위치 정보를 획득한다. GPS_PROVIDER는
하늘에 떠있는 GPS 위성을 볼 수 있어야 위치 정보가 얻어지지만 위치는 매우 정확하
게 얻을 수 있다. NETWORK_PROVIDER는 실내 혹은 실외에서 위치 정보를 쉽게 얻을
수 있지만 위치 정밀도는 좋지 않다.
- 문제에 제시한 함수 입력은 다음과 같다.
LocationManager. requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0,
LocationListener);
2. 만보계용 Android app을 구성하려 한다. 다음에 답하시오. (40)
1) SensorManager로부터 만보계용 Sensor를 획득하는 code 제시 (10)
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor sensorAccel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
2) 사용자 걸음 여부를 판단하기 위한 SensorEventListener 구성(property와 method) 제
시 (20)
- SensorEventListener를 상속받은 class는 MySensorListener로 생각
- 가속계가 출력하는 x, y, z축 가속도의 변화를 추적하는 code가 필요하다. 예를 들면
다음과 같다. 가속도 변화값은 diffAccel에 저장된다.
2
public class MySensorListener implements SensorEventListener {
public double oldX, oldY, oldZ;
public double newX, newY, newZ;
public double diffAccel;
public MySensorListener() {
oldX = oldY = oldZ = newX = newY = newZ = 0.;
diffAccel = 0.;
}
@Override
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
newX = event.values[0];
newY = event.values[1];
newZ = event.values[2];
diffAccel = Math.abs(newX – oldX) + Math.abs(newY – oldY) + Math.abs(newZ –
oldZ);
oldX = newX; oldY = newY; oldZ = newZ;
}
}
}
3) SensorEventListener를 SensorManager에 등록하고 해제하는 code를 각각 제시 (10)
- 등록 code
MySensorListener mySensorListener = new MySensorListener();
sensorManager.registerListener(mySensorListener, sensorAccel,
SensorManager.SENSOR_DELAY_NORMAL);
- 해제 code
sensorManager.unregisterListener(mySensorListener);
3. 다음을 Android code로 구현하라. Code는 짧을수록 가산점. (40)
3
1) 10초에 한 번씩 Toast message로 “Wake up”을 출력. Background에 있을 때도 항상
Toast message 출력. Thread.start()를 쓰지 않고 개념적으로만 제시 가능. (20)
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
…
Intent intent = new Intent(this, ToastWakeService.class);
startService(intent);
}
}
class ToastWakeService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int nResult = super.onStartCommand(intent, flags, startId);
while (true) {
try { Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Toast.makeText(this, "Wake up", Toast.LENGTH_SHORT).show();}
}
return nResult;
}
}
2) 사용자에게 입력받은 문자열이 “start”라면 사용자 발신 전화 정보를 추적하는
BroadcastReceiver를 등록하고, “stop”이 입력되면 이 BroadcastReceiver 등록을 해제하
는 code. BroadcastReceiver 이름은 PhoneCallReceiver로 정하며 이미 있다고 가정함
(PhoneCallReceiver에 대한 code는 작성할 필요 없음). (20)
4
PhoneCallReceiver phoneCallReceiver;
phoneCallReceiver = new PhoneCallReceiver();
EditText etInput;
etInput = (EditText) findViewById(R.id.etInput);
String sInput = etInput.getText.toString();
if (sInput.equals(“start”)) {
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
registerReceiver(phoneCallReceiver, intentFilter);
}
else if (sInput.equals(“stop”)) {
unregisterReceiver(phoneCallReceiver);
}

Mais conteúdo relacionado

Mais de Yong Heui Cho

TestBCD2018-2(answer)
TestBCD2018-2(answer)TestBCD2018-2(answer)
TestBCD2018-2(answer)Yong Heui Cho
 
TestEC2018-2(answer)
TestEC2018-2(answer)TestEC2018-2(answer)
TestEC2018-2(answer)Yong Heui Cho
 
TestEC2018-1(answer)
TestEC2018-1(answer)TestEC2018-1(answer)
TestEC2018-1(answer)Yong Heui Cho
 
TestBCD2018-1(answer)
TestBCD2018-1(answer)TestBCD2018-1(answer)
TestBCD2018-1(answer)Yong Heui Cho
 
TestSDS2018-1(answer)
TestSDS2018-1(answer)TestSDS2018-1(answer)
TestSDS2018-1(answer)Yong Heui Cho
 
BJT - Analysis of Bias
BJT - Analysis of BiasBJT - Analysis of Bias
BJT - Analysis of BiasYong Heui Cho
 
TestCloud2018-2(answer)
TestCloud2018-2(answer)TestCloud2018-2(answer)
TestCloud2018-2(answer)Yong Heui Cho
 
TestECD2018-1(answer)
TestECD2018-1(answer)TestECD2018-1(answer)
TestECD2018-1(answer)Yong Heui Cho
 
Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)Yong Heui Cho
 
TestCloud2018-1(answer)
TestCloud2018-1(answer)TestCloud2018-1(answer)
TestCloud2018-1(answer)Yong Heui Cho
 
RF 증폭기 설계(Design of RF Amplifier)-rev1
RF 증폭기 설계(Design of RF Amplifier)-rev1RF 증폭기 설계(Design of RF Amplifier)-rev1
RF 증폭기 설계(Design of RF Amplifier)-rev1Yong Heui Cho
 
Computing Paradigm - rev1
Computing Paradigm - rev1Computing Paradigm - rev1
Computing Paradigm - rev1Yong Heui Cho
 
Cloud Deployment Model
Cloud Deployment ModelCloud Deployment Model
Cloud Deployment ModelYong Heui Cho
 
Cloud Computing Architecture
Cloud Computing ArchitectureCloud Computing Architecture
Cloud Computing ArchitectureYong Heui Cho
 
Cloud Computing Fundamentals
Cloud Computing FundamentalsCloud Computing Fundamentals
Cloud Computing FundamentalsYong Heui Cho
 
클라우드서비스(강의계획서,2018-1)
클라우드서비스(강의계획서,2018-1)클라우드서비스(강의계획서,2018-1)
클라우드서비스(강의계획서,2018-1)Yong Heui Cho
 
전자회로설계(강의계획서,2018-1)
전자회로설계(강의계획서,2018-1)전자회로설계(강의계획서,2018-1)
전자회로설계(강의계획서,2018-1)Yong Heui Cho
 

Mais de Yong Heui Cho (20)

Cloud Computing
Cloud ComputingCloud Computing
Cloud Computing
 
Computing Paradigm
Computing ParadigmComputing Paradigm
Computing Paradigm
 
TestBCD2018-2(answer)
TestBCD2018-2(answer)TestBCD2018-2(answer)
TestBCD2018-2(answer)
 
TestEC2018-2(answer)
TestEC2018-2(answer)TestEC2018-2(answer)
TestEC2018-2(answer)
 
TestEC2018-1(answer)
TestEC2018-1(answer)TestEC2018-1(answer)
TestEC2018-1(answer)
 
TestBCD2018-1(answer)
TestBCD2018-1(answer)TestBCD2018-1(answer)
TestBCD2018-1(answer)
 
TestSDS2018-1(answer)
TestSDS2018-1(answer)TestSDS2018-1(answer)
TestSDS2018-1(answer)
 
BJT - Analysis of Bias
BJT - Analysis of BiasBJT - Analysis of Bias
BJT - Analysis of Bias
 
TestCloud2018-2(answer)
TestCloud2018-2(answer)TestCloud2018-2(answer)
TestCloud2018-2(answer)
 
TestECD2018-1(answer)
TestECD2018-1(answer)TestECD2018-1(answer)
TestECD2018-1(answer)
 
Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)Test-SDIC2018-2(answer)
Test-SDIC2018-2(answer)
 
TestCloud2018-1(answer)
TestCloud2018-1(answer)TestCloud2018-1(answer)
TestCloud2018-1(answer)
 
Cloud Service Model
Cloud Service ModelCloud Service Model
Cloud Service Model
 
RF 증폭기 설계(Design of RF Amplifier)-rev1
RF 증폭기 설계(Design of RF Amplifier)-rev1RF 증폭기 설계(Design of RF Amplifier)-rev1
RF 증폭기 설계(Design of RF Amplifier)-rev1
 
Computing Paradigm - rev1
Computing Paradigm - rev1Computing Paradigm - rev1
Computing Paradigm - rev1
 
Cloud Deployment Model
Cloud Deployment ModelCloud Deployment Model
Cloud Deployment Model
 
Cloud Computing Architecture
Cloud Computing ArchitectureCloud Computing Architecture
Cloud Computing Architecture
 
Cloud Computing Fundamentals
Cloud Computing FundamentalsCloud Computing Fundamentals
Cloud Computing Fundamentals
 
클라우드서비스(강의계획서,2018-1)
클라우드서비스(강의계획서,2018-1)클라우드서비스(강의계획서,2018-1)
클라우드서비스(강의계획서,2018-1)
 
전자회로설계(강의계획서,2018-1)
전자회로설계(강의계획서,2018-1)전자회로설계(강의계획서,2018-1)
전자회로설계(강의계획서,2018-1)
 

TestSDS2018-2(answer)

  • 1. 1 2018 Final-term Examination (100) Architecting Smart Devices Date: 2018-12-11 1. LocationManager가 LocationListener 등록에 사용하는 함수를 제시하고 GPS_PROVIDER와 NETWORK_PROVIDER의 차이점을 서술하시오. 예를 들어 정밀하게 위치를 추적하기 위해 0.1초에 한 번씩 미세한 위치 변화도 모두 추적할 수 있는 적절 한 함수 입력을 제시하시오. (20) - LocationListener를 등록하는 함수는 LocationManager. requestLocationUpdates()임 - GPS_PROVIDER는 GPS를 이용해 위치 정보를 획득할 수 있다. NETWORK_PROVIDER는 이동 통신 network이나 WiFi 정보를 이용해 위치 정보를 획득한다. GPS_PROVIDER는 하늘에 떠있는 GPS 위성을 볼 수 있어야 위치 정보가 얻어지지만 위치는 매우 정확하 게 얻을 수 있다. NETWORK_PROVIDER는 실내 혹은 실외에서 위치 정보를 쉽게 얻을 수 있지만 위치 정밀도는 좋지 않다. - 문제에 제시한 함수 입력은 다음과 같다. LocationManager. requestLocationUpdates(LocationManager.GPS_PROVIDER, 100, 0, LocationListener); 2. 만보계용 Android app을 구성하려 한다. 다음에 답하시오. (40) 1) SensorManager로부터 만보계용 Sensor를 획득하는 code 제시 (10) SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); Sensor sensorAccel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 2) 사용자 걸음 여부를 판단하기 위한 SensorEventListener 구성(property와 method) 제 시 (20) - SensorEventListener를 상속받은 class는 MySensorListener로 생각 - 가속계가 출력하는 x, y, z축 가속도의 변화를 추적하는 code가 필요하다. 예를 들면 다음과 같다. 가속도 변화값은 diffAccel에 저장된다.
  • 2. 2 public class MySensorListener implements SensorEventListener { public double oldX, oldY, oldZ; public double newX, newY, newZ; public double diffAccel; public MySensorListener() { oldX = oldY = oldZ = newX = newY = newZ = 0.; diffAccel = 0.; } @Override public void onSensorChanged(SensorEvent event) { if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { newX = event.values[0]; newY = event.values[1]; newZ = event.values[2]; diffAccel = Math.abs(newX – oldX) + Math.abs(newY – oldY) + Math.abs(newZ – oldZ); oldX = newX; oldY = newY; oldZ = newZ; } } } 3) SensorEventListener를 SensorManager에 등록하고 해제하는 code를 각각 제시 (10) - 등록 code MySensorListener mySensorListener = new MySensorListener(); sensorManager.registerListener(mySensorListener, sensorAccel, SensorManager.SENSOR_DELAY_NORMAL); - 해제 code sensorManager.unregisterListener(mySensorListener); 3. 다음을 Android code로 구현하라. Code는 짧을수록 가산점. (40)
  • 3. 3 1) 10초에 한 번씩 Toast message로 “Wake up”을 출력. Background에 있을 때도 항상 Toast message 출력. Thread.start()를 쓰지 않고 개념적으로만 제시 가능. (20) public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { … Intent intent = new Intent(this, ToastWakeService.class); startService(intent); } } class ToastWakeService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { int nResult = super.onStartCommand(intent, flags, startId); while (true) { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } Toast.makeText(this, "Wake up", Toast.LENGTH_SHORT).show();} } return nResult; } } 2) 사용자에게 입력받은 문자열이 “start”라면 사용자 발신 전화 정보를 추적하는 BroadcastReceiver를 등록하고, “stop”이 입력되면 이 BroadcastReceiver 등록을 해제하 는 code. BroadcastReceiver 이름은 PhoneCallReceiver로 정하며 이미 있다고 가정함 (PhoneCallReceiver에 대한 code는 작성할 필요 없음). (20)
  • 4. 4 PhoneCallReceiver phoneCallReceiver; phoneCallReceiver = new PhoneCallReceiver(); EditText etInput; etInput = (EditText) findViewById(R.id.etInput); String sInput = etInput.getText.toString(); if (sInput.equals(“start”)) { IntentFilter intentFilter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL); registerReceiver(phoneCallReceiver, intentFilter); } else if (sInput.equals(“stop”)) { unregisterReceiver(phoneCallReceiver); }