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

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

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

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

Android

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

Q&A

解決済

1回答

4792閲覧

Android11.0アプリで接続中のSSIDを取得したい

yamayamak

総合スコア131

Java

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

Android

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

0グッド

1クリップ

投稿2022/01/24 11:18

Android11.0アプリで接続中のSSIDを取得したいです。
実機接続でAndroid9.0スマホ端末なら問題なくSSID取得できるのですが、Android11.0スマホ端末の場合には、<unknown ssid>となり正常に取得できないので、何を変更すればよいかわかりません。

ご教授ください。

Manifest.xml

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Activityクラス

WifiManager wmanager = (WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE); WifiInfo winfo = wmanager.getConnectionInfo(); Log.d("SSID=",winfo.getSSID());

参考ですが、以下のサイトに「Android 10(API レベル 29)以降では、このフォアグラウンド サービス タイプを宣言する必要があります。」とあるので、Manifest.xmlに記載しているのですがうまくいきません。
https://developer.android.com/training/location/permissions?hl=ja

Manifest.xml

<application > <service android:name="ActivityClassName" android:foregroundServiceType="location" />

android:name="ActivityClassName"の部分にActivityクラス名を記載すると実行できるのですが、Android11.0スマホ端末の場合には、<unknown ssid>となります。
この書き方の問題と思われる場合は何が間違っているかアドバイスをお願いします。

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

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

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

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

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

hoshi-takanori

2022/01/24 12:09

AndroidManifest.xml に書くだけでなく、位置情報の許可を求めるダイアログを出す必要があるのでは。(やり方は参考にした記事に書いてあるはず。)
yamayamak

2022/01/25 00:51

コメントありがとうございます。その部分は実施していて、アプリ管理でも位置情報が利用時に許可になっているのを確認しています。他に気になることがあればコメントをお願いします。
yamayamak

2022/01/27 05:27

ありがとうございます。色々試してみましたが、やはりダメでした。ACCESS_BACKGROUND_LOCATION自体は大きく影響していないようでした。 新規プロジェクトでこの部分だけに特化したものを作成するとOKでした。(ACCESS_BACKGROUND_LOCATIONやServiceタグで特に何も指定しないでも問題なく取得できました。) ダメなプロジェクトと新規プロジェクトのManifestやbuild.gradleなどで全ての内容を合わせて確認しましたが、改善しませんでした。 (新規プロジェクトのみOKで、使いたいプロジャクトではSSIDが取得できませんでした) 色々調べてみると、ダメな方は「ACCESS_FINE_LOCATION」が許可されないという問題になっています。 Manifestでは同じ書き方なのに、「ACCESS_FINE_LOCATION」が許可されないという問題です。 何かのチェックで引っ掛かっているようですが、新規プロジェクトと使いたいプロジェクトの差分が見当たりません。 (Manifestやbuild.gradleなどで全ての内容を合わせても結果が異なる) 何かチャックしないといけないような事がわかればお教え頂けると幸いです。 本件も少し内容も変更になっているので質問もやり直そうと思います。
yamayamak

2022/01/27 06:35

いつもありがとうございます。スマホのアプリ管理から設定で権限も同じであることを確認しています。 エラー内容も確認していますが、特段気になるような内容は見当たらないので、困っています。 ほぼ、Gradleバージョンや設定内容、Manifestなどを同一にしていると思ってますが、問題が改善しません。 個々のActivityの内容にはあまり関係ないと思うので、共通系を徹底的に同じにして試していますが、わからず困っています。 少し質問も変わってきましたので、新たな質問にしました。こちらは、そちらを参照するようにして解決したら、クローズさせて頂く予定です。 色々ありがとうございました。また、今後ともアドバイスお願いします。
guest

回答1

0

自己解決

閲覧頂いた皆様、ご意見いただいた皆様。ご協力ありがとうございました。
本投稿は内容が変わってきたので、「Androidスマホアプリで「ACCESS_FINE_LOCATION」が許可されない」で別投稿で質問させて頂いていました。
その質問の回答と同じですが、以下の問題が見つかりましたので、共有させて頂きます。
【Manifest.xmlファイルに、serviceタグなどの記述は必要ありませんでした。】

(1)元々のプロジェクトで位置情報権限の許可ダイアログの方法に問題があった。
【許可ダイアログのプログラム】
getApplicationContext().startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
こちらでダイアログで許可した場合に、ACCESS_COARSE_LOCATION のみ許可され、ACCESS_FINE_LOCATION は許可されない
(Android10以降はACCESS_FINE_LOCATIONがないと接続中のSSIDが取得できない。)

(2)スマホの設定=>アプリ管理=>アプリリスト=>該当アプリ=>アプリの権限=>許可されているアプリに「位置情報」があった場合に
レベルがいくつかあり見た目で確認できない。同じように許可されているように見えても、ACCESS_FINE_LOCATIONが許可されていない場合がある
ACCESS_COARSE_LOCATIONのみ許可されているのか、ACCESS_FINE_LOCATIONも許可されているのかわからない。
位置情報が許可されていても、ACCESS_FINE_LOCATIONは許可されていない場合がある。
上記(1)のダイアログで許可した場合はACCESS_FINE_LOCATIONは許可されない。

(3)AndroidStudioでプロジェクトを実行した場合に、アプリを一度手動でアンインストールしないと、位置情報の権限の許可のレベルが変わらない。
上記(2)のようにレベルがいくつかあるため、どのレベルで許可されているかわからない。
2つのプロジェクトのソースをいくら合わせて実行しても、スマホのアプリで許可されている権限が異なるため、結果が異なる。
毎回、アプリを手動でアンインストールして確認する必要がある。

以上、共有させて頂きます。何かの参考になれば幸いです。

投稿2022/01/29 01:25

編集2022/01/29 01:28
yamayamak

総合スコア131

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問