WiFiのAPをスキャンするプログラムを作成したのですが、エラーは出ませんが実機で表示できません。
解決済
回答 3
投稿
- 評価
- クリップ 1
- VIEW 2,574

退会済みユーザー
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>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
Android 8.0 の端末をお使いなのですよね。こちらの記事が参考になると思います。
著者様に感謝しつつ、案内させていただきます。
Android 6.0 以降で WifiManager.getScanResults() を普通に実行しても結果が空のリストになってしまう
(私自身は8.0の端末を持っていない為に試せなかったので、情報の案内まで)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
+1
こんな時間までお疲れ様です.
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" />
の二つです.
実行すると, このアプリが "位置情報へのアクセスの許可" を求めている旨のダイアログが表示され, 許可するとリストに出ます。一度許可すれば、アプリを再起動してもダイアログは出ません.
インストールしなおすとまたダイアログが出ます.
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);
}
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
パッケージ名から元にされたと思われるサイトを見つけましたが、あちらは開発についてある程度分かっている人向けの記事なので、断片しか提示されていません。
まず ListView にデータを表示するサンプルを探されてはいかがでしょうか。基本的な View なのですぐ見つかると思います。
そのサンプルを少しずつWifi関係を埋め込むようにしたほうが、理解しやすいと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.11%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/01/20 02:17