Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Wi-Fi RTTによる屋内測位アプリを作ろう
Search
napplecomputer
February 08, 2019
Programming
18k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Wi-Fi RTTによる屋内測位アプリを作ろう
napplecomputer
February 08, 2019
More Decks by napplecomputer
See All by napplecomputer
Kotlin2.0対応などでビルド時間を45%削減したぞ!
napplecomputer
0
1.2k
EmojiPicker触ってみた
napplecomputer
0
790
compileSdkVersion33でgetSerializable/getParcelableがつらい話
napplecomputer
13
6k
式年遷Target SDK Version
napplecomputer
0
480
Target SDK Versionを上げない Notification runtime permission対応
napplecomputer
0
520
通知がOFFだとToastは表示されな… されてる!?
napplecomputer
0
1.2k
Photo Pickerを触って比較してみた
napplecomputer
0
2.3k
Android Qのストレージの話
napplecomputer
3
1.2k
Other Decks in Programming
See All in Programming
XHTMLが残したもの
yosuke_furukawa
PRO
2
450
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
400
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
自分的「カンファレンスの楽しみ方」
syumai
0
200
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
130
高専キャリア LT 発表内容
crysta1221
6
5.6k
AIと壁打ちしながら進めるコスト管理
fufuhu
2
2k
アクセシビリティから考える情報設計
high_g_engineer
0
320
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
ALB ログから Trace を気合で繋げる技術
fohte
7
880
不幸な GC
chencmd
0
890
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
140
Featured
See All Featured
Scaling GitHub
holman
464
140k
Between Models and Reality
mayunak
4
450
Marketing to machines
jonoalderson
1
5.8k
What's in a price? How to price your products and services
michaelherold
247
13k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Design in an AI World
tapps
1
310
Believing is Seeing
oripsolob
1
210
How to Ace a Technical Interview
jacobian
281
24k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Transcript
8J'J355ʹΑΔଌҐΞϓϦ Λ࡞Ζ͏ !OBQQMFDPNQVUFS 1
ࣗݾհ • ͳͬͽʔ • !OBQQMFDPNQVUFS • גࣜձࣾσΟʔɾΤψɾΤʔॴଐ • .07ͷϢʔβʔΞϓϦ։ൃ 2
࣍ 3 ͖͔͚ͬ 8J'J355ͷ༷ ࡞ͬͯΈͨ ਫ਼Λ্͛ΔͨΊͷΞΠσΟΞ
͖͔͚ͬ 4
5 )PXUPHFUPOFNFUFSMPDBUJPOBDDVSBDZ GSPN"OESPJEEFWJDFT (PPHMF*0` IUUQTZPVUVCFWZX(H4S(0%6
8J'J355ͷ༷ 6
"OESPJEͷҐஔใऔಘํ๏ 7
'VTFE-PDBUJPO 8
'VTFE-PDBUJPOͳ͠ 9 ΞϓϦ ηϯαʔ" ΞϓϦ ηϯαʔ$ ηϯαʔ#
'VTFE-PDBUJPO͋Γ 10 ΞϓϦ ηϯαʔ" ΞϓϦ ηϯαʔ$ ηϯαʔ# (PPHMF1MBZ 4FSWJDFT
'VTFE-PDBUJPO 11 (14 8J'J 344* ΩϟϦΞجہ ਫ਼ ϝʔτϧ ϝʔτϧ ϝʔτϧʁ
! " " ҐஔଌҐ༻ " ! ʁ
'VTFE-PDBUJPO 12 (14 8J'J 344* ΩϟϦΞجہ 8J'J 355 ਫ਼ ϝʔτϧ
ϝʔτϧ ϝʔτϧʁ ϝʔτϧ ! " " " ҐஔଌҐ༻ " ! ʁ "
'VTFE-PDBUJPO 13 (14 8J'J 344* ΩϟϦΞجہ 8J'J 355 ਫ਼ ϝʔτϧ
ϝʔτϧ ϝʔτϧʁ ϝʔτϧ ! " " " ҐஔଌҐ༻ " ! ʁ " /&8
8J'J355ͷ༷ 14
8J'J355 • 3553PVOE5SJQ5JNFͷུ • *&&&NDͰఆٛ • *&&&NDʹରԠ͍ͯ͠ΔΞΫηεϙΠϯτͱɺ *&&&NDʹରԠ͍ͯ͠Δ͕ඞཁ • ௨৴͔࣌ؒΒڑΛܭଌ͢Δ
15
ڑܭଌ 16 ΞΫηεϙΠϯτ ڑτʔλϧ࣌ؒʷޫͷ͞ D ̎
ڑܭଌͬͱৄ͘͠ 17 ΞΫηεϙΠϯτ '5.3FRVFTU '5. U U "$, U
U U U ڑ UU UU ʷޫͷ͞ D ࣌ؒ
ͷҐஔΛܭࢉ͢Δ 18
ͷҐஔΛࢉग़͢Δ • 355ͰऔΕΔͷΞΫηεϙΠϯτ·Ͱͷڑ͚ͩ • ͷҐஔใͷࢉग़355ͷൣғ֎ • ࣗͰܭࢉ͢Δ • ΞΫηεϙΠϯτͷҐஔใ355ͷൣғ֎ •
ΞΫηεϙΠϯτ͕ͭ͋ΕҐஔͷಛఆ͕Մೳ • ਫ਼Λग़͢ͳΒͭ΄͍͠ 19
ΞΫηεϙΠϯτ͕ͭͷ߹ 20
ΞΫηεϙΠϯτ͕ͭͷ߹ 21
ΞΫηεϙΠϯτ͕ͭͷ߹ 22
࣮ࡍʹᘳͳ औಘͰ͖ͳ͍ 23
ݱ࣮ 24
25
(PPHMF*0Ͱհ͞Ε͍ͯͨํ๏ • ࣍ݩަ࠲ඪʹͱΞΫηεϙΠϯτΛஔ͘ • ϐλΰϥεͷఆཧΛͬͯํఔࣜͰදݱ͢Δ • ͭͷ࣍ํఔࣜΛͭͷ࿈ཱํఔࣜʹͯ͠ղ͘ • ͭͷ࣍ํఔࣜʹͳΔ •
ͭͷ࣍ํఔࣜͷͰଟ֯ܗΛ࡞Γɺͦͷଟ֯ܗͷ த৺ΛͷҐஔͱ͢Δ 26
࣍ݩަ࠲ඪʹͱΞΫηεϙΠϯτΛஔ͘ 27
28 x1 y1 r1 x, y (x − x1 )2
+ (y − y1 )2 = r2 1 ϐλΰϥεͷఆཧΛͬͯํఔࣜͰදݱ͢Δ
ϐλΰϥεͷఆཧΛͬͯํఔࣜͰදݱ͢Δ 29 (x − x1 )2 + (y − y1
)2 = r2 1 (x − x3 )2 + (y − y3 )2 = r2 3 (x − x2 )2 + (y − y2 )2 = r2 2 (x − x4 )2 + (y − y4 )2 = r2 4
࣍ํఔࣜΛඳը͢Δ 30 (x − x1 )2 + (y − y1
)2 = r2 1 (x − x3 )2 + (y − y3 )2 = r2 3 (x − x2 )2 + (y − y2 )2 = r2 2 (x − x4 )2 + (y − y4 )2 = r2 4
ଟ֯ܗͷਅΜதΛͷॴͱ͢Δ 31 (x − x1 )2 + (y − y1
)2 = r2 1 (x − x3 )2 + (y − y3 )2 = r2 3 (x − x2 )2 + (y − y2 )2 = r2 2 (x − x4 )2 + (y − y4 )2 = r2 4
"OESPJEͷ8J'J355"1* 32
"OESPJEͰͷ8J'J355 • 04ͱͯ͠"OESPJE "1*-FWFM ͔ΒରԠ • ͱͯ͠1JYFM 9-ؚΉ ͕ରԠ͍ͯ͠Δ •
*0Ͱ1JYFMTͱݴͬͯͨͷͰ1JYFM1JYFMର Ԡͯ͠Δ͔ 33
ಛ • ΞΫηεϙΠϯτʹ8J'Jͱͯ͠ଓ͠ͳͯ͑͘Δ • ଞͷΞΫηεϙΠϯτʹ8J'Jͱͯ͠ଓதͰ͑Δ • ̍ͷ"1*ͷ࣮ߦͰ'5.Λෳճ͛ͯɺฏۉɺඪ४ ภࠩΤϥʔΛฦͯ͘͠ΕΔ • كʹϚΠφεͷڑ͕ฦͬͯ͘Δʜ
• ߴස NT͘Β͍ʣͰ͏ͱࢮ͵ 34
Δ͜ͱ • 8J'JΞΫηεϙΠϯτΛεΩϟϯ͢Δ • εΩϟϯͯ͠ಘΒΕͨΞΫηεϙΠϯτͷதʹ8J'J 355ରԠ͍ͯ͠ΔΞΫηεϙΠϯτ͕͋Δ͔֬ೝ͢Δ • 8J'J355ରԠΞΫηεϙΠϯτͱ8J'J355ͷ ΓͱΓΛͯ݁͠ՌΛಘΔ 35
ඞཁͳ1FSNJTTJPO <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 36
8J'JΞΫηεϙΠϯτΛεΩϟϯ val receiver = object: BroadcastReceiver() { override fun onReceive(context:
Context, intent: Intent) { when(intent.action) { WifiManager.SCAN_RESULTS_AVAILABLE_ACTION -> { // Wi-FiͷεΩϟϯ͕ྃͨ͠ } } } } val filter = IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) registerReceiver(receiver, filter) 37
8J'JΞΫηεϙΠϯτΛεΩϟϯ val wifiManager = getSystemService(Context.WIFI_SERVICE) as WifiManager wifiManager.startScan() 38
8J'JΞΫηεϙΠϯτΛεΩϟϯ val scanResults = wifiManager.scanResults.filter { it.is80211mcResponder } 39
ΞΫηεϙΠϯτ·ͰͷڑΛऔಘ val rangingRequest = RangingRequest.Builder() .addAccessPoints(scanResults) .build() val rttManager =
getSystemService(Context.WIFI_RTT_RANGING_SERVICE) as WifiRttManager val resultCallback = object : RangingResultCallback() { override fun onRangingResults(results: MutableList<RangingResult>) { val ragingResults = results.filter { it.status == STATUS_SUCCESS } } override fun onRangingFailure(code: Int) { } } rttManager.startRanging(rangingRequest, executor, resultCallback) 40
TUBSU4DBOͷ༷มߋ • 8JGJ.BOBHFSTUBSU4DBO ͕"1*-FWFM͔ Β৭ʑมߋ • ಥવͷEFQSFDBUFE • ͔͠ସखஈࠓͷͱ͜Ζͳͦ͞͏ •
όοΫάϥϯυΞϓϦͰʹճ͔͠ݺͳ͍ • ϑΥΞάϥϯυΞϓϦͰʹճ͔͠ݺͳ͍ 41
8J'J"XBSFʹΑΔ355 42
8J'J"XBSFʹΑΔ355 • 8J'J"XBSFΛ͏ͱ"OESPJEಉ࢜Ͱ355Λ ߦ͑Δ • "1*-FWFM͔Β • 8J'J"XBSF͢Ε͕͍ͪ௨৴ͷΑ͏ͳػೳΛ࣮ݱ Ͱ͖Δ •
8J'J"XBSFͰଓޙɺ355༻ͷϝιουΛݺͿ 43
࡞ͬͯΈͨ 44
࡞ΔࡍʹΔ͜ͱ • ΞΫηεϙΠϯτͷબఆ • ॴͷબఆ • ਤͷೖख • ΞΫηεϙΠϯτͷઃஔ •
ΞΫηεϙΠϯτͷҢܦͷऔಘ • ΞϓϦͷ࡞ 45
ΞΫηεϙΠϯτͷબఆ 46
ΞΫηεϙΠϯτͷબఆ • *&&&NDʹରԠͨ͠8J'JΞΫηεϙΠϯτ • 8J'J"XBSF • ͭ·Γ1JYFM 47
*&&&NDରԠΛ ᨳ͍ͬͯΔΞΫηεϙΠϯτ 48
ແ͍ 49
ແ͍ ˞ͳͬͽʔௐ 50
51 (PPHMF8J'J
(PPHMF8J'J • (PPHMF*0Ͱ(PPHMF8J'J͕XJMMTPPO ͰରԠ͢Δͱݴ͍ͬͯͨ • (PPHMF8J'JͷϦϦʔεϊʔτΛҎ্ࢹ͠ଓ͚ ͕ͨ*&&&NDͷ͜ͱҰॻ͔Ε͍ͯͳ͍ • XJMMTPPOͱԿͩͬͨͷ͔ 52
(PPHMF8J'J • %SPJE,BJHJͷొஃܾ·ͬͨͷͰɺ(PPHMF8J'J ͕͍ͭߋ৽͞Ε͍͍ͯΑ͏ʹങ݄ͬͯʹηοςΟϯ άͨ͠ • ՈͰ8J'J355ͷ"OESPJE"1*Λࢼͨ͠Β8J'J 355ରԠ͍ͯ͠ΔΞΫηεϙΠϯτ͕ݟ͔ͭͬͨ • (PPHMF8J'J͕͠ΕͬͱରԠ͍ͯͨ͠
53
(PPHMF8J'J • ରԠ͍ͯ͠Δͷͷ(PPHMF 8J'Jͷઃఆ߲ʹ8J'J 355ͳ͍ • (PPHMF*0Ͱ8J'J355σϑΥϧτͰΦϯͱݴͬ ͍͕ͯͨΦϑʹͰ͖ͳ͍ • օ͞Μ͕͓͍ͷ(PPHMF8J'J'5.SFRVFTUΛ
ૹΔͱ'5.ฦͯ͘͠Ε·͢ 54
ॴͷબఆ 55
ॴͷબఆ • ී௨ܭଌ͍ͨ͠ॴ͕͋Δͱ͜Ζ͔Β࢝·ΔͷͰ ॴ͕ܾ·ͬͨঢ়ଶͰ࢝·Δʢͣʣ • ࠓճܭଌ͢Δ͜ͱ͕తͳͷͰɺॴͷબఆ͕ඞཁ 56
ॴͷ݅ • ͍ॴ • ڱ͍ॴਫ਼తʹແཧ • ݐͷେ͖͕͞ਖ਼֬ͳਤ͕͋Δ • ݐͷҢܦΛʢϝδϟʔͰଌΔͳͲͷํ๏Ͱʣ Δ͜ͱ͕Ͱ͖Δ
• ΞΫηεϙΠϯτͷҢܦʹਖ਼֬ͳ͕ඞཁ 57
ࠓճͷॴ • ࠓճࣗͷՈʹͨ͠ • ͋ͱ͔ΒݟΔͱ͜Εࣦഊ • ڱ͍ • σϞಈըͰΞϓϦͷը໘ͱॴΛऩΊ͔͕ͨͬͨɺ ՈͷதΛ%SPJE,BJHJͰࡽ͢༐ؾͳ͔ͬͨ
58
ਤͷೖख 59
ਤͷೖख • ϢʔβʔʹݟͤΔͱ͖ͱΞΫηεϙΠϯτͷઃஔʹ ༻͢Δ • ͷਤ͕ͳ͍ͳΒଌҐ͢Δҙຯ͋·Γͳ͍ • ਖ਼֬ͳਤͰͳ͚Εਖ਼֬ͳଌҐͰ͖ͳ͍ • ࠓճؒऔΓਤΛ༻
60
ΞΫηεϙΠϯτͷઃஔ 61
ΞΫηεϙΠϯτͷઃஔ • ձͷେ͖͞ʹ߹Θͤͯ·ΜΜͳ͘ઃஔ͢Δ • ΞΫηεϙΠϯτʹғ·Ε͍ͯΔΑ͏ͳঢ়ଶʹ͢Δ • ઢͰ݁ΔΑ͏ͳஔͰਫ਼͕ग़ͳ͍ • ࢛͍֯෦ͳΒ࢛۱ͱਅΜத͕ྑͦ͞͏ •
ࠓճׂͱࡶ 62
ΞΫηεϙΠϯτͷҢܦ 63
ΞΫηεϙΠϯτͷҢܦͷऔಘ • ਤͳͲΛͬͯΞΫηεϙΠϯτͷҢܦΛؤுͬ ׂͯΓग़͢ • େม 64
ΞϓϦͷ࡞ 65
ΞϓϦͷ࡞ • (PPHMF.BQ4%,Λ͏͔Θͳ͍͔ΛܾΊΔ • Θͳ͍߹ɺਤతͳૢ࡞ࣗલ࣮͕ඞཁ • Θͳ͍߹ɺҢܦͳ͍͍ͯ͘ • Ψοͱؾ߹Ͱ࣮͢Δ •
ਫ਼Λؾʹ͠ͳ͚Ε؆୯ʹ࣮Ͱ͖Δ • ਫ਼Λؾʹ͢Δͱແݶʹ͕͔͔࣌ؒΔ 66
ਫ਼Λ্͛ΔΞΠσΟΞ 67
ਫ਼Λ্͛Δ • ߴ͞Λ͏ • ΞΫηεϙΠϯτ͕ఱҪʹ͋Δ߹ͳͲߟྀͨ͠ ΄͏͕ྑͦ͞͏ • ΞΫηεϙΠϯτͷઃஔॴΛݟ͢ • ڑ͔ΒҐஔใΛࢉग़͢Δํ๏Λมߋ͢Δ
• લճऔಘͨ͠ͳͲΛͬͯҟৗΛແࢹ͢Δ 68
ਫ਼Λ্͛Δ • ΞΫηεϙΠϯτͷΛ૿͢ • ඪ४ภࠩͷେ͖ͳΞΫηεϙΠϯτΛແࢹ͢ΔͳͲ • ֤छηϯαʔΛ͏ • Ճηϯαʔ •
ίϯύε 69
·ͱΊ 70
·ͱΊ • ΞΫηεϙΠϯτ(PPHMF8J'J • ਤΞΫηεϙΠϯτͷҢܦͳͲͷਖ਼͕֬͞ॏཁ • ͋ΔఔΛ͠ͳ͍ͱਫ਼ग़ͳ͍ • ਫ਼͕ѱ͍߹Ͳ͜ʹ͕͋Δͷ͔ಛఆ͠ʹ͍͘ 71
͜͠ͷͰσϞ͢ΔͳΒ 72
͜ͷͰσϞ͢Δʹ • ձͷ8J'JʹӨڹΛ༩͑ΔՄೳੑ͕͋ΔͷͰӡӦʹ֬ ೝ • 8J'J"XBSFΛ͏ • ઃஔָ͕ 73
͜ͷͰσϞ͢Δʹ • ਖ਼֬ͳਤͷೖखఘΊΔ • (PPHMF.BQΛͦͷ··͍͍ͬͯͳΒਖ਼֬ͳ ਤͳ͍͍ͯ͘ • ৄࡉͳਤ͕͋ͬͨ΄͏͕໘ന͍͕ɺσϞͳͷͰ ͷલͰಈ͔͚ͩ͢Ͱे 74
͜ͷͰσϞ͢Δʹ • ઃஔॴ࢛۱ʴձͷେ͖͞ʹԠͯ͡ਅΜதʹ • Ңܦؤுͬͯ༧͢Δ • લͳͲʹਤΒͤͯΒ͑ͳ͍͔ަব͢Δ • 8J'J"XBSFͳΒஔ͚ͩ͘ͳͷͰɺΈͳ͞Μ ʹ࣋ͬͯΒ͏ͷ͋Γ
75