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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

3回答

1483閲覧

WiFiのAPをスキャンするプログラムを作成したのですが、エラーは出ませんが実機で表示できません。

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

1クリップ

投稿2019/01/17 14:19

WifiのAPをスキャンするプログラムをあるサイトを参考にして作成
しましたが、実機に実行すると表示できません。(エラーは出ていません)
layoutのactivity_wifi_manager02.xmlができていないと思うのですが、どうもうまくいきません。
WifiManager02.javaとAndroidMainfest.xmlはサイトを参考にして、activity_wifi_manager02.xmlは自分で作成しました。
開発環境は、Android Studio3.2.1 Android8.0です。
どうかご教授のほどよろしくお願いいたします。

WifiManager02.java

package com.moonlight_aska.android.wifimanager02; import java.util.List; import android.app.ListActivity; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Bundle; import android.widget.ArrayAdapter; public class WifiManager02 extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WifiManager manager = (WifiManager)getSystemService(WIFI_SERVICE); if(manager.getWifiState() == WifiManager.WIFI_STATE_ENABLED) { // APをスキャン manager.getScanResults(); // スキャン結果を取得 List<ScanResult> apList = manager.getScanResults(); String[] aps = new String[apList.size()]; for(int i=0; i<apList.size(); i++) { aps[i] = "SSID:" + apList.get(i).SSID + apList.get(i).level + "dBm"; } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, aps); setListAdapter(adapter); } } }

AndroidMainfest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.moonlight_aska.android.wifimanager02"> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".WifiManager02"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>

###activity_wifi_manager02.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".WifiManager02"> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>

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

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

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

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

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

guest

回答3

0

Android 8.0 の端末をお使いなのですよね。こちらの記事が参考になると思います。
著者様に感謝しつつ、案内させていただきます。

Android 6.0 以降で WifiManager.getScanResults() を普通に実行しても結果が空のリストになってしまう

(私自身は8.0の端末を持っていない為に試せなかったので、情報の案内まで)

投稿2019/01/19 11:32

dodox86

総合スコア9183

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

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

退会済みユーザー

退会済みユーザー

2019/01/19 17:17

お返事ありがとうございます。このサイトはすでに参考させていただいておりましたが、できませんでした。もう一度確認してみます。ありがとうございます。
guest

0

パッケージ名から元にされたと思われるサイトを見つけましたが、あちらは開発についてある程度分かっている人向けの記事なので、断片しか提示されていません。
まず ListView にデータを表示するサンプルを探されてはいかがでしょうか。基本的な View なのですぐ見つかると思います。
そのサンプルを少しずつWifi関係を埋め込むようにしたほうが、理解しやすいと思います。

投稿2019/01/19 10:53

jimbe

総合スコア12648

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

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

退会済みユーザー

退会済みユーザー

2019/01/19 10:55

コメントありがとうございます。そう思いまして、listviewにデータを表示するサンプルなど基本的なものは確認し、表示できているのですが、List<scanresult>を使ったプログラムにすると表示できなくなってしまいます。 どうしたら良いのか手詰まり状態です。アドバイスいただけると助かります。よろしくお願いいたします。
jimbe

2019/01/19 11:22

でしたらそのコードを示して頂けると、こちらも試せます。
退会済みユーザー

退会済みユーザー

2019/01/19 17:19

お返事ありがとうございます。 コードを載せます。 RSSI.java package com.moonlight_aska.android.rssi; import android.net.wifi.ScanResult; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.widget.ArrayAdapter; import android.support.v7.app.AppCompatActivity; import android.widget.ListView; import java.util.List; public class RSSI extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rssi); WifiManager manager = (WifiManager) getSystemService(WIFI_SERVICE); List<ScanResult> results = manager.getScanResults(); String[] items = new String[results.size()]; for(int i=0; i<results.size(); ++i) { items[i] = String.format("SSID: %s, rssi: %d",results.get(i).SSID,results.get(i).level); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items); ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(adapter); } } activity_rssi.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> パーミッション <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
jimbe

2019/01/19 18:44

こんな時間までお疲れ様です. dodox86さんの示されたリンク先のコードを混ぜることで出来ました. どのように参考にされたのか, さやかさんのコードにはその様子は見られませんでしたが… 以下のコードは Android 9.0 の Xperia XZ3 で動作を確認しています. AndroidManifest.xml に書いたパーミッションは <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> の二つです. 実行すると, このアプリが "位置情報へのアクセスの許可" を求めている旨のダイアログが表示され, 許可するとリストに出ます。一度許可すれば、アプリを再起動してもダイアログは出ません. インストールしなおすとまたダイアログが出ます. ```java package com.moonlight_aska.android.rssi; import android.Manifest; import android.content.pm.PackageManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ListView; import java.util.List; public class RSSI extends AppCompatActivity { private final int PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rssi); if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION); return; } logScanResults(); } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION && grantResults[0] == PackageManager.PERMISSION_GRANTED) { logScanResults(); } else { // 許可されなかった場合 //TODO: どうします? } } private void logScanResults() { WifiManager manager = (WifiManager) getSystemService(WIFI_SERVICE); List<ScanResult> results = manager.getScanResults(); String[] items = new String[results.size()]; for(int i=0; i<results.size(); ++i) { items[i] = String.format("SSID: %s, rssi: %d",results.get(i).SSID,results.get(i).level); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items); ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(adapter); } } ```
jimbe

2019/01/19 18:48

すいません, コードが見難いかと思い, 回答のほうにも書いてしまいました.
guest

0

ベストアンサー

こんな時間までお疲れ様です.
dodox86さんの示されたリンク先のコードを混ぜることで出来ました.
どのように参考にされたのか, さやかさんのコードにはその様子は見られませんでしたが…
以下のコードは Android 9.0 の Xperia XZ3 で動作を確認しています.

AndroidManifest.xml に書いたパーミッションは
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
の二つです.

実行すると, このアプリが "位置情報へのアクセスの許可" を求めている旨のダイアログが表示され, 許可するとリストに出ます。一度許可すれば、アプリを再起動してもダイアログは出ません.
インストールしなおすとまたダイアログが出ます.

java

1package com.moonlight_aska.android.rssi; 2 3import android.Manifest; 4import android.content.pm.PackageManager; 5import android.net.wifi.ScanResult; 6import android.net.wifi.WifiManager; 7import android.os.Bundle; 8import android.support.v7.app.AppCompatActivity; 9import android.util.Log; 10import android.widget.ArrayAdapter; 11import android.widget.ListView; 12 13import java.util.List; 14 15public class RSSI extends AppCompatActivity { 16 private final int PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION = 0; 17 18 @Override 19 public void onCreate(Bundle savedInstanceState) { 20 super.onCreate(savedInstanceState); 21 setContentView(R.layout.activity_rssi); 22 23 if (checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 24 requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION); 25 return; 26 } 27 28 logScanResults(); 29 } 30 31 @Override 32 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 33 super.onRequestPermissionsResult(requestCode, permissions, grantResults); 34 35 if (requestCode == PERMISSIONS_REQUEST_CODE_ACCESS_COARSE_LOCATION && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 36 logScanResults(); 37 } else { 38 // 許可されなかった場合 39 //TODO: どうします? 40 } 41 } 42 43 private void logScanResults() { 44 WifiManager manager = (WifiManager) getSystemService(WIFI_SERVICE); 45 List<ScanResult> results = manager.getScanResults(); 46 47 String[] items = new String[results.size()]; 48 for(int i=0; i<results.size(); ++i) { 49 items[i] = String.format("SSID: %s, rssi: %d",results.get(i).SSID,results.get(i).level); 50 } 51 52 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, items); 53 ListView listView = (ListView) findViewById(R.id.listview); 54 listView.setAdapter(adapter); 55 } 56}

投稿2019/01/19 18:41

jimbe

総合スコア12648

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

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

退会済みユーザー

退会済みユーザー

2019/01/20 08:44

お返事いただきありがとうございます。こちらこそ、夜分遅くまでありがとうございます。 dodox86さんの示されたリンク先のコードは、参考にさせていただいておりましたが、うまくいかなかったので、他のサイトのコードと混ぜつつ参考にさせていただいておりました。分かり難言い方で申し訳ありません。 エミュレーターで実行したところ、表示できました。本当にありがとうございます。 最後に質問したいのですが、私のコードのどこがダメだったのでしょうか…? また、このコードを使用することで、接続していないwifiのRSSI値も表示できるのでしょうか。 お返事お待ちしております。よろしくお願いいたします。
jimbe

2019/01/20 09:59

コードそのものは間違ってはいませんでした. logScanResults メソッドの中身はサヤカさんが onCreate に書かれていたものそのままです. 違ったのは, Android のパーミッションです. 最近は GPS だけでなく Wifi でもスマホの位置が取得できるようになったため, 怪しいアプリが位置情報を勝手に集めないように Wifi を使うアプリに対し許可を(パーミッションの設定以外に) '動的に' 設定しなければいけないようになったようです. そのコードが入っていなかったために(Wifi へのアクセスが許可されず) manager.getScanResults(); が 0 件のリストを返していました. ... ということが dodox86 さんの示されたリンク先には書いてあったのですが, そこまでご理解が進まなかったようですね. 接続していない Wifi を取れるのかについては, すいません私は Wifi の API については知らないので, このコードもリストに値が出たことを確認しただけで, 内容は分かりません. API の仕様を確認されるか, いっそご自身で Wifi を切ってアプリで確認されるほうが早いかと思います.
退会済みユーザー

退会済みユーザー

2019/01/20 13:01 編集

お返事ありがとうございます。なるほど、そこまで理解が進んでいませんでした。勉強になりました。ありがとうございます。 そちらについては、自分で勉強し直してみます。 大変お世話になりました。本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問