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

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

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

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

Android

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

Q&A

解決済

1回答

913閲覧

Androidスマホアプリで「ACCESS_FINE_LOCATION」が許可されない

yamayamak

総合スコア131

Java

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

Android

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

0グッド

1クリップ

投稿2022/01/27 05:58

編集2022/01/28 05:00

2つのプロジェクトあります。一つは、以下のようなこの確認のために新たに作ったプロジェクトです。
元々のプロジェクトで「ACCESS_FINE_LOCATION」が許可されないため、確認用に以下で新規にプロジェクトを作成しました。
(プロジェクトで利用しているバージョンなどがわかるため、記載させて頂きます。)

ファイルの内容も必要最小限にし、元々のプロジェクトも全てのActivityを削除して、
共通ファイルやMainActivityのみで全く同じにしても、結果が異なり、元々のプロジェクトが「ACCESS_FINE_LOCATION」が許可されず、新プロジェクトは「ACCESS_FINE_LOCATION」が許可されました。
基本的に、同じ内容にしたファイルは以下の通りです。

【共通系】
・build.gradle(app)
・build.gradle(project)
・gradle-wrapper.properties
・proguard-rules.pro
・gradle.properties
・settings.gradle
・local.properties
・Manifest.xml
【Activity】
・ManActivity.java
・activity_main.xml

app_idは当然ですが異なっていますが、それ以外は基本的に合わせています。

2つのプロジェクトで同じにした内容を以下に共有します。

build.gradle(app)

1apply plugin: 'com.android.application' 2check.dependsOn 'assembleMinSdkIcsDebugAndroidTest' 3 4android { 5 compileSdkVersion 30 6 buildToolsVersion '30.0.2' 7 flavorDimensions "minSdkVersion" 8 defaultConfig { 9 applicationId "com.xxxxxx.testgetssid" 10 minSdkVersion 21 11 targetSdkVersion 30 12 versionCode 59 13 versionName "5.9(359)" 14 testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' 15 } 16 buildTypes { 17 release { 18 minifyEnabled true 19 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 } 21 } 22 lintOptions { 23 abortOnError false 24 } 25 productFlavors { 26 minSdkIcs { 27 dimension "minSdkVersion" 28 minSdkVersion 21 29 } 30 } 31} 32 33dependencies { 34 implementation 'com.android.support:design:28.0.0' 35 implementation 'com.android.support.constraint:constraint-layout:1.0.2' 36}

build.gradle(testGetSSID)

1buildscript { 2 repositories { 3 mavenCentral() 4 google() 5 } 6 dependencies { 7 classpath 'com.android.tools.build:gradle:4.2.0' 8 } 9} 10 11allprojects { 12 repositories { 13 google() 14 } 15} 16 17task clean(type: Delete) { 18 delete rootProject.buildDir 19}

XML【AndroidManifest.xml】

1<?xml version="1.0" encoding="utf-8"?> 2<manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.xxxxxxxx.testgetssid"> 4 5 <application 6 android:allowBackup="true" 7 android:icon="@mipmap/ic_launcher" 8 android:label="@string/app_name" 9 android:roundIcon="@mipmap/ic_launcher_round" 10 android:supportsRtl="true" 11 android:theme="@style/Theme.TestGetSSID"> 12 13 <activity android:name=".MainActivity"> 14 <intent-filter> 15 <action android:name="android.intent.action.MAIN" /> 16 <category android:name="android.intent.category.LAUNCHER" /> 17 </intent-filter> 18 </activity> 19 20 <activity 21 android:name=".NextActivity" /> 22 </application> 23 24 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 25 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 26 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 27 <uses-permission android:name="android.permission.INTERNET" /> 28 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 29 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 30 31</manifest>

Java【MainActivity.java(抜粋)】

1public class MainActivity extends AppCompatActivity { 2 3 @Override 4 protected void onCreate(Bundle savedInstanceState) { 5 super.onCreate(savedInstanceState); 6 setContentView(R.layout.activity_main); 7 8 WifiManager wmanager = (WifiManager)getApplicationContext().getSystemService(WIFI_SERVICE); 9 WifiInfo winfo = wmanager.getConnectionInfo(); 10 11 TextView dispErrTxtView = (TextView) findViewById(R.id.textView1); 12 // *************************** For Debug *************************** 13 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 14 Log.d("SSID00000_OK:", winfo.getSSID()); 15 } else { 16 Log.d("SSID00000_NG:",winfo.getSSID()); 17 } 18 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 19 Log.d("SSID111111_OK:", winfo.getSSID()); 20 } else { 21 Log.d("SSID111111_NG:",winfo.getSSID()); 22 } 23 if (wmanager.isWifiEnabled()) { 24 if (winfo != null) { 25 Log.d("SSID22222",winfo.getSSID()); 26 } 27 } 28 String tempSSID = winfo.getSSID(); 29 dispErrTxtView.setText("DEBUG:" + tempSSID); 30 Log.d("wifiInfo", winfo.toString()); 31 Log.d("SSID33333",winfo.getSSID()); 32 }

うまくいく場合は、SSID00000_OKになっていて、うまく行かない場合はSSID00000_NGが出力されるため、
「ACCESS_FINE_LOCATION」の許可が通っていないようです。
「ACCESS_COARSE_LOCATION」はどちらのプロジェクトも問題なく、SSID111111_OKが出力されます。

何かのチェックで引っ掛かっているようですが、新規プロジェクトと使いたいプロジェクトの差分が見当たりません。

何度調べてもわからず困ってます。
何か他に共通設定など、チャックしないといけないような事など確認した方が良いと思われる内容は何でもコメントをお願いします。

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

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

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

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

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

jimbe

2022/01/27 07:04

コードのマークダウンでファイル名 (AndroidManifest.xml とか)をお書きになっている個所は言語名 (xml とか java とか ) を書くところです。 ファイル名は枠外にお書きください。 2つのプロジェクトで、どちらがどういう状況なのでしょう。 元になったほうではどうやっても FINE は NG で、新たな方(ご提示のコード群?) は FINE が OK だったり NG だったりと安定しないということでしょうか。 > 何度調べてもわからず困ってます。 何を何度もお調べになったのか、調べたこと(と分かったこと)も教えていただけますか。
yamayamak

2022/01/27 08:12 編集

コメントありがとうございます。コメントの件修正させて頂きます。 2つのプロジェクトは、元々あったプロジェクトで「ACCESS_FINE_LOCATION」が許可されないので、新規プロジェクトを作成して試してます。 なので、新規プロジェクトでManifestやbuild.gradleなどで全ての内容を合わせても結果が異なるということを確認しました。 結果は、「ACCESS_FINE_LOCATION」が許可されるかされないかということで、新規に作ったプロジェクトは許可されているが、元々のプロジェクトは許可されないということです。 Manifestやbuild.gradleなど共通の内容が同じなのに何が異なるのかわからない状況なので、他に確認すべき内容があればコメント頂けますと幸いです。
jimbe

2022/01/27 08:35

> うまくいく場合は、SSID00000_OKになっていて、うまく行かない場合はSSID00000_NGが出力される の「うまくいく場合」と言うのがご提示のコードを実行した場合で、「うまく行かない場合」というのが元になっている(ご提示されていない)プロジェクトのコードを実行した場合、ということでしょうか。 > Manifestやbuild.gradleなどで全ての内容を合わせても結果が異なる となれば、後はコードが違うだけ(のはず)という認識であっていますでしょうか。
yamayamak

2022/01/28 00:51

いつもありがとうございます。頂いているコメントの認識です。そのため、何が問題かわからない状況です。 内容を同じにしたファイルは以下の通りです。 ・build.gradle(app) ・build.gradle(project) ・gradle-wrapper.propertiesproguard-rules.progradle.properties ・settings.gradle ・local.properties ・Manifest.xml Activityファイルも最初に起動される本質問と内容を同じにしてみましたが、結果は同じでした。 他に共通設定などがあれば、ご教授お願いします。
yamayamak

2022/01/28 04:52

コメントありがとうございます。 はい、その点は最初に確認しています。今も再度確認しましたが、特に問題ありませんでした。 スマホの設定から「アプリリスト」で該当のアプリを選択し、「アプリの権限」から許可されているアプリになっている「位置情報」が入っていることを確認しています。 2つとも全く同じ権限になっています。 他に何か気になることがありましたら、お願いします。
jimbe

2022/01/28 08:13

動かないほうから動く方へ、コードを少しずつ移植していってみては如何でしょうか。 ある時点から動作し無くなれば、その直前に追加した部分が問題ということになって手掛かりになるのではないかと思います。
yamayamak

2022/01/29 01:24

ご意見大変ありがとうございます。 解決しました。問題はいくつかありましたが、回答に投稿させて頂きます。
guest

回答1

0

自己解決

閲覧頂いた皆様、ご意見いただいた皆様。ご協力ありがとうございました。
以下の問題が見つかりましたので、共有させて頂きます。

(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:24

yamayamak

総合スコア131

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問