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
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
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
800
compileSdkVersion33でgetSerializable/getParcelableがつらい話
napplecomputer
13
6k
式年遷Target SDK Version
napplecomputer
0
490
Target SDK Versionを上げない Notification runtime permission対応
napplecomputer
0
530
通知がOFFだとToastは表示されな… されてる!?
napplecomputer
0
1.2k
Photo Pickerを触って比較してみた
napplecomputer
0
2.3k
Android Qのストレージの話
napplecomputer
3
1.3k
Other Decks in Programming
See All in Programming
Performance Optimization With LLMs
xleitix
0
210
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
1.3k
contenteditable と日本語入力に向き合う
colorful12
0
220
続・コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions-again
handlename
0
130
Coding with AI: How to trust the storyteller (AWS Community Day Adria, Ljubljana 2026)
slobodan
0
120
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
1k
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
210
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
970
AI-Powered Domain-Driven Design
ziobrando
0
320
Python Lambdaにおけるテストしやすい設計とAI支援の活用 / Designing Testable Python Lambda Functions with AI
kitano_yuichi
1
200
気持ちぃ〜角丸 Squircle
ryu1013
0
340
[Dev Group Paris Octobre 26] Agentforce, SIforce, Claudeforce, Slackbot… on s'y retrouve ?
nabondance
0
120
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
310
Claude Code のすすめ
schroneko
67
230k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Embracing the Ebb and Flow
colly
88
5.2k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
A designer walks into a library…
pauljervisheath
211
25k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
290
A Tale of Four Properties
chriscoyier
163
24k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
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