Slide 1

Slide 1 text

"XBSFOFTT"1* "OESPJE

Slide 2

Slide 2 text

ࣗݾ঺հ ๺ଜྋ גࣜձࣾ͸ͯͳ )BUFOBGVOOFMCJU 5XJUUFS!FYQFSPQFSP

Slide 3

Slide 3 text

Ϣʔβͷ ͓͔Ε͍ͯΔ ঢ়گΛ஌Δ

Slide 4

Slide 4 text

ెา͔ɺࣗసं͔

Slide 5

Slide 5 text

ెา͔ɺࣗసं͔า͍͍ͯ Δͷ͔ɺ૸͍ͬͯΔͷ͔ɺࢭ ·͍ͬͯΔͷ͔

Slide 6

Slide 6 text

ెา͔ɺࣗసं͔า͍͍ͯΔͷ͔ɺ૸ͬ ͍ͯΔͷ͔ɺࢭ·͍ͬͯΔͷ͔ͱ͋Δൣ ғ಺ʹೖ͔ͬͨɺͱ͋Δൣғ಺ʹ/ඵډଓ ͚͍ͯΔ͔ɺͱ͋Δൣғ಺͔Β཭୤͔ͨ͠

Slide 7

Slide 7 text

ెา͔ɺࣗసं͔ɺ৐Γ෺͔า͍͍ͯΔͷ͔ɺ૸ͬ ͍ͯΔͷ͔ɺࢭ·͍ͬͯΔͷ͔ͱ͋Δൣғ಺ʹೖͬ ͔ͨɺͱ͋Δൣғ಺ʹ/ඵډଓ͚͍ͯΔ͔ɺͱ͋Δ ൣғ಺͔Β཭୤͔ͨ͋͠Δ৔ॴ͔Β/ϝʔτϧҠ ಈͨ͠ͱ͋ΔϏʔίϯ͕ݟ͔ͭͬͨɺͱ͋ΔϏʔ ίϯ͕ݟ͔ͭΒͳ͘ͳͬͨͱ͋Δ͔࣌ؒΒҰఆ࣌ ؒܦաͨ͠ϔουϗϯΛ͍ͯ͞͠Δɺͦ͏Ͱͳ͍ ੖ΕͰ͋ΔɻઇͰ͋ΔɻӍͰ͋Δͱಉ࣌ʹɺڧ෩ Ͱ͋ΔɻԹ౓ͱ࣪౓ɻFUDʜ

Slide 8

Slide 8 text

"XBSFOFTT"1* w Ϣʔβͷঢ়گΛಡΈऔΔ"1* w ࣮૷ָ͕ w ʮਖ਼͍͠ʯσʔλ͕ಘΒΕΔͱ͍ͯ͠Δ w ϝϞϦɺόοςϦʔͷঢ়گΛݟͯಈ͘

Slide 9

Slide 9 text

"XBSFOFTT"1* w 6TF(PPHMF1MBZ4FSWJDFTWd w &OBCMF"XBSFOFTT"1* w "EEJUJPOBM"1* &OBCMF1MBDFT"1*GPS "OESPJE w "EEJUJPOBM"1* &OBCMF/FBSCZ.FTTBHFT "1*

Slide 10

Slide 10 text

"XBSFOFTT"1* mGoogleApiClient = new GoogleApiClient.Builder(this)
 .addApi(Awareness.API)
 .enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
 @Override
 public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
 Log.e("onConnectionFailed", "failed");
 }
 })
 .build();

Slide 11

Slide 11 text

4OBQTIPU"1* 'FODF"1*

Slide 12

Slide 12 text

4OBQTIPU"1*

Slide 13

Slide 13 text

4OBQTIPU"1* w ௚ۙͷঢ়گΛऔಘ͢Δ w ݱࡏϢʔβ͸ϔουϗϯΛ࢖͍ͬͯΔ w ݱࡏϢʔβ͕͍Δ৔ॴ w ݱࡏϢʔβ͕͍Δ৔ॴͷఱؾ w FUDʜ

Slide 14

Slide 14 text

)FBEQIPOF Awareness.SnapshotApi
 .getHeadphoneState(mGoogleApiClient)
 .setResultCallback(new ResultCallback() {
 @Override
 public void onResult(@NonNull HeadphoneStateResult headphoneStateResult) {
 switch (headphoneStateResult.getHeadphoneState().getState()) {
 case HeadphoneState.PLUGGED_IN :
 Log.e("ϔουϗϯ", "ૠ͍ͯ͠Δ");
 break;
 case HeadphoneState.UNPLUGGED:
 Log.e("ϔουϗϯ", "ૠ͍ͯ͠ͳ͍");
 break;
 }
 }
 });

Slide 15

Slide 15 text

8FBUIFS Awareness.SnapshotApi
 .getWeather(mGoogleApiClient)
 .setResultCallback(new ResultCallback() {
 @Override
 public void onResult(@NonNull WeatherResult weatherResult) {
 if (weatherResult.getWeather() == null) return; weatherResult.getWeather() .getConditions()
 }
 });

Slide 16

Slide 16 text

8FBUIFSHFU$POEJUJPOT ɾJOU<>ͰఱؾΛฦ͢ $0/%*5*0/@6/,/08/ $0/%*5*0/@$-&"3 $0/%*5*0/@$-06%: $0/%*5*0/@'0((: $0/%*5*0/@)";: $0/%*5*0/@*$: $0/%*5*0/@3"*/: $0/%*5*0/@4/08: $0/%*5*0/@4503.: PS$0/%*5*0/@8*/%:

Slide 17

Slide 17 text

'FODF"1*

Slide 18

Slide 18 text

'FODF"1* w ঢ়ଶʹมԽ͕͋Ε͹௨஌ w Ϣʔβ͕า͖࢝Ίͨ w Ϣʔβ͕ࣗసंͰҠಈ͍ͯ͠Δ w Ϣʔβ͕ͱ͋ΔΤϦΞ͔Β཭୤ͨ͠ w FUDʜ

Slide 19

Slide 19 text

TUBSU8BMLJOH AwarenessFence startWakingFence = DetectedActivityFence .starting(DetectedActivityFence.WALKING);

Slide 20

Slide 20 text

VQEBUF'FODFT Awareness.FenceApi.updateFences(mGoogleApiClient,
 new FenceUpdateRequest.Builder()
 .addFence("startWakingFence", startWakingFence, pendingIntent)
 .build())
 .setResultCallback(new ResultCallback() {
 @Override
 public void onResult(@NonNull Status status) {
 if (!status.isSuccess()) {…}
 }
 });

Slide 21

Slide 21 text

'FODF6QEBUF3FRVFTU Awareness.FenceApi.updateFences(mGoogleApiClient,
 new FenceUpdateRequest.Builder()
 .addFence("startWakingFence", startWakingFence, pendingIntent)
 .build())
 .setResultCallback(new ResultCallback() {
 @Override
 public void onResult(@NonNull Status status) {
 if (!status.isSuccess()) {…}
 }
 });

Slide 22

Slide 22 text

#SPBEDBTU3FDFJWFS public class MyFenceReceiver extends BroadcastReceiver { … @Override
 public void onReceive(Context context, Intent intent) { if (TextUtils.equals(fenceState.getFenceKey(), "startWakingFence")) {
 switch(fenceState.getCurrentState()) {
 case FenceState.TRUE:…
 case FenceState.FALSE:…
 case FenceState.UNKNOWN:…
 …
 }
 } …

Slide 23

Slide 23 text

$PNCJOBUJPO'FODF

Slide 24

Slide 24 text

$PNCJOBUJPO'FODF AwarenessFence.and(
 DetectedActivityFence .during(DetectedActivityFence.WALKING),
 HeadphoneFence .during(HeadphoneState.PLUGGED_IN)
 ); า͍͓ͯΓɺϔουϗϯΛ͚͍ͭͯΔ

Slide 25

Slide 25 text

$PNCJOBUJPO'FODF AwarenessFence walkingAndPlugInHeadPhoneFence = AwarenessFence.and(
 DetectedActivityFence.during(DetectedActivityFence.WALKING) ,
 HeadphoneFence.during(HeadphoneState.PLUGGED_IN),
 AwarenessFence.not(LocationFence.in(35.010974, 135.7612923, 50, 0L))
 ); า͍͓ͯΓɺϔουϗϯΛ͚͍ͭͯΔ͕ɺͱ͋Δ৔ॴͷ൒ܘN಺ ʹ͸͍ͳ͍

Slide 26

Slide 26 text

$PNCJOBUJPO'FODF AwarenessFence.or(AwarenessFence.and(
 DetectedActivityFence.during(DetectedActivityFence.WALKING) ,
 HeadphoneFence.during(HeadphoneState.PLUGGED_IN),
 AwarenessFence.not(LocationFence.in(35.010974, 135.7612923, 50, 0L))
 ), BeaconFence.found(…)); า͍͓ͯΓɺϔουϗϯΛ͚͍ͭͯΔ͕ɺͱ͋Δ৔ॴͷ൒ܘN಺ ʹ͸͍ͳ͍ɻ·ͨ͸ɺͱ͋ΔϏʔίϯ͕ͦ͹ʹݟ͔ͭͬͨɻ

Slide 27

Slide 27 text

ॴײ w ʮݡ͍ʯػೳΛ࡞Δͷ͕༰қʹͳͬͨ w ͜Μͳʹ؆୯ͳΒ࢖ͬͯΈΑ͏͔ͱ͍͏ؾʹͳ Δ w Ͳ͏͏·͘࢖͏͔͸ߟ͑Δඞཁ͕͋Δ

Slide 28

Slide 28 text

ৄࡉ w IUUQTEFWFMPQFSTHPPHMFDPNBXBSFOFTT w IUUQTEFWFMPQFSTHPPHMFDPNBOESPJE SFGFSFODFDPNHPPHMFBOESPJEHNT BXBSFOFTTQBDLBHFTVNNBSZ w IUUQTEFWFMPQFSTHPPHMFDPNBOESPJE HVJEFTSFMFBTFTKVOF@@@W

Slide 29

Slide 29 text

͋Γ͕ͱ͏͍͟͝·ͨ͠