質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

2160閲覧

iPhoneのWifiとキャリアの電波強度をプログラムから取得したい

MiyamotoSatoshi

総合スコア30

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/07/09 03:28

編集2018/07/09 03:29

Unityにてゲーム作成をしております、
UI上に現在のWIFIとキャリアの電波強度を表示したいという要望があるので、
Objective-Cのライブラリを作成しようと思っているのですが、
なかなかObjective-Cのコードを見つけられません。

プログラム上から電波強度を取得するにあたり、
知見をお持ちの方いらっしゃいましたらご助言いただけませんでしょうか?

下記のようなサイトは見つけたのですが、ここからどうやってライブラリに落とし込むか
がわかっていません。
Xcode|iPhoneのアンテナピクト・RSSI値を取得してみよう!

■環境
Unity:2018.1.6f1
Xcode:9.4

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

記載頂いているサイトのコードをそのまま実行した場合は、取得出来ないのでしょうか。
ライブラリに落とし込む というのは、具体的には何を求められているのでしょうか。
またどこまで実施してみたのでしょうか。

まずは状況を整理されるのが一番だと思います。

投稿2018/07/12 04:20

YasuhiroMiyake

総合スコア1336

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MiyamotoSatoshi

2018/07/12 05:23

Unityからネイティブプラグインという機能を使って、.mmファイルのメソッドを呼び出し その中で電波強度を取得したものを、Unity側に返すという機能が求められています。 Static Libraryで作ろうとしたのですが、UIApplication *app = [UIApplication sharedApplication]; など、いろんな所でエラーが出てきたのでサンプルのソースを.mm から.mに移動させたのですが これをどうやって呼び出そうか?と.mm→.m→.mmと結果をもらって返す方法を模索しているところです。
YasuhiroMiyake

2018/07/12 10:14

状況は理解しましたが、もう少しだけ出来ることと出来ないことを整理したほうが良いように感じました。 まずは、.mmから.mに移動させた理由も少し不明なのですがひとつひとつ理由を考えてみるようしたほうが良いと思います。(ハマっている時こそ、まずは整理して最初からゆっくりと。) 問題解決だけ目的であれば、上記は不要ではあるのですが・・・。 > Unityからネイティブプラグインという機能を使って、.mmファイルのメソッドを呼び出し > その中で電波強度を取得したものを、Unity側に返すという機能が求められています。
MiyamotoSatoshi

2018/07/13 11:20

下記のような、Test1.mというソースを作ってみて、UnityからgetValueメソッドを呼び出して計算結果を 取得する事はできました。 ・・が、antennaBarメソッドの場合、 NSArray *subviews = [[[apps valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; のところで下記エラーが出ました。 解決方法を模索中です。 ◼️エラー ProductName Uncaught exception: NSUnknownKeyException: [<UIStatusBar_Modern 0x109705cc0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key foregroundView. ◼️ソースコード // // Test1.m // Test1 #import "Test1.h" @implementation Test1 : NSObject - (int) getValue:(int)nums { nums = nums + 100; return nums; } - (int)antennaBar { NSLog(@"antennaBar 1"); UIApplication *apps = [UIApplication sharedApplication]; NSLog(@"antennaBar 2"); NSArray *subviews = [[[apps valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSLog(@"antennaBar 3"); NSString *dataNetworkItemView = nil; NSLog(@"antennaBar 4"); for (id subview in subviews) { if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) { dataNetworkItemView = subview; break; } } NSLog(@"antennaBar 5"); return [[dataNetworkItemView valueForKey:@"signalStrengthBars"] intValue]; } @end
YasuhiroMiyake

2018/07/17 00:13

NSUnknownKeyException と書かれているので、指定したキーに該当する要素が見つからないということだと思います。 statusBarかforegroundViewだと思いますが、この辺りはデバッグしてひとつひとつ確認すると確認出来ると思います。
MiyamotoSatoshi

2018/07/17 01:36 編集

投稿後、調査を重ねて下記のようなソースによって、 ステータスバーをループで回す事はできるのですが。 最下部に貼ったログのように、UIStatusBarSignalStrengthItemView と _UIStatusBarCellularSignalView のIF文の中には入って来ず アンテナバーを取得する事ができませんでした。 何か権限のようなものが必要なのでしょうか? ◼️ソースコード - (int)antennaBar { NSLog(@"antennaBar 1"); NSLog(@"antennaBar 2"); // NSArray *subviews = [[[apps valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSArray *subviews = nil; NSLog(@"antennaBar 3"); id statusBar = [[UIApplication sharedApplication] valueForKey:@"statusBar"]; NSLog(@"antennaBar 4"); if ([statusBar isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) { NSLog(@"antennaBar 5"); subviews = [[[statusBar valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; } else { NSLog(@"antennaBar 6"); subviews = [[statusBar valueForKey:@"foregroundView"] subviews]; } NSLog(@"antennaBar 7"); NSString *dataNetworkItemView = nil; NSLog(@"antennaBar 8"); for (id subview in subviews) { NSLog(@"antennaBar aaaaaaa"); if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) { NSLog(@"antennaBar bbbbbb"); dataNetworkItemView = subview; break; } if([subview isKindOfClass:[NSClassFromString(@"_UIStatusBarCellularSignalView") class]]) { NSLog(@"antennaBar eeeeee"); dataNetworkItemView = subview; int fffff = [subview valueForKey:@"numberOfActiveBars"]; NSLog(@"fffff=%d",fffff); break; } } for (id subview in subviews) { NSLog(@"antennaBar cccccc"); if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { NSLog(@"antennaBar dddddd"); [(NSNumber*)[subview valueForKey:@"dataNetworkType"] intValue]; } } NSLog(@"antennaBar 9"); NSLog(@"12345"); id statusBaraaaa = [[UIApplication sharedApplication] valueForKey:@"statusBar"]; NSArray *children = nil; NSLog(@"23456"); children = [[[statusBaraaaa valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; NSLog(@"34567"); int type = 0; NSLog(@"45678"); for (id child in children) { NSLog(@"56789"); if ([child isKindOfClass:[NSClassFromString(@"UIStatusBarDataNetworkItemView") class]]) { NSLog(@"67890"); type = [[child valueForKeyPath:@"dataNetworkType"] intValue]; } } if (type == 0) { return NO; }else{ return YES; } int aaa = [[dataNetworkItemView valueForKey:@"signalStrengthBars"] intValue]; NSLog(@"aaa=%d",aaa); return aaa; } ◼️コンソールログ 1 2 3 4 5 7 8 aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaa cccccc cccccc cccccc cccccc cccccc cccccc 9 12345 23456 34567 45678 56789 56789 56789 56789 56789 56789
YasuhiroMiyake

2018/07/19 00:11

subviewsに何が入っているのかは確認済みでしょうか。
MiyamotoSatoshi

2018/07/22 05:13

全てUIViewでした。 下記、スタックオーバーフローで同じような質問をしたところ iOS11から取得できなくなったとの事でした。 そして、そもそもPrivateAPIをリリースアプリイ入れる事自体、 アップルが認めていない事が調べてわかりました。 電波強度を取得する機能を削る方向で調整してみる事にしました。 ■stackoverflow https://stackoverflow.com/questions/51373873/why-can-not-i-get-uistatusbarsignalstrengthitemview/51374928?noredirect=1#comment89755746_51374928
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問